<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9"> <TITLE>Diskless Nodes HOW-TO document for Linux: Costruire un programmatore EEPROM</TITLE> <LINK HREF="Diskless-HOWTO-6.html" REL=next> <LINK HREF="Diskless-HOWTO-4.html" REL=previous> <LINK HREF="Diskless-HOWTO.html#toc5" REL=contents> </HEAD> <BODY> <A HREF="Diskless-HOWTO-6.html">Avanti</A> <A HREF="Diskless-HOWTO-4.html">Indietro</A> <A HREF="Diskless-HOWTO.html#toc5">Indice</A> <HR> <H2><A NAME="s5">5. Costruire un programmatore EEPROM</A></H2> <P> <H2><A NAME="ss5.1">5.1 Che cos'è?</A> </H2> <P>Questo capitolo è stato scritto da Abhijit Dasgupta ed è preso da <A HREF="http://www.nnaf.net/~abhijit/eep">http://www.nnaf.net/~abhijit/eep</A>. L'indirizzo email di Abhijit è: <A HREF="mailto: abhijit@ans.net">abhijit@ans.net</A><P>Una foto del programmatore è visibile presso: <A HREF="http://www.nnaf.net/~abhijit/pictures/eeprom-burner.jpg">http://www.nnaf.net/~abhijit/pictures/eeprom-burner.jpg</A><P>Questo è un programmatore per le EEPROM del tipo 2816 e 2864. Sono disponibili vari progetti, ma l'obiettivo fondamentale è di avere qualcosa che sia: <P> <UL> <LI>economico (meno di 35$)</LI> <LI>facile da costruire e che usi solo componenti facilmente reperibili</LI> <LI>funzionante con Linux</LI> </UL> <P>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. <P>È 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). <H2><A NAME="ss5.2">5.2 Costruzione</A> </H2> <P>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. <P>Liberatoria: Usate questo apparecchio a vostro rischio e pericolo. Non è data nessuna garanzia di nessun tipo. <P>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. <H2><A NAME="ss5.3">5.3 Elenco dei componenti</A> </H2> <P> <UL> <LI><B>Circuiti integrati:</B> 74HCT123, 74HCT132, 74HCT138, 74HCT157, 74HCT574 (1 ea) e 2 74HCT259.</LI> <LI><B>Resistori:</B> 100K, 10K, 1K e 390 ohm (1 ea).</LI> <LI><B>Condensatori:</B> 100pF, 1uF, (1 ea) e 3 condensatori da 0.1uF per il bypass della linea di alimentazione.</LI> <LI><B>Vari:</B> 1 LED, 1 interruttore SPST, piattina da 25 fili con connettore maschio DB25, zoccolo ZIF a 28 pin (oppure si possono usare delle piccole breadboard), dei ponticelli.</LI> </UL> <P> <H2><A NAME="ss5.4">5.4 Uso</A> </H2> <P>Scaricate il software <A HREF="http://www.nnaf.net/~abhijit/eep/eeprom.tar.gz">http://www.nnaf.net/~abhijit/eep/eeprom.tar.gz</A>. Per compilarlo basta andare nella directory con i sorgenti e digitare `make'. <P> <HR> <PRE> 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 </PRE> <HR> <H2><A NAME="ss5.5">5.5 Schema circuitale</A> </H2> <P>Lo schema è disegnato in ASCII, ma è disponibile una versione in PostScript (graficamente migliore) presso <A HREF="http://www.nnaf.net/~abhijit/eep/eeprom/schematic.ps">http://www.nnaf.net/~abhijit/eep/eeprom/schematic.ps</A><P> <HR> <PRE> +-------+ +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 </PRE> <HR> <P>Note: <P> <OL> <LI>I numeri dei pin a sinistra sono quelli di una porta parallela con connettore DB25.</LI> <LI>I numeri dei pin nel blocco a destra sono quelli dello _zoccolo ZIF28_, non del circuito integrato.</LI> <LI>La 2816 va inserita nella parte bassa dello zoccolo ZIF28.</LI> <LI>J1 e J2 sono ponticelli a tre contatti in linea. Per entrambi, per usare una 2816 vanno collegati i due contatti a sinistra, per la 2864 invece i due a destra.</LI> <LI>Nel blocco dello zoccolo ZIF28, le etichette dei segnali per la 2864 (quando diverse da quelle della 2816) sono indicate fra parentesi. Per esempio, il pin 23 dello ZIF 28 ha l'etichetta "23 /WE(A11)" e quindi indica /WE per la 2816 e A11 per la 2864.</LI> <LI>Per far funzionare il programmatore l'interruttore sw1 deve essere aperto.</LI> </OL> <P> <HR> <A HREF="Diskless-HOWTO-6.html">Avanti</A> <A HREF="Diskless-HOWTO-4.html">Indietro</A> <A HREF="Diskless-HOWTO.html#toc5">Indice</A> </BODY> </HTML>