mardi 28 octobre 2014

CHIPcon partie 6, interface carte SD

Dans cette partie je documente l'interface avec la carte SD. Pour l'accès à la carte SD j'ai utilisé la librairie créé par Roland Riegel.

Il y a plusieurs librairie SD/SDHC/MMC disponible pour les atMega, j'ai choisie celle de Roland Riegel pour sa facilité d'utilisation. Pour l'intégrer à mon projet j'ai eu très peut de travail à faire. S'il avait fallu que je cré ma propre librairie le temps travail aurait plus que doublé. Chaque module de la librairie a un fichier *_config.h qu'il suffit d'adapter à ses besoins.

Pour commencer dans le fichier hardware.h de mon projet j'ai ajouter la définition suivante:


#define __CHIP_COMP__ 1
J'ai ensuite utiliser cette définition pour contrôler une compilation conditionnelle de certaines variables dans les fichiers sd_raw_config.h et fat_config.h. Je ne détaillerai pas l'interface de cette librairie. Je ne l'ai d'ailleurs pas étudier en détail. J'ai plutôt créé une interface entre cette librairie et CHIPcon en m'inspirant d'un exemple d'application fourni par Roland Riegel. Mon interface comprend les fichiers suivants: filesys.h et filesys.c
  • uint8_t fs_mount()
    Vérifie s'il y a une carte dans le support et si c'est le cas monte le système de fichier. Retourne 1 en cas de succès et 0 autrement. Un seul système de fichier peut-être ouvert à la fois.
  • void fs_umount()
    Ferme le système de fichier.
  • uint8_t fs_open_dir(char *dir_name)
    Ouvre un répertoire. Un seul répertoire peut-être ouvert à la fois. Retourne 1 en cas de succès et 0 autrement.
  • void fs_close_dir()
    Ferme un répertoire.
  • uint8_t fs_open_file(char *file_name)
    Ouvre un fichier. Un seul fichier peut-être ouvert à la fois. Retourne 1 en cas de succès et 0 en cas d'échec.
  • void fs_close_file()
    Ferme le fichier ouvert.
  • uint8_t fs_load_file(uint16_t file_no)
    Charge le contenu du fichier dans la mémoire SRAM. Retourne le nombre d'octets chargés.
  • uint8_t fs_read_dir(struct fat_dir_entry_struct *dir_entry)
    Retourne l'entrée suivante du répertoire. Retourne 0 à la fin de la liste.

CHIPcon n'affiche que la liste des fichiers qui se trouve dans le répertoire racine. Notez qu'il affiche le nom de tous les fichiers. Donc si l'utilisateur sélectionne un fichier qui n'est pas un binaire SCHIP la machine virtuelle schip() va plantée à l'exéctuion d'un tel fichier laissant une message CRASH! BAD OPCODE à l'écran.

La librairie de Roland Riegel est configurée pour utilisation en lecture seule afin de sauver de l'espace code. Tel quel elle consomme environ 5Ko de flash.


liens

CHIPcon partie 1, présentation du projet.
chipcon partie 2, machine virtuelle
CHIPcon partie 3, module SRAM
CHIPcon partie 4, tvout
CHIPcon partie 5, clavier et émulateur PC.
dépot githup du projet. mise à jour le 2014-10-24, utilitaire chip-dasm (schip dé-assembleur).
page www.chip.com rassemblant beauceaup d'information sur CHIP-8/SCHIP/MegaCHIP
article de wikipedia sur CHIP-8
Page de Roland Riegel concernant sa librairie MMC/SD/SDHC.