Dernière mise à jour le 05/01/2021

Présentation


Besoin de plus de mémoire supplémentaire que l’EEPROM? La carte MMC / SD dispose d’un emplacement pour carte MMC / SD pour les cartes MMC ou SD. Nous allons nous intéresser, sur comment faire pour écrire sur une carte SD via le MMC/SD Board de MikroElectronika que vous voyez ci-dessus. Cette carte permet de connecter une carte SD type MMC (ou SD) (voir ci-dessous).

Vous pouvez bien sûr mettre une mini SD à condition d’avoir l’adaptateur qui lui est souvent livré lors de l’achat de la mini SD (encore ci-dessous).

Nous allons voir comment réaliser un tel montage electronique via la platine EasyPic V7 en utilisant un PIC 18F4550, puis nous ferrons quelques branchement via des fils de liaison afin d’interconnecté la carte MMC/SD sur les broches du PIC.

Raccordement du MMC/SD sur la platine EasyPIC V7



(Clique pour agrandir)

La carte dispose d’une nappe qui comporte un connecteur (CN11 tout à gauche en haut) 10 broches puis un switch (SW1 tout à gauche en bas) avec 8 postions possibles. Ces postions qui vont nous concerner sont les positions 1/4/6 – (P1/P5/P3)  et ces petits interrupteurs doivent se retrouver en position haut dirigées vers le “ON” pour l’utilisation de PICs . Les autres interrupteurs ne nous concerne pas car la carte MMC/SD peut être utilisée pour d’autres microcontrôleurs type AWR8081 ou bien des dsPIC.

Une fois nos 3 petits switchs (1/4/6) en position “ON” regardons de plus prêt le connecteur CN11 qui je le dis au passage sera raccordé sur le PORTD de la platine EasyPic V7.

ATTENTION – CN11 !!

Il faut faire attention lors du branchement afin de ne pas inverser le toron et de vous retrouver avec le +VCC relié à la masse ! pour éviter cet incident, le branchement doit se faire à ce que votre platine EasyPicV7 soit en face de vous, et que la carte MMC/SD soit mis dans une position à ce que le cavalier (+5V/3,3V) soit positionné vers le  bas comme le montre la photo ci-dessous:


(Clique pour agrandir)

Branchement des fils de liaisons – MMC/SD vers PIC18F4550


Les fils de couleurs ci-dessus, ne correspondent pas à la photos ci-dessous, j’aurais dû faire une effort pour que le fils entre RD3 et RB1 soit (noir), que le fil entre RD5 et RC7 soit (rouge), entre RD4 et RB0 soit (bleu) et pour finir RD0 et RC0 soit (vert). Nous allons maintenant aborder la partie connexion entre le PIC 18F4550 et notre carte MMC/SD. Nous avons uniquement branché le connecteur CN11 sur le PORTD de notre platine (pour ceux qui auraient sauté une étape je le rappel au passage ;-)), mais il reste maintenant à relier vers les broches du PIC.  Pour cela il faut vous munir de 4 fils femelles avec ce type de connexion ci-dessous:

  • Relier broches RD0 à RC0
  • Relier broches RD4 à RB0
  • Relier broches RD3 à RB1
  • Relier broches RD5 à RC7

Pour connecter le connecteur CN11 sur la platine, j’ai été dans l’obligation de réaliser (en fils volant) l’alimentation des différents PORTS de ma platine afin d’effectuer les connexions sur les différents broches du PIC 18F4550.


  (Clique pour agrandir)       (Clique pour agrandir)

FAT 12/16 ou FAT32 ? qu’est-ce que c’est?


En anglais FAT (File Allocation Table – table d’allocation de fichiers).La table d’allocation de fichiers est en fait un index qui liste le contenu du disque, afin d’enregistrer l’emplacement des fichiers sur celui-ci. Etant donné que les blocs qui constituent un fichier ne sont pas toujours stockés de manière contiguë sur le disque (c’est ce que l’on appelle la fragmentation), la table d’allocation permet de conserver la structure du fichier en créant des liens vers les blocs constitutifs du fichier. Le système FAT est un système 16 bits permettant de décrire un fichier par un nom d’une longueur de 8 caractères et une extension qui en comporte 3. On appelle ainsi ce système FAT16.
Pour améliorer ce point, la version originale de Windows 95 (employant le système FAT16) a été dotée d’une prise en charge améliorée de la FAT, il s’agit du système VFAT (Virtual FAT). La VFAT est un système 32 bits permettant d’enregistrer un fichier avec un nom de 255 caractères de long. Les programmeurs ont toutefois dû veiller à la compatibilité ascendante, de telle façon a pouvoir accéder à ces fichiers à partir d’environnements 16 bits (DOS). La solution a donc été d’affecter un nom pour chaque système. C’est la raison pour laquelle il est possible d’utiliser des noms longs sous Windows 95, tout en pouvant y accéder sous DOS.


Le système de fichiers FAT est un système 16 bits, cela signifie qu’il ne peut pas adresser les clusters sur plus de 16 bits. Le nombre maximum de clusters repérables avec le système FAT est ainsi de 216, soit 65536 clusters. Or, étant donné qu’un cluster est constitué d’un nombre fixé (4,8,16,32, …) de secteurs de 512 octets contigüs, la taille maximale d’une partition FAT se trouve en multipliant le nombre de clusters par la taille d’un cluster. Avec des clusters d’une taille 32Ko, la taille maximale d’une partition FAT est donc de 2Go.


D’autre part, un fichier ne peut occuper qu’un nombre entier de clusters, c’est-à-dire que si un fichier occupe plusieurs clusters, le dernier sera occupé en partie, et la place inoccupée restante est autant de place perdue. Par conséquent plus la taille d’un cluster est réduite, moins il y a de gaspillage de place. On estime qu’un fichier gaspille en moyenne la moitié d’un cluster, cela signifie que sur une partition de 2Go 16Ko seront perdus par fichier… Le formatage des cartes mémoire est recommandé par presque tous les experts en technologie du monde entier.


Les cartes SD sont principalement utilisées dans les appareils photo numériques et les téléphones cellulaires. Les fabricants d’appareils photo numériques recommandent le formatage à l’intérieur de l’appareil photo lui-même. C’est un moyen d’initialiser la carte SD.


Faisons simple !

Si la carte est de 2 Go ou inférieure à 2 Go, vous pouvez la formater en FAT 12/16 ou FAT(tout court) mais si la carte est supérieure à 2 Go, vous devez la formater (bien sûr il faut que votre ordinateur soit équipé d’un lecteur de carte SD !) en FAT 32. Il suffit de faire un clique droit sur votre carte SD et de selectionner “Formater” (windows 10 vous rendre dans “CE PC” et normalement vous derviez voir voir carte SD connectée, il suffit de faire un clique droit sur cette dernière et de selectionner “formater” )

Schéma



(Clique pour agrandir)

Le montage est composé de son quartz de 8Mhz, de la carte MMC/SD, et via l’aide d’un boutton poussoir qui celui-ci nous permettra d’écrire sur la carte SD. Le but de cemontage très simple et de voir comment il est possible d’écrire sur une carte SD.

Programmation materiel – MikroC


Dans la barre des taches de MikroC faire “Project” ensuite “Edit Project” et régler l’horloge interne comme ceci avant d’exécuter le code qui va suivre pour le bon fonctionnement de l’ecrture de la carte SD. Ne pas oublier de désactiver la broche MCLR ;-).

// Ecriture carte MMC/SD – MikroC – Electronique71.com

#define TRUE 1
#define FALSE 0

// Module de connection de la carte MMC/SD
sbit Mmc_Chip_Select at LATC0_bit;
sbit Mmc_Chip_Select_Direction at TRISC0_bit;

sbit Led_Ecriture at LATA2_bit;
sbit Led_FinBoucle at LATA3_bit;

// Tableau qui comprend les lignes que nous voulons écrires
// -> \r : Retour chariot (curseur debut de ligne)
// -> \n : Saut de ligne
unsigned char* Array[] = {“Des lignes\r\n”, “ecrites\r\n”, “en dessous\r\n”};

unsigned char Ecriture;
unsigned char Tab_Element = 0;
unsigned char bFinBoucle;

void init()
{

  // On configure de toutes les broches en digital (numérique 0 ou 1)
  PCFG0_bit = 1;
  PCFG1_bit = 1;
  PCFG2_bit = 1;
  PCFG3_bit = 1;

  CMCON = 0x07; // On désactive les comparateurs

  ADON_bit = 0; // On désactive le module de convertion analogique/numérique
  
  TRISA = 0xC2; // RA2 config comme entrée pour ecrire sur la carte + RA6/RA7
  PORTA = 0x00;
  LATA = 0x00;

  TRISB = 0x00; // config le PORTB comme sortie
  PORTB = 0x00;
  LATB = 0x00;

  TRISC = 0x00; // config le PORTC comme sortie
  PORTC = 0x00;
  LATC = 0x00;

  // Initialisation du module SPI1;
  SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV64,
                     _SPI_DATA_SAMPLE_MIDDLE,
                     _SPI_CLK_IDLE_LOW,
                     _SPI_LOW_2_HIGH);

  Ecriture = FALSE; // Ecrtiure non réalisée

  Delay_ms(100); // On attent un peu la fin de l'initialisation
}

void Fin_Ecriture()
{
  char iCount;

  for (iCount = 0 ; iCount < 4 ; ++iCount)
  {
    Led_Ecriture =~ Led_Ecriture;
    Delay_ms(200);
  }
}

void Ecriture_SD()
{
  unsigned char iCount;
  unsigned char iNbrChar = 0;

  // On verifie si nous avons réalisé toute la lecture du tableau
  if (bFinBoucle == TRUE)
  {
    Tab_Element = 0;
    bFinBoucle = FALSE;
    Led_FinBoucle = 0;
  }

  // On allume la led du PORTA.RA3 si lecture complete
  if (Tab_Element == 3)
  {
    Led_FinBoucle = 1;
    bFinBoucle = TRUE;
  }

  // Vérification carte MCC/SD + ecriture
  else if ((!Mmc_Fat_Init()) && (bFinBoucle == FALSE))
  {
    Mmc_Fat_Assign("Card_SD.TXT",0xA0); // Card_SD.TXT -> doit être de 11 caractères MAXI

    Mmc_Fat_Append(); // Permet d'ajouter des nouvelles ligne dans le (.txt)

    for(iCount = 1 ; iCount <= strlen(Array[Tab_Element]) ; ++iCount)
    {
      ++iNbrChar;
    }

    Mmc_Fat_Write(Array[Tab_Element],iNbrChar); // Ecriture sur la carte

    ++Tab_Element;

    Fin_Ecriture();
  }
}

// Programme principal
void main()
{
  init();

  while (1)
  {
     if ((PORTA.RA1 == 1) && (Ecriture == FALSE))
     {
       Ecriture_SD(); // Ecriture
       Ecriture = TRUE;
     }
     else if ((PORTA.RA1  == 0) && (Ecriture == TRUE))
     {
       Ecriture = FALSE;
     }
   }
}


Fonctionnement

Le principe de fonctionnement est le suivant. Chaque fois que vous pressez le bouton RA1 du PORTA, l’écriture est réalisé et à la fin de l’écriture la led RA2 se met à clignoter 2 fois. Vous avez donc écrit sur le premier appuis “Des lignes” dans la carte SD. Lorsque vous pressez de nouveau RA1 la led clignote 2 fois et vous avez écrit dans la carte SD “ecrites”. Lorsque vous appuyer une 3ème fois de nouveau vous écrivez “en dessous” et la led RA2 se met à clignoter 2 fois. Un 4 ème appuis allumera la led RA3 qui vous informe que vous avez terminé la lecture du tableau “Array”, afin de recommencer le cycle il suffit de presser une 5ème fois le bouton RA1 pour recommencer le cycle. Lorsque vous pressez 4 fois le bouton RA1 la led RA3 s’allumera.

Historiques


05/01/2021
– Modification ligne de programmation PORTA et PORTB surpprimer dans initialisation du PIC (bug) + modification chariot.

02/01/2021
-1er mise à disposition