Questo capitolo è stato scritto da Abhijit Dasgupta ed è preso da http://www.nnaf.net/~abhijit/eep. L'indirizzo email di Abhijit è: abhijit@ans.net
Una foto del programmatore è visibile presso: http://www.nnaf.net/~abhijit/pictures/eeprom-burner.jpg
Questo è un programmatore per le EEPROM del tipo 2816 e 2864. Sono disponibili vari progetti, ma l'obiettivo fondamentale è di avere qualcosa che sia:
Questo programmatore usa una manciata di integrati logici 74HCTxx, tutti disponibili nel negozio di componenti elettronici sotto casa! Usa l'interfaccia della porta parallela del PC. Abhijit ha scritto il codice del driver solo per Linux, ma dovrebbe essere facile modificarlo per altri sistemi operativi.
È stato usato per scrivere le PROM per il netboot di schede ethernet, che a loro volta sono state usate per realizzare delle macchine Linux diskless. Per i dettagli riguardanti le modalità operative si vedano i pacchetti netboot e/o etherboot. È anche possibile usarlo per costruire dei sistemi microcontrollori con ROM esterna (ad es. 8031).
ATTENZIONE: È facile distruggere la porta parallela del proprio PC collegandoci qualcosa. Facendo collegamenti sbagliati e in caso di incidenti di tipo elettrico è possibile danneggiare o distruggere l'intero PC, comprese le periferiche e tutto ciò che gli è attaccato, ed è anche possibile ferire chi si trova lì vicino. FATE MOLTA ATTENZIONE.
Liberatoria: Usate questo apparecchio a vostro rischio e pericolo. Non è data nessuna garanzia di nessun tipo.
Il programmatore può essere sperimentato su una breadboard, ma per realizzarne una versione permanente usate una protoboard. Usa abbondantemente i condensatori di bypass da 0.1uF per le linee di alimentazione. L'alimentazione a 5V può essere presa direttamente dal PC, ma fate attenzione.
Scaricate il software http://www.nnaf.net/~abhijit/eep/eeprom.tar.gz. Per compilarlo basta andare nella directory con i sorgenti e digitare `make'.
readrom ------- readrom legge da una EEPROM 2816/2864 un dato numero di byte, a partire da una data posizione, e li invia allo standard output in formato binario (raw) o ascii-hex. Uso: readrom -b|-t posizione dimensione dove -b uscita in binario (raw) -t uscita in formato testo (ascii-hex) posizione indirizzo di inizio nella EEPROM: 0..8191 dimensione numero di byte da emettere: 0..8192 Esempi: # legge il contenuto di una 2864 in binario (raw) e lo salva in un file: readrom -b 0 8192 > contenuto.bin # mostra 80 byte a partire dal 32esimo: readrom -t 32 80 writerom -------- writerom legge un dato numero di byte dallo standard input e li scrive in una ROM 2816/2864 a partire dalla posizione specificata. writerom verifica tutti i byte che scrive nella EEPROM. Uso: writerom posizione dimensione dove posizione indirizzo di inizio nella EEPROM: 0..8191 dimensione numero di byte da scrivere: 0..8192 Esempio: # scrive nella EEPROM 8192 byte prendendoli dal file ne.lzrom: writerom 0 8192 < ne.lzrom
Lo schema è disegnato in ASCII, ma è disponibile una versione in PostScript (graficamente migliore) presso http://www.nnaf.net/~abhijit/eep/eeprom/schematic.ps
+-------+ +5-------|RST | +5---o o o J1 +-----------+ +5--o----|/CLR1 | 10K | | | | | |-----o--/VVV\-- +5 +----------|26 +5(NC) | +------+ | |1/2 123| | +----------->|27 NC(/WE) | 16 o-|/CS2 | | | |--||-+ | +--------->|23 /WE(A11)| | CS1|----o----|B1 | 100pF | | | | | | | /Q1|---------->---------o o o J2 | zoccolo | | Y1|---------|/A1 | | | ZIF28 | | 138 | +-------+ _ 1/2 74HCT132 | | per | | | +5 --| \ __ | | 2816(2864)| | Y2|--------------------------| O--| \ | | | 8 o-|A2 | +-------+ |_/ | O-------------->|/OE | 7 o-|A1 Y4|--------------->|EN Y7|-----o-|_/ | | | 6 o-|A0 Y3|----+ +5-----|RST | | | | | | Y0|-+ | | Y6|--+ | | | | | /CS3| | | | 259 | | | | | | +------+ | | | Y4|--|--|-----------|------->|2 NC(A12) | | | | | Y3|--|--|-----------+ | | 5 o--->---|--|--|--------o--|D Y2|--|--|------------------->|A10 | 4 o--->---|--|--|------o-|--|A2 Y1|--|--|------------------->|A9 | 3 o--->---|--|--|----o-|-|--|A1 Y0|--|--|------------------->|A8 | 2 o--->---|--|--|--o-|-|-|--|A0 | | | | | | | | | | | | +-------+ | | +5------------|28 NC(+5) | | | | | | | | | | +5----/VVV\---|1 NC(RDY) | | | | | | | | +-------+ | | 1K | | | | | | | | | | Y7|--|--|------------o------>|A7 | | | +---------->|EN |--|--|-----------o|------>| | | | | | | | | |--|--|----------o||------>| | | | | | | | | 259 |--|--|---------o|||------>| | | | | | | | | |--|--|--------o||||------>| | | | | | | | | |--|--|-------o|||||------>| | | | | | | +--|D |--|--|------o||||||------>| | | | | | +----|A2 Y0|--|--|-----o|||||||------>|A0 | | | | +------|A1 | | | |||||||| | | | | +--------|A0 RST| | | |||||||| | ZIF28 | | | +-------+ | | +------------+ | per | | | | | | | dati In | | 2816/64 | | | +5 | +-->|/OE | | | | | | | 574 | | | | +------------------------------->|CLK | | | | | | dati Out | | | | V +------------+ | | +----+ +------------+ |||||||| | | | | SEL | |||||||| | | | | B3|<----|||||||o------|D7 | 11 o---<-----------------------|Y3 B2|<----||||||o-------| | 12 o---<-----------------------|Y2 B1|<----|||||o--------| | 13 o---<-----------------------|Y1 157 B0|<----||||o---------| | 15 o---<-----------------------|Y0 A3|<----|||o----------| | | | A2|<----||o--- bus ---| | | | A1|<----|o---- dati --| | | GND----|/OE A0|<----o-------------|D0 | +5--o--+ | +------------+ | | | | __ o---------------------------------------------->|/CE | 100K +-| \ | __ +-----------+ sw1 | | O-o-| \ 1/2 74HCT132 o-->o----|__/ | O---390ohm--+ | | +-|__/ | | --- 1uF | LED | --- +5--+ | | | | +---o----------------------------o- GND
Note: