AttivitàProgetti

Lettore / programmatore per Eprom 2708 / 2704

Il restauro di calcolatori come il SAGA FOX LS-1000, che contengono al suo interno EPROM 2708, ci ha posto il problema di come riuscire a leggere, e quindi conservare, il contenuto di queste EPROM, prima che l’eta’ possa irrimediabilmente far perdere il loro contenuto.

I comuni lettori di EPROM tra cui quello a nostra disposizione arrivano a leggere al massimo le 2716, ma non la 2708. Lettori professionali capaci di leggere (e scrivere) questa EPROM costano pero’ ben oltre le nostre attuali possibilita’ di spesa.

Abbiamo cosi’ pensato di autocostruirci un lettore di EPROM 2708 utilizzando un PIC ed un alimentatore esterno.

2708

2708 Pinout.

Per leggere la EPROM 2708 bisogna alimentarla con  -5V al pin VBB (21),  +12 V al pin VDD (19), +5V al pin VCC (24) e ponendo il pin VSS (12) a massa.  Poi si deve collegare il pin Not Chip Select (20) ed il pin di programmazione (18) a massa. A questo punto basta scrivere nel bus di indizzamento (A0…A9) l’indirizzo di memoria da leggere, aspettare che il segnale di uscita si assesti (secondo il datasheet al massimo 450 ns) e leggere nel bus dati (Q0….Q7) il dato letto.

Circuito

Per la lettura di una EPROM 2708 servono dieci output per il bus di indirizzamento, ed otto di input per il bus dati: in totale diciotto digitali. Inoltre, serve anche un metodo per comunicare i dati al pc, quindi sono necessari altri due pin disponibili per una porta seriale.

Il microcontrollore scelto e’ un PIC ad 8 bit e 40 pin, in particolare il pic18f4610. Le porte digitali del pic sono suddivise in gruppi di otto digitali, il cui valore puo’ essere trattato come intero ad 8 bit.

Il bus dati della 2708 e’ ad 8 bit, quindi possiamo collegare direttamente i pin del bus dati ai pin di una porta del pic (e’ stata usata la porta B). Invece il bus indirizzi e’ a 10 bit, quindi una porta del pic non basta. La soluzione implementata e’ quella di collegare gli 8 bit meno singificativi del bus di indirizzamento ad un altra porta del pic (la porta B), e collegare gli altri due bit a due piedini del pic, utilizzandoli come segnali digitali (C0 e A1).

Software

Il software e’ diviso in due parti: il firmware da inserire nel pic ed un programma in Python che legge i dati inviati dal pic tramite porta seriale su PC e li memorizza. Nel firmware la lettura di una casella di memoria della EPROM e’ molto semplice: basta scrivere l’indirizzo nel bus indirizzi, scrivendo i primi 8 bit nella porta B e gli altri due bit nelle porte digitali C0 ed A1 (collegati ad A8 e ad A9 sulla EPROM), aspettare il tempo di assestamento dell’output, ed infine leggere il bus dati:

/* Read a byte from 2708 eprom
@param address: The address to read
@return The value read
*/
int read_eprom(long int address)
{
    ADDRESS = address;
    A8 = (address & 0x0100) >> 8;
    A9 = (address & 0x0200) >> 9;
    /* Wait. Address to Output Delay Time */
    delay10tcy(10);
    return DATA;
}

Il firmware programmato nel PIC non fa altro che leggere tutti i valori della EPROM  (chiamando la funzione read_eprom con tutti i valori di indirizzi compresi tra 0 e 1023) ed inviare il valore letto sulla porta seriale.

I dati vengono trasmessi via seriale come caratteri ASCII, che rappresentano le due cifre esadecimali del valore letto. Ogni lettura viene separata dalla successiva dal carattere ‘spazio’. Ogni 16 valori viene inviato un carattere di ritorno (\r) ed uno di nuova riga (\n). Ogni volta che la lettura della EPROM riprende dall’inizio, viene inviata la seguente stringa: ‘##\r\n’

Il programma in Python legge tramite seriale il contenuto della EPROM per cinque volte, confronta le letture tra di loro e, se queste coincidono, salva la singola lettura su di un file binario, che conterra’ quindi il dump della nostra EPROM 🙂

La porta seriale da utilizzare sul PC, la velocita’ ed i parametri di comunicazione, il numero di letture da effettuare e comparare, ed il nome  del file da salvare sono modificabili cambiando le costanti in cima al codice Python.

2704

Le EPROM 2704 sono molto simili alle 2708, l’unica differenza e’ che contengono 512 byte di dati invece di 1024.  Il pinout e’ identico a quello della 2708 ad eccezione del bus di indirizzamento, che e’ a 9 bit. Il pin 22, che nella 2708 e’ il nono bit di indirizzamento, in questo caso e’ una massa. Per questo motivo basta modificare il software sul pic per poter leggere anche questo tipo di EPROM. Basta infatti impostare la digitale A1 (collegata al pin 22) sempre a zero e leggere i valori di indirizzi compresi tra 0 e 511.

Programmazione

 

Per programmare le EPROM 2708 bisogna  alimentarle con  -5V al pin VBB (21),  +12 V al pin VDD (19) e al pin Not Chip Select (20), +5V al pin VCC (24) e porre il pin VSS (12) a massa ed inizialmente anche il pin di programmazione (18) a massa. A questo punto basta scrivere nel bus di indizzamento (A0…A9) l’indirizzo di memoria da programmare, nel bus dati (Q0….Q7) il dato da scrivere, e settare il pin di programmazione (18) a +26 V. Bisogna aspettare che il  dato venga scritto (secondo il datasheet  circa 1 ms) e riportare a massa il pin di programmazione (18).

Il circuito abilitato alla programmazione, il relativo software per il PIC e la corrispondente utility in Python necessari a programmare le EPROM sono in fase di progettazione; pur non presentando complicazioni di sorta, attualmente non abbiamo molta fretta poiche’, in caso di necessita’, e’ possibile sostituire una 2704 od una 2708 con una 2716 o 2732, programmandone solo i primi 512 o 1024 bytes, in quanto queste EPROM sono  tra loro compatibili a livello di piedinatura.

Download:

Schema elettrico e tracciato del circuito PCB

Firmware per PIC

Programmi in Python

Il progetto e’ stato sviluppato e realizzato da Andrea “Mancausoft” Milazzo.

Per favore segnalateci eventuali errori, omissioni o commenti, grazie!