Dernière mise à jour le 02/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


Attention ! Les fils de couleurs sur la capture 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). Un nouveau fil de liaison apparait celui de Tx qui sera connecté entre RE1 et RC6 soit (jaune)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
  • Relier broches RE1 à RC6 : broche Tx

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. Vous remarquerez le fils jaune qui permet de renvoyer la broche RE1 vers RC6 pour la communication série via le port USB de la platine EasyPicV7.


  (Clique pour agrandir)          (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 sélectionner “Formater” (windows 10 vous rendre dans “CE PC” et normalement vous devriez voir voir carte SD connectée, il suffit de faire un clique droit sur cette dernière et de sélectionner “formater” )

Schéma



(Clique pour agrandir)

Bon !! oui cette fois-ci j’ai fais un effort sur la représentation des fils de connexion, on ne voit pas très bien le fil jaune mais c’est l’interconnexion entre RE1 et RC6. C’est la broche Tx qui va nous servir d’envoyer les données lu sur la carte SD afin de l’afficher sur ce petit logiciel que vous pouvez télécharger en cliquant sur ce lien: PortSerie (ou SerialPort) Niveau montage celui-ci 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 ce montage très simple et de voir comment il est possible d’écrire sur une carte SD.

Soft_UART Logiciel (Software) ou UART Matériel (Hardware) ?


Bonne question? mais qu’est ce que cela veux bien dire ? Dans ce montage, nous voulons lire les données qui sont présente sur la carte et par la même occasion les afficher en utilisant le port série (Logiciel développé par mes propre soin que vous pouvez télécharger via le lien évoqué un peu plus haut ou ici).


Si vous regarder attentivement le schéma, nous voyons très bien que la broche RC7 est déjà utilisée sur SD-DI, et donc il en résulte que la broches RC7 qui elle aussi permet d’envoyer des informations via la liaison série Tx est condamnée, et donc impossible de l’utiliser !! Humm … ?? comment faire ?? je change de PIC ?  j’en achète un autre afin d’avoir TX et RX à part comme c’est le cas du PIC18F4520 qui lui dispose de SDA/SDO pour les broches (RC4 et RC5) et de Tx/Rx pour les broches (RC6 et RC7)? Bien sûr que non, et je vais vous faire économiser votre argent ! Pour bien faire c’est ce que nous allons voir de suite la programmation logiciel mais en ce qui conerne une définition simple en voici une:


UART Logiciel (Software) : Lorsque nous parlons d’une configuration Logiciel c’est que votre microcontrôleur ne possède pas les broches nécessaire (en l’occurence Tx déja occupé) alors il faut trouver une parade afin de créer cette broches pour la communication par la méthode logiciel (Software) en programmant quelques lignes de code supplémentaires. (On utilise la routine Soft_UART de MikroC).


UART Matériel (Hardware) : Lorsque nous parlons de UART Matériel, c’est que votre microcontrôleur à déja les broches comme par exemple le PIC18F4520 ou comme vue précédemment sont à part. Ainsi, on utilise la routine UART de MikroC et le tour est joué !


Vous voulez en avoir la preuve? alors essayer de copier ces lignes de codes, mais avant toute chose, allez 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 et d’ailleurs on gardera pour de bon cette configuration ! Ah oui!! n’oublié pas aussi de désactiver la broche MCLR ;-).

// Test Soft_UART – MikroC – Electronique71.com

#define TRUE 1
#define FALSE 0

char bTx;
void init()
{

  char error;

  // 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; // RA1 config comme entrée pour ecrire sur la carte + RA6/RA7
  PORTA = 0x00;
  LATA = 0x00;

  TRISD = 0x00; // Toutes les broches du PORTD sont configurées comme sortie
  PORTD = 0x00;
  LATD = 0x00;

  // Configuration logiciel -> Soft
  // Soft_UART_Init(*PORT, Rx, Tx, Baud, Inversseur);
  error = Soft_UART_Init(&PORTE, 0, 1, 9600, 0);

  LATD = error; // On vérifie si toutes les leds sont éteintes

  bTx = FALSE;

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

// Programme principal
void main()
{
  init();
  while (1)
  {
     if ((PORTA.RA1 == 1) && (bTx == FALSE))
     {
       Soft_UART_Write('T'); // Ecriture
       Soft_UART_Write('E'); // Ecriture
       Soft_UART_Write('S'); // Ecriture
       Soft_UART_Write('T'); // Ecriture

       bTx = TRUE;
     }
     else if ((PORTA.RA1  == 0) && (bTx == TRUE))
     {
       bTx = FALSE;
     }
   }
}

A l’exécution et si vous appuyez sur le bouton RA1 de la platine puis en utilisant le logiciel évoqué plus haut, vous devriez obtenir “TEST” comme ceci:

Programmation materiel et logiciel – MikroC


// 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;

char Lecture;

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; // RA1 config comme entrée pour ecrire sur la carte + RA6/RA7
  PORTA = 0x00;
  LATA = 0x00;
 
  TRISE = 0x00; // Toutes les broches du PORTE sont configurées comme sorties
  PORTE = 0x00;
  LATE = 0x00;
  
  // Configuration logiciel -> Soft
  // Soft_UART_Init(*PORT, Rx, Tx, Baud, Inversseur);
  Soft_UART_Init(&PORTE, 0, 1, 9600, 0);

  Delay_ms(100); // On attend un peu la fin de l'initialisation
  
  // Initialisation du module SPI1;
  SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV64,
                     _SPI_DATA_SAMPLE_MIDDLE,
                     _SPI_CLK_IDLE_LOW,
                     _SPI_LOW_2_HIGH);

  Lecture = FALSE;

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

void Lecture_SD()
{
  unsigned char i;
  unsigned long size;
  unsigned char character;

  // On initialise la carte SD lors de la connection
  if (!Mmc_Fat_Init())
  {
    Mmc_Fat_Assign("Card_SD.TXT",0x01); //Card_SD.TXT -> doit être de 11 caractères MAXI 

    Mmc_Fat_Reset(&size);

    for (i = 1; i <= size; i++)
    {
      Mmc_Fat_Read(&character); // Lecture de la carte SD

      Soft_UART_Write(character); // Ecriture sur le port Tx
    }

    LATA2_bit = 1;
  }
}

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

  while (1)
  {
     if ((PORTA.RA1 == 1) && (Lecture == FALSE))
     {
       Lecture_SD(); // Lecture carte SD
       Lecture = TRUE;
     }
     else if ((PORTA.RA1  == 0) && (Lecture == TRUE))
     {
       Lecture = FALSE;
     }
   }
}


Fonctionnement

Si vous avez respecté à la lettre tous ce qui a été indiqué, juste en appuyant sur le PORTA RA1 vous devrier obtenir ceci:

J’ai dans un 1er temps écrit sur la carte SD via ce montage accessible à ce lien: PIC18F4550 – mode ecriture card MMC/SD puis en appuyant sur la bouton RA1 j’obtient en boucle à chaque appuis “Des lignes en dessous Des lignes en dessous Des …….”

Historiques


02/01/2021
-1er mise à disposition