Présentation
Cette page à pour but d'expliquer le projet de pilotage d'une carte Compact Flash en mode "ATA" avec un PIC18 et gestion de la FAT.
Documentations
Pour commencer, j'ai effectué une recherche de documentations, de cas similaires pour avoir des retours d'expériences...etc...
- CF Specification Rev. 3.0 La toute dernière mise à jour de la spécification Compact FLash officielle.
- Interfacing CF to 80C51 Microcontroller Mise en oeuvre d'un interfaçage entre un 80C51 et une Compact Flash
- Optimization of CompactFlash Host Operation Optimiser les opérations du contrôleur
Hardware
Le mieux étant encore d'expérimenter par soi même, il serait très intéressant d'avoir une carte de dèv pour tester une Compact Flash "cobaye". Les Compact Flash ont 3 modes de fonctionnement : I/O Mode, IDE Mode (ou ATA) et Memory Mode, ce dernier mode sera utilisé. En mode "ATA", nous allons avoir besoin sur la Compact Flash de (les noms précédés de - indique un signal actif à l'état bas):
- 3 lignes d'adresses
- A0 à A2
- 8 lignes de données *D0 à D7
- 6 lignes de contrôle
- -CE1 (Card Enable) Permet d'activer la carte
- -CD1 (Card Detect) Broche connecté dans la Compact Flash à la masse, ce qui nous permet de détecter la présence d'une carte avec l'aide d'une résistance de tirage à VCC
- RESET Le contrôleur peut forcer un Reset de la carte par le biais de cette borche
- -OE (Output Enable)
- -WE Validation des données
- READY Broche mise à l'état haut lorsque la Compact Flash est prête pour un échange de données
Mapping des broches :
Broche CF | A0 | A1 | A2 |
---|---|---|---|
Port Pic | RE0 | RE1 | RE2 |
Broche CF | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|
Port Pic | RD0 | RD1 | RD2 | RD3 | RD4 | RD5 | RD6 | RD7 |
Broche CF | -CE1 | -CD1 | RESET | -OE | -WE | READY |
---|---|---|---|---|---|---|
Port Pic | RA0 | RA1 | RA2 | RA3 | RA4 | RA5 |
J'ai donc réaliser une carte de développement comprenant un PIC18 qui jouera le rôle de cerveau sur la plaque, un connecteur Compact Flash (librairie Eagle dispo ici) bien sûr, un connecteur ICD2 permettant de programmer et de débugguer "IN SITU" (sans avoir à enlever le PIC à chaque fois), et enfin un connecteur DB9 pour la liaison série.
Schéma de principe :
Emplacement des composants :
Les fichiers originaux (Au format Eagle Layout Editor)
Software
Le programme pour accéder à la Compact Flash est écrit en C avec le compilateur C18 de Microchip. Voici la liste des prototypes des fonctions :
- void cf_delay(void); Permet d'introduire un délai dans les opérations nécessitant une tempo précise
- void cf_init_host(void); Avant d'accéder à toute autre fonction CF, il est indispensable d'appeler celle ci, elle s'occupe de configurer les ports correctement
- unsigned char cf_detect(void); Renvoie 0 si aucune carte n'est insérée
- void cf_write_reg(unsigned char reg, char data); Ecrit une commande data dans le registre reg
- unsigned char cf_read_reg(unsigned char reg); Lit le registre reg
- void cf_write(char); Ecrit un octet
- unsigned char cf_read8(); Lit un octet
- unsigned int cf_read16(); Lit un mot (2 octets)
- unsigned char cf_valid(void); Renvoie CF_OK si la signature correspond bien à une Compact Flash
- unsigned char cf_identify(IdentifyDevice *); Rempli la structure passée en paramètre et permet d'obtenir des infos sur la carte
- void cf_reset(void); Effectue un Reset de la carte
- void cf_enable(void); Sélectionne la carte
- unsigned char cf_cmd_diagnostic(void); Exécute une commande de diagnostique et retourne le code erreur correspondant à l'état de la carte
- unsigned char cf_check_ready(void); Teste si la carte est prête (hard)
- void cf_skip8(unsigned char); Saute un octet
- void cf_set_position(unsigned long, unsigned char); Spécifie une adresse
- unsigned char cf_is_busy(void); Renvoie si la carte est occupé
- unsigned char cf_is_ready(void); Renvoie si la carte est prête (logiciel)
Un exemple est fourni dans le projet vous permettant de lire une Compact Flash et d'afficher des infos tel que le numéro de série...etc... Le programme attend l'insertion d'une Compact Flash dans le lecteur, une fois la carte insérée, il envoie sur l'UART les infos sur la carte.
Téléchargements
Ce programme est fourni sous les termes de la licence GNU General Public License
- Les sources complètent, le .HEX et le projet associé datées du 26 mai 2005 piccompactflash.zip