Mise en œuvre d`une carte SD avec un microcontrôleur
Transcription
Mise en œuvre d`une carte SD avec un microcontrôleur
Mise en œuvre d’une carte SD avec un microcontrôleur PIC24FJ32GB004 Ce fichier décrit comment connecter une carte SD à un microcontrôleur PIC24FJ32GB004. Un exemple de code est fourni en fin de fichier. 1. Schéma de câblage du support de la carte SD avec le PIC Les cartes SD ont un bus SPI comme interface d’accès. Coté carte SD : (esclave SPI) CS : entrée chip select MOSI : entrée data bus SPI (SDI) SCK : entrée d’horloge bus SPI MISO : sortie data bus SPI (SDO) CD : sortie présence carte WP : sortie protection en écriture Coté microcontrôleur: (maitre SPI) RC6 (*): sortie data bus SPI (SDO) RC7(*) : entrée data bus SPI (SDI) RC8(*) : sortie d’horloge bus SPI (SCK) RC9(*): sortie chip select (SSOUT) RB14 : entrée présence carte RB15 : entrée protection en écriture (*) : Broche de périphériques remappable 1 2. Exemple de code de configuration des broches remappables : (avec le compilateur C30 de Microchip) Le PIC24FJ32GB004 utilisé ici a des ports remappables. Ci-dessous un exemple de code. #include <PPS.h> void init_pps(void) { PPSUnLock; … //------- SPI pour SDCARD ---------------------------iPPSInput(IN_FN_PPS_SDI1,IN_PIN_PPS_RP23); //RC7 iPPSOutput(OUT_PIN_PPS_RP22,OUT_FN_PPS_SDO1); //RC6 iPPSOutput(OUT_PIN_PPS_RP24,OUT_FN_PPS_SCK1OUT); //RC8 iPPSOutput(OUT_PIN_PPS_RP25,OUT_FN_PPS_SS1OUT); //RC9 --> --> --> --> SDI1 SDO1 SCK SSOUT PPSLock; } 2 3. Exemple de code de mise en œuvre de la carte SD Crée un fichier « file.txt », écrit «Bonjour!» puis ferme le fichier … Vous devez utiliser les librairies C Microchip pour la mise en des cartes SD. Elles sont disponibles en téléchargement sur leur site. Après téléchargement, ces ressources se doivent se trouver dans : <répertoire cible>\MicrochipSolutions\MDD File System-SD Card Les fichiers «FSConfig.h » et « HardwareProfile.h » doivent être modifiés en fonction des besoins et du hardware. A noter que dans cet exemple, la carte SD est supposée déjà formatée (en FAT32). #include <PPS.h> //header des fonctions de remappage des ports /*---------------------------------Librairies Microchip pour la SD CARD ----------------------------------*/ #include "FSIO.h" #include "FSIO.c" #include "SD-SPI.c" … … FSFILE * fp; //pointeur sur la structure d’identification du fichier char fileName[] = "file.txt"; char text[20] = “Bonjour!”; Init_pps() ; … if (MDD_MediaDetect()) //Si carte détectée ? { if (FSInit())//SD card init { //ouverture en écriture ou création si fichier inexistant fp = FSfopen(fileName,"w"); if (fp != NULL) //Pas de PB à l’ouverture ? { if (FSfwrite (text, 1,8, fp) == 8) //tout a été écrit ? FSfclose(fp) ; } else … //gestion erreur } else … //gestion erreur } else …//gestion erreur … … 3 Modifications dans le fichier « HardwareProfile.h » … … #elif defined __PIC24F__ // Description: SD-SPI Chip Select Output bit // #define SD_CS LATBbits.LATB1 #define SD_CS LATCbits.LATC9 // Description: SD-SPI Chip Select TRIS bit // #define SD_CS_TRIS TRISBbits.TRISB1 #define SD_CS_TRIS TRISCbits.TRISC9 // Description: SD-SPI Card Detect Input bit // #define SD_CD PORTFbits.RF0 #define SD_CD PORTBbits.RB14 // Description: SD-SPI Card Detect TRIS bit #define SD_CD_TRIS TRISBbits.TRISB14 // Description: SD-SPI Write Protect Check Input bit // #define SD_WE PORTFbits.RF1 #define SD_WE PORTBbits.RB15 // Description: SD-SPI Write Protect Check TRIS bit // #define SD_WE_TRIS TRISFbits.TRISF1 #define SD_WE_TRIS TRISBbits.TRISB15 … // Tris pins for SCK/SDI/SDO lines // Description: The TRIS bit for the SCK pin // #define SPICLOCK TRISFbits.TRISF6 #define SPICLOCK TRISCbits.TRISC8 // Description: The TRIS bit for the SDI pin // #define SPIIN TRISFbits.TRISF7 #define SPIIN TRISCbits.TRISC7 // Description: The TRIS bit for the SDO pin // #define SPIOUT TRISFbits.TRISF8 #define SPIOUT TRISCbits.TRISC6 … … Modifications dans le fichier « FSconfig.h » La configuration par défaut est conservée. #define SUPPORT_FAT32 //doit rester décommenté si la carte SD est en FAT32 4