vendredi 24 octobre 2014

CHIPcon partie 3, module SRAM

Dans cet article je discute de l'utilisation de la mémoire RAM à interface SPI Microchip 23LC512

Cette mémoire RAM à interface SPI est vraiment pratique puisqu'elle ne requiert que 4 GPIO, SCK, MISO, MOSI et SELECT. Et comme l'atMega328P possède un périphérique SPI l'utilisation en est très simple. C'est le même périphérique SPI qui est utilisé pour la carte SD chacun ayant un SELECT différent.

Le 23LC512-IP possède 64Ko de RAM, j'aurais pu utiliser un 23K640-IP (8Ko) pour un coût moindre, mais j'ai utilisé ce que j'avais en main. Le 23LC512 a 3 modes de fonctionnement, BYTE, PAGE et SEQUENTIAL. Pour cette application il est configuré en mode séquentiel. Ce mode permet de lire ou d'écrire un bloc de mémoire de n'importe quel dimension avec une seule commande, alors qu'en mode BYTE on ne peut lire ou écrire qu'un octet par commande. En mode PAGE, 32 octets peuvent-être lus ou écris et ces pages sont alignées modulo 32. Donc si on envoie la commande READ 0x0003 et qu'on lit 32 octets, les octets lus seront aux adresses 3-31 et 0-2 et non 3-34. Pas de problème de cette sorte avec le mode SEQUENTIAL.

Évidemment on ne peut stocker de code binaire dans cette SRAM sauf si on l'utilise avec des MCU à architecture Von Neumann comme les MSP430 par exemple. Dans ce cas on pourrait charger des routines de la SRAM vers la RAM du MCU pour les exécuter. Quoi que pour une telle application une mémoire EEPROM ou flash SPI serait plus utile. Dans le cas d'un atMega328P on ne peut utiliser cette méthode mais c'est néanmoins utile comme espace de stockage de données temporaire. Dans l'application CHIPcon la SRAM est utiliser de 3 façons.

  1. stockage de la liste des noms de fichiers jeux pour utilisation par la routine display_page() du fichier chipcon.c
  2. tvout utilise la SRAM pour sauvegarder un écran temporairement afin d'afficher les informations de débogage pendant le mode TRACE. Voir les routines screen_save() et screen_restore() dans tvout.c ainsi que la routine print_vms() dans chip8.c.
  3. La mémoire SRAM contient le programme SCHIP à exécuter. Le programme est chargé à l'adresse 512 (0x200).

Pour le détail de l'implémentation voir les fichiers sram.h et sram.c.


liens

CHIPcon partie 1
chipcon partie 2, machine virtuelle
dépot githup du projet.
page www.chip.com rassemblant beauceaup d'information sur CHIP-8/SCHIP/MegaCHIP
article de wikipedia sur CHIP-8