Lecture d'une EEPROM avec MicroPython

Bonjour Amis Maker,

Il y a peu, l'article "Registre à décalage 74HC595 sous MicroPython", ce qui permettrait de définir une adresse 16 bits.

D'un autre côté, j'ai aussi les UV EPROM 27512 (64 Kio) du projet de rétro-ingénierie Z80 qu'il me faudra, tôt ou tard, manipuler l'équivalent EEPROM.

Créer un programmeur d'EEPROM

J'ai donc décidé de créer mon propre programmateur d'EEPROM et de le faire fonctionner sous MicroPython avec un Raspberry-Pi Pico.

J'ai dégainé KiCad et me suis mis au travail pour sortir cela.

Programmateur d'EEPROM 27C512 / lecture UVPROM 27512

Voir schéma complet disponible ici (pdf)

Et en attendant l'arrivée des cartes, j'ai aussi prototypé la lecture des EEPROM du projet Z80. 

J'ai donc simplifié le schéma pour ne garder que la partie lecture des EEPROM.

Version haute résolution disponible ici

pour pouvoir le monter sur un breadboard.

Montage simplifié de lecture d'EEPROM sur breadboard

Il ne reste plus qu'a écrire un code MicroPython pour lire les données de l'UVProm.... en gros fixer une adresse sur le bus d'adresse 16 bits et lire les 8bits de données retournés par l'EEPROM.

Code MicroPython pour lire l'EEPROM

Le dépôt micropython-eeprom-27512 contient l'exemple read_eeprom.py dont le corps du script se résume comme suit:

data = DataIO( [Pin(6),Pin(7),Pin(8),Pin(9),Pin(10),Pin(11),Pin(12),Pin(13)] )
addr = ShiftReg( Pin(20), Pin(21), Pin(19), Pin(18)  )

data.config( Pin.IN ) # Read mode
oe.value( True ) # Activates EEPROM
ce.value( True ) # Only required when CE is wired)

start_addr = 0x0000
end_addr   = 0xFFFF

_addr = start_addr # Current address
while _addr <= end_addr:
	addr.write_word( _addr )
	_val = data.value
	... afficher les données collectées
	_addr += 1

Les variable oe et ce sont de simple Pin permettant de manipuler les  signaux du même nom sur l'EEPROM (note: le transistor Mosfet inverse le signal... c'est pour cela qu'il faut mettre à True pour activer).

La classe DataIO (définie dans l'exemple) permet simplement de transformer un octet (valeur de 0 à 255) vers 8 bits de données sur les GPIOs 6 à 13 (et inversement).

Sans se rendre la vie plus compliquée, les données sont affichées dans la session REPL au format Hexadécimal.

Ce qui permet d'obtenir le contenu de l'EEPROM avec une certaine lisibilité


Et m'a même permit d'apprendre que la centrale DTMF était capable de parler au téléphone! (voir capture ci-dessous)

J'ai placé la ROM1.txt dans le dépôt (385 Kio)... si cela vous intéresse de fureter dans le binaire Z80.

Améliorer le code

Le code est encore un peu lent. C'est que le temps d'attente minimum est de 1ms là ou les composant n'ont pas de problème à descendre à 100nS.

Il me faudra donc faire quelques investigation supplémentaires.

Aucun commentaire