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 :

 

 

 

 

 

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 :

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

 

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