CH341A
Il CH341A e' uno dei programmatori che vale veramente la pena di provare, costa un paio d'euro, dipende da dove lo acquistate e supporta molte memorie EEPROM. Sul programmatore troviamo uno zoccolo da 16 pin diviso in due, 8 pin per le memorie 25XX (SPI) e altri 8 pin per le memorie 24XX (I2C). Tramite accessori acquistabili a parte e' possibile espandere le modalita' di connessione, per esempio acquistando una clip possiamo leggere/scrivere una memoria senza dissaldarla ma non sempre funziona, infatti dipende dal tipo di circuito perche' quando colleghiamo il programmatore alla memoria EEPROM tramite clip, quest'ultimo andra' ad alimentare sia la memoria e sia tutto quello che c'e' collegato alla stessa alimentazione della memoria e molte volte non riesce a fornire tutta la corrente necessaria per il circuito, in questo caso va dissaldata la memoria e poi va inserita nella clip. Anche le PCB con i footprint per le memorie sono molto comode, in questo modo bastera' dissaldare la memoria dalla scheda e saldarla sulla PCB che poi viene inserita nello zoccolo del programmatore. La migliore alternativa e' comprare i socket solderless per le memorie.
ATTENZIONE!: prima di effettuare i collegamenti con il programmatore consultare il datasheet della memoria che si intende leggere, non tutte funzionano a 3.3V! Nel caso in cui si tratta di una memoria EEPROM da 1.8V bisognera' acquistare un adattatore.
ATTENZIONE!: prima di effettuare i collegamenti con il programmatore consultare il datasheet della memoria che si intende leggere, non tutte funzionano a 3.3V! Nel caso in cui si tratta di una memoria EEPROM da 1.8V bisognera' acquistare un adattatore.
1. Selezionare il tipo di memoria che si intende leggere (24xx o 25xx) oppure rilevare il tipo di memoria con il pulsante detect automaticamente.
2. Leggere il contenuto della memoria con il pulsante read ed effettuarne un backup (DUMP).
3. Cancellare completamente la memoria con il pulsante erase.
4. Caricare un nuovo file/modifica del file originale con successiva scrittura con il pulsante write.
5. Verifica della scrittura eseguita con successo con il pulsante verify. Questa operazione confrontera' il file caricato con quello scritto sulla memoria effettuando una nuova lettura e verificando che i dati e la grandezza dei contenuti sia la stessa.
2. Leggere il contenuto della memoria con il pulsante read ed effettuarne un backup (DUMP).
3. Cancellare completamente la memoria con il pulsante erase.
4. Caricare un nuovo file/modifica del file originale con successiva scrittura con il pulsante write.
5. Verifica della scrittura eseguita con successo con il pulsante verify. Questa operazione confrontera' il file caricato con quello scritto sulla memoria effettuando una nuova lettura e verificando che i dati e la grandezza dei contenuti sia la stessa.
Come potete vedere nell'immagine qui sopra, c'e' raffigurato il software fornito con un programmatore CH341a. Se analizziamo bene le categorie possiamo notare al centro un grande riquadro per analizzare i dati letti nella memoria, a destra c'e' una colonna dove possiamo visualizzare i dati convertiti in testo. Ricordatevi che se dovete effettuare qualsiasi modifica ai dati non dovete inserire spazi o caratteri in piu' ma sostituire quelli gia' presenti, il peso del file deve essere uguale all'originale. A sinistra c'e' una colonna dove e' possibile selezionare il tipo di memoria oppure effettuare un rilevamento automatico, andando in basso c'e' una status bar dove possiamo leggere a che punto si trova l'operazione corrente. In basso all'angolo a destra possiamo vedere se il programmatore e' collegato al computer e riconosciuto correttamente dal software. Parlando della sezione in alto, troviamo tutte le operazioni precedentemente citate:
Per chi ne avesse bisogno ecco driver e software, con traduzione in italiano disponibile (fatta da me): |
|
|
In alternativa al software originale ci sono questi due (che dovrebbero supportare una gamma piu' ampia di circuiti integrati):
|
|
Ecco il datasheet del circuito integrato:
ch341ds1.pdf | |
File Size: | 200 kb |
File Type: |
Socket Autocostruito
Se riuscite per qualche motivo a trovare un socket SOIC8 in qualche scheda potete costruirvi il socket da soli, io ne ho trovato uno su un computer portatile HP che tenevo da parte per pezzi di ricambio, veniva utilizzato per la EEPROM del BIOS. Una volta dissaldato lo zoccolo ho proceduto saldandolo su un adattatore SOIC8->DIP8, successivamente l'ho inserito nel programmatore ed ho provato subito con una memoria EEPROM SPI 25C64 ed ha funzionato perfettamente,
Fix 3.3v
Nonostante il CH341 sia un dispositivo molto versatile e semplice da utilizzare, non mancano i difetti di progettazione, probabilmente dovuti al datasheet abbastanza vago del chip CH341 interpretato male dai progettisti del piccolo programmatore. Il programmatore alimenta il CH341A con 5v, di conseguenza, anche tutte le linee dati (I2C, SPI) vengono portate ad un livello logico di 5V (per conferma, basta misurare con un multimetro i pin MISO/MOSI/CS/CLK). Allo stesso tempo, la tensione fornita al socket ZIF (e di conseguenza ai chip di memoria che dobbiamo programmare) e' di 3.3v. Questo non ha alcun senso, tutto cio' non fa altro che portare i chip di memoria a funzionare fuori specifica (o perche' hanno una tensione nominale di 3.3v, quindi non funzionano a 5v, oppure perche' la tensione sui pin delle linee dati supera la tensione di lavoro). La ragione di tutto questo, e' che probabilmente il datasheet del CH341A riporta che il chip puo' funzionare a 5v o 3.3v, e il fatto che il CH341A ha un regolatore interno a 3.3v. Questo regolatore viene utilizzato soltanto per il core del microcontroller interno, ma non per i pin I/O del chip, ed e' cosi' che si presenta la situazione precedentemente descritta.
Fortunatamente, il programmatore ha un regolatore a 3.3v in piu' sulla PCB. Questo regolatore alimenta soltanto il socket per la flash SPI, e con una piccola modifica, possiamo utilizzarlo per alimentare anche il CH341A.
La soluzione e' quella di sollevare il pin di alimentazione del CH341A (pin 28) e saldare un filo da questo pin al condensatore C4 (sul lato collegato al pin 9 del CH341A) e poi da qui, all'output del regolatore da 3.3v (pin 2). Quindi il cavo fara' questo percorso: Pin28 CH341 -> Pin9 CH341A (C4) -> Pin2 LM1117 (Regolatore 3.3v). Volendo, invece di sollevare il pin del chip, e' possibile tagliare la pista di alimentazione sulla PCB e saldare un filo dal pin 28 all'output del regolatore da 3.3v.
Per qualsiasi dubbio potete consultare l'immagine qui sotto.
A questo punto, misurando con il multimetro, dovreste avere queste tensioni sui seguenti pin:
Fortunatamente, il programmatore ha un regolatore a 3.3v in piu' sulla PCB. Questo regolatore alimenta soltanto il socket per la flash SPI, e con una piccola modifica, possiamo utilizzarlo per alimentare anche il CH341A.
La soluzione e' quella di sollevare il pin di alimentazione del CH341A (pin 28) e saldare un filo da questo pin al condensatore C4 (sul lato collegato al pin 9 del CH341A) e poi da qui, all'output del regolatore da 3.3v (pin 2). Quindi il cavo fara' questo percorso: Pin28 CH341 -> Pin9 CH341A (C4) -> Pin2 LM1117 (Regolatore 3.3v). Volendo, invece di sollevare il pin del chip, e' possibile tagliare la pista di alimentazione sulla PCB e saldare un filo dal pin 28 all'output del regolatore da 3.3v.
Per qualsiasi dubbio potete consultare l'immagine qui sotto.
A questo punto, misurando con il multimetro, dovreste avere queste tensioni sui seguenti pin:
- GND > MISO = 3.3V
- GND > MOSI = 3.3V
- GND > CS = 3.3V
- GND > CLK = 3.3V