Projet à microcontrôleurs PIC 16F628A / 16F88
Programmateur d'EEPROM 93xx
Il s'agit d'un programmateur d'EEPROM série de type "Microwire" ou "3 fils".
(EEPROM = Electrically-Erasable Programmable Read-Only Memory)
Ce programmateur prend en charge les références les plus courantes : 9346, 9356, 9366, 9376 et 9386.
L'EEPROM à programmer se place sur un support 8 broches (PDIP), sur la carte de programmation.
Cette carte est pilotée par un microcontrôleur PIC 16F628A ou 16F88.
La carte de programmation est reliée à un ordinateur par une interface RS232C.
Une application (pour Windows) permet de dialoguer avec la carte :
Il est possible de dialoguer entre le microcontrôleur et l'EEPROM avec seulement 3 fils.
Cela est rendu possible en configurant, en temps voulu, la broche RA2 du PIC 16F628A :
- en sortie (communication avec l'entrée DI de l'EEPROM)
- en entrée (communication avec la sortie DO de l'EEPROM)
Le brochage de l'UART du 16F88 et du 16F628A est différent :
UART
|
Réception
|
Transmission
|
16F628A
|
RB1/RX (broche 7)
|
RB2/TX (broche 8)
|
16F88
|
RB2/RX (broche 8)
|
RB5/TX (broche 11)
|
Il y a donc 2 connexions à modifier par rapport au schéma électrique avec le PIC 16F628A.
Voici un rappel succinct.
Consulter les data sheets des différents fabriquants (Atmel, Microchip ...) pour plus d'informations.
Nom | Type |
CS
(Chip Select) | entrée |
CLK
(Serial data clock) | entrée |
DI
(Serial Data Input) | entrée |
DO
(Serial Data Output) | sortie
3 états (avec un état haute-impédance High-Z) |
Vss
(Ground) | alimentation |
Vcc
(Power supply) | alimentation |
ORG*
(Memory Configuration) | entrée |
PE*
(Program Enable) | entrée |
* fonction non disponible sur certaines EEPROM
Référence | Organisation
interne |
9346 | 128
x 8 bits ou 64 x 16 bits |
9356 | 256
x 8 bits ou 128 x 16 bits |
9366 | 512
x 8 bits ou 256 x 16 bits |
9376 | 1024
x 8 bits ou 512 x 16 bits |
9386 | 2048
x 8 bits ou 1024 x 16 bits |
Prenons l'exemple de l'EEPROM 93xx86x de Microchip :
93xx86A : 2048 x 8 bits
93xx86B : 1024 x 16 bits
93xx86C : 2048 x 8 bits ou 1024 x 16 bits
Le choix se fait par le niveau de la broche d'entrée ORG :
PE = 1 : Ecriture et effacement autorisés
PE = 0 : Ecriture et effacement interdits
Instruction | Description |
EWEN
(Erase/Write enable) | Autorise les instructions d'écriture (WRITE, WRAL) et d'effacement (ERAL, ERASE) |
EWDS
(Erase/Write disable) | Interdit les instructions d'écriture (WRITE, WRAL) et d'effacement (ERAL, ERASE). C'est une sécurité contre les écritures ou les effacements intempestifs ... |
WRITE | Ecrit la donnée spécifiée à l'adresse spécifiée |
WRAL
(Write all) | Ecrit la donnée spécifiée à toutes les adresses de la mémoire |
ERASE | Ecrit la donnée 0xFF (ou 0xFFFF en configuration 16 bits) à l'adresse spécifiée (l'effacement est une forme d'écriture) |
ERAL
(Erase all) | Ecrit la donnée 0xFF (ou 0xFFFF en configuration 16 bits) à toutes les adresses de la mémoire |
READ |
Lecture de la donnée de l'adresse spécifiée. Remarque : certaines EEPROM permette la lecture séquentielle (lecture de toute la mémoire en une seule instruction) |
L'EEPROM utilise un protocole de communication de type série, synchronisé par une horloge (broche CLK).
Fréquence maximale de l'horloge : de l'ordre 2 MHz (pour Vcc = 5 V).
Durée des instructions :
EWEN, EWDS, READ : une dizaine de microsecondes à 2 MHz (durée proportionnelle à la période de l'horloge)
WRITE, WRAL, ERAL, ERASE : quelques millisecondes (indépendant de la fréquence d'horloge)
Prenons l'exemple de l'EEPROM 93LC86C de Microchip (en configuration 8 bits, ORG = 0).
On veut écrire la donnée 0x5E à l'adresse 0x1CF :
Initialement, l'EEPROM est en mode Stand-by (CS = 0, DI = 0 , CLK = 0).
Le microcontrôleur PIC met CS à 1, DI à 1 (Start bit), puis CLK à 1.
Le bit DI est pris en compte par l'EEPROM sur le front montant de CLK.
Le PIC transmet ensuite l'opcode de l'instruction WRITE : bit 0, puis bit 1
Le PIC transmet ensuite les 11 bits de l'adresse : 0x1CF = 001 1100 1111
Le PIC transmet enfin les 8 bits de données : 0x5E = 0101 1110
Cela fait 22 bits (et donc 22 cycles d'horloge, 11 µs à 2 MHz) : 101001 11001111 01011110
Le PIC met CS à 0 puis rapidement CS à 1.
La sortie DO qui était jusqu'ici dans l'état haute impédance, passe au niveau logique 0, ce qui signifie que le processus d'écriture est en cours (le signal d'horloge est alors inutile).
La sortie DO passe à 1 en fin d'écriture (3,3 ms plus tard).
Le PIC place alors CS à 0 : l'EEPROM est en stand-by, en attente d'une nouvelle instruction.
Noter que la phase la plus longue est la phase d'écriture : 3,3 ms !
3-6-2- Instruction READ
C'est l'instruction la plus utilisée.
On veut lire la donnée de l'adresse 0x759 :
22 cycles d'horloge sont nécessaires :
14 cycles d'horloge pour transmettre 14 bits sur la broche DI :
8 cycles d'horloge pour lire les 8 bits de données disponibles sur la broche DO : 1001 0101 (0x95)
N.B. Les bits de données sont précédés d'un bit 0 ("dummy bit").
Le PIC place CS à 0 : l'EEPROM est en stand-by, en attente d'une nouvelle instruction.
N.B. Avec une fréquence d'horloge de 2 MHz, l'instruction READ dure 11 µs (à comparer avec les 3,3 ms de l'instruction WRITE).
3-6-3- Instruction EWEN
14 cycles d'horloge sont nécessaires pour transmettre 14 bits sur la broche DI :
3-6-4- Instruction EWDS
14 cycles d'horloge sont nécessaires pour transmettre 14 bits sur la broche DI :
3-6-5- Instruction ERAL
14 cycles d'horloge sont nécessaires pour transmettre 14 bits sur la broche DI :
La phase d'effacement est ensuite lancée (durée : quelques millisecondes).
3-6-6- Instruction ERASE
14 cycles d'horloge sont nécessaires pour transmettre 14 bits sur la broche DI :
La phase d'effacement est ensuite lancée (durée : quelques millisecondes).
3-6-7- Instruction WRAL
22 cycles d'horloge sont nécessaires pour transmettre 22 bits sur la broche DI :
La phase d'écriture est ensuite lancée (durée : quelques millisecondes).
Il faut bien sûr un ordinateur qui possède un port COM, reconnaissable par son connecteur SubD 9 broches mâle.
Il faut brancher un câble "null-modem" (câble croisé) entre l'ordinateur et la carte.
Si vous n'en avez pas, vous pouvez facilement en faire un (il faut 3 fils et 2 connecteurs SubD 9 broches femelle).
4-2-1- Instruction WRITE
On veut écrire la donnée 0x5E à l'adresse 0x1CF.
L'ordinateur envoie 3 octets, reçus sur la broche RX du PIC :
On reconnaît les 22 bits destinés à la broche DI de l'EEPROM (Cf. 3-6-1) précédés de 2 bits 0.
Le PIC se charge de générer les signaux de commande (CS, CLK et DI) de l'EEPROM (Cf. 3-6-1).
Quand l'écriture est finie (3,3 ms), le microcontrôleur envoie un octet 0x04 (broche TX), ce qui permet à l'ordinateur de savoir si l'opération est finie et si elle s'est bien déroulée (en vérifiant que l'octet reçu est bien 0x04, valeur que j'ai choisie pour coder l'instruction WRITE).
4-2-2- Instruction READ
On veut lire la donnée de l'adresse 0x759 :
L'ordinateur envoie 3 octets, reçus sur la broche RX du PIC :
On reconnaît les 14 bits destinés à la broche DI de l'EEPROM (Cf. 3-6-2) précédés de bits 0.
Quand la lecture est finie, le microcontrôleur envoie un octet (broche TX) qui contient la donnée lue (0x95).
4-2-3- Instruction EWEN
4-2-4- Instruction EWDS
4-2-5- Instruction ERAL
4-2-6- Instruction ERASE
4-2-7- Instruction WRAL
Cette application fonctionne indifféremment avec les versions 3 fils ou 4 fils, PIC 16F628A ou 16F88.
Avant-propos
Cette application a été écrite en C++ Borland Builder 5.
L'application fonctionne sous Windows NT4 et Windows XP (non testée sous Windows Vista, merci de me dire ce qu'il en est ...).
N.B. La gestion de la liaison RS232 nécessite l'installation du composant TComPort (la version 2.64 est suffisante) :
Procédure d'utilisation :
-> Ouvrir l'application
-> Sélectionner le type d'EEPROM (ici 9386)
Attention : mon programmateur ne gère que la configuration 8 bits.
-> Configurer les paramètres de la liaison RS232C :
- 9600 bauds/s
- 8 bits de données
- Pas de bit de parité
- 1 bit de STOP
- Pas de contrôle de flux
-> Ouvrir le port
-> Bouton READ : lecture de toute la mémoire (cela prend environ 20 secondes avec une EEPROM 9386)
-> Bouton EWEN (pour autoriser l'écriture)
-> Bouton WRITE : écriture à partir des données d'un fichier
Sélectionner le fichier : ce fichier doit faire 2048 octets avec une EEPROM 9386. Vous pouvez faire un test avec le fichier 9386.dat
La phase d'écriture dure environ 20 secondes (avec une EEPROM 9386).
La phase de relecture de la mémoire permet de détecter une éventuelle erreur d'écriture.
N.B. Pour créer vos fichiers de données, il vous faut un "éditeur de fichier hexadécimal". Pour ma part, j'utilise WinHex :
-> Fermer le port
-> Quitter
- 1 câble null-modem (femelle/femelle)
- 1 ordinateur avec port COM
Dimension : 100 x 52 mm
Le code source a été écrit en langage assembleur avec l'environnement de développement gratuit MPLAB IDE de Microchip.
PIC 16F628A (version 4 fils) :
PIC 16F628A (version 3 fils) :
PIC 16F88 (version 3 fils) :
(C) Fabrice Sincère ; Révision 0.9.10