Programmatore di EPROM 27C256

Avendomi dato il mio programmatore di eprom forfait nel momento del bisogno,  mi son trovato nella necessità di realizzare quanto mi appresto a descrivere

P_20180923_222851_1_p

Premessa 

Essendo un qualcosa realizzato nel più breve tempo possibile ,e per necessità, non mi è parso opportuno procedere al disegno e produzione di circuito stampato. Pertanto, il montaggio dei componenti è avvenuto su basetta millefori, la scelta degli stessi è stata imposta da quanto disponibile.

LE EPROM

oldEprom

Componenti caduti pressochè in disuso in quanto sostituiti da più versatili memorie cancellabili elettricamente, questo tipo di memoria consiste in celle costituite da mosfet P floating gate. La programmazione avviene sfruttando l’effetto valanga che consiste nell’applicare una corrente tra drain e source per intrappolare elettroni nel gate che  “memorizzerà” e manterrà questo stato (una cella programmata ha livello logico 0). Per liberare gli elettroni e ripristinare lo stato iniziale, il chip va esposto a raggi ultravioletti . Allo scopo si utilizzano lampade UV-C , con lunghezza d’onda ~250 nm , che nella forma più classica consistono in tubi neon. Indicativamente, utilizzando un neon da 8W sono necessari 15 minuti di esposizione a 2-3 cm di distanza.

     LETTURA e PROGRAMMAZIONE dal punto di vista elettrico

 

epromPinoutepromProgrammingWaveformsepromReadWaveforms

La lettura avviene ponendo l’indirizzo della cella desiderata sul BUS INDIRIZZI ed abbassando i pin Output Enable e Chip Enable. Dopo un tempo definito “tempo di accesso”, sarà possibile leggere il dato sul BUS DATI.

La programmazione si realizza invece alzando Vcc a 6.5V,  Vpp a 13V, impostando indirizzo cella, dato, e quindi fornendo un livello basso per circa 100uS (vedi datasheet) sul pin CE. Dopo aver rialzato CE si abbassa OE, commutando contestualmente il BUS dati del programmatore in lettura, e ci si accerta di rileggere quanto scritto. Nel caso in cui la lettura fornisse un valore discorde, si effettua un ulteriore tentativo di scrittura, applicando nuovamente l’impulso di opportuna durata su CE, seguito da verifica. Sono ammesse massimo 10 reiterazioni consecutive, oltrepassate le quali il programmatore interrompe la programmazione.

Flow chart programmazione rapida
Flow chart programmazione rapida

 

               SCHEMA ELETTRICO

programmatore27C256Schema

Il cuore del circuito è costituito da un classico ATMEGA8A  configurato con oscillatore interno @ 4 MHz per non perdere l’utilizzo dei relativi 2 pin, che in questa applicazione corrispondono ai più significativi del bus dati. La comunicazione con il PC si realizza tramite USART hardware ad una velocità di 19.2 kbps. Clock sistema e prescaler della stessa , in questa configurazione, permettono di contenere l’errore entro lo 0.2%.  Alla suddetta porta  è connesso un modulo HC-06 Serial to Bluetooth che , lato PC, viene visto come una COM, in realtà virtuale, ma utilizzabile in maniera assolutamente trasparente e senza necessità di driver forniti da terze parti. Non avendo sufficiente numero di pin a disposizione, per l’indirizzamento ho optato per una cascata di due contatori binari a 14 stadi (HEF4040B) con i reset connessi insieme, ed il clock del secondo all’ultimo bit del primo per estendere l’indirizzamento.

PORTB è direttamente connessa al bus dati della EPROM e può essere input od output a seconda delle necessità, PORTC gestisce OE, CE della memoria ed i pin CLOCK e RESET dei contatori binari i quali son connessi ad A0:A14 della EPROM e si occupano quindi di indirizzarla.

Un pettine a 6 vie realizza l’interfacciamento con il programmatore ICSP.

Per quel che concerne l’alimentazione,un modulo boost converter commerciale basato su MT3608, eleva la tensione fornita da una qualsiasi porta USB di notebook/tablet/cellulare fino ai 13V richiesti. Essendo la corrente in ingresso  contenuta entro i 100mA, non è necessaria alcuna negoziazione con il controller USB dell’apparecchio a cui ci si connette.

P_20180923_222903_1_p

Due 78L05 in versione SMD, partendo da questa tensione, forniscono alimentazione a microcontrollore ed eprom. Per quest’ultima,  sono selezionabili 5V od i 6.4V necessari alla programmazione, tramite dipswitch con un espediente :  quando il contatto è aperto, due diodi 1N4148 posti in serie sollevano la massa del regolatore di un valore pari alla somma delle loro cadute di tensione dirette e di conseguenza la tensione in uscita. Un secondo dip permette di scegliere se fornire al pin VPP della EPROM 13V (programmazione), o 5V meno la caduta di un diodo (lettura).

LETTURA : DIP4 ON = 5Vcc , DIP3 OFF = 4.3Vpp

SCRITTURA : DIP4 OFF =  6.4Vcc, DIP3 ON = 13.5Vpp

                FIRMWARE e PROTOCOLLO

Realizzato in C utilizzando GCC  come compilatore ed AVR Studio come ambiente di sviluppo (entrambi free), prevede routine relativamente snelle per dialogare con il device  che invia i comandi. Per limitare al massimo overhead e tempi di sviluppo/debug, ho deliberatamente scelto di non implementare alcun controllo di correttezza sui dati scambiati; errori read/write non se ne sono mai verificati, quindi reputo equilibrata la scelta.

Le periferiche hardware utilizzate sono TIMER0 (nell’unica modalità di conteggio disponibile) con interrupt su overflow, ed USART.

TIMER0 , di fatto, è utilizzato esclusivamente per gestire eventuali timeout nella comunicazione, USART come detto è impostata a 19.2 bps, dispone di interrupt sulla ricezione caratteri e si occupa, chiaramente, della comunicazione.

A meno che non ci trovi in un particolare stato macchina, USART riceve comandi strutturati in 3 bytes secondo il seguente schema :

  • HEADER (255)
  • eventuale dato da scrivere
  • comando

Ad ogni byte ricevuto, se il primo == 255 (HEADER), viene incrementato il puntatore. 600mS senza attività della seriale provocano l’azzeramento del puntatore.

Elenco comandi
Elenco comandi

L’invio di particolare comando pone il programmatore in uno stato di attesa di un blocco dati (512 bytes), e salva in un array su memoria volatile i bytes in ingresso. Al 512esimo byte ricevuto, il contenuto dell’array viene “scaricato” nella EPROM partendo dal byte 0 (comando 28), o da dove si era arrivati con la precedente scrittura (comando 29).  Al termine della procedura il programmatore invia byte 13 per confermare il successo, byte 99 decimale se errore in scrittura (questo in qualsiasi momento, non necessariamente al termine), byte 98 in caso di timeout seriale.

                SOFTWARE WINDOWS

Per quel che concerne il software, attualmente ho sviluppato il programma che si occupa di dialogare con il programmatore in VB6. Comandi ed impostazioni, sono quelli essenziali per utilizzare il programmatore.

Programma VB6
Programma VB6

 

FIRMWARE (rinominare in HEX)

File installazione software Windows XP, 2000, 7

N.B. declino ogni responsabilità per possibili danni derivanti da montaggio errato e/o utilizzo “improprio” di quanto descritto.

E’ vietato riprodurre il contenuto di queste pagine.