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