martedì 13 ottobre 2009

I2C - serial interface (3a parte)

Non ci siamo proprio. L'interfaccia si è rivelata inaffidabile. Ho effettuato due dump di una memoria eeprom ed ho ottenuto due risultati diversi. Ho infatti confrontato due files esadecimali ottenuti dallo stesso chip in tempi diversi, con il programma gtk-diff ed il risultato non coincide. Alcune locazioni appaiono di valore diverso da 00 a FF, segno evidente che nella lettura i segnali vegono interpretati diversamente e segno evidente che i livelli logici sono con molta probabilità affetti da disturbi di natura sconosciuta (per ora). Mi manca un analizzatore di stati, dovrò provvedere di conseguenza per esserne certo e dovrò scegliere un altra strada per la lettura. Sto pensando di sviluppare un interfaccia attraverso la presa VGA che contiene i segnali I2C ed installare i moduli opportuni. Un altra strada è l'utilizzo della porta parallela o l'utilizzo di un processore dedicato (la mitica fox board). Di solito questi fallimenti mi spronano a proseguire, testardo come un mulo e non demordo sino a quando non ottengo dei risultati. Procedo  con la ricerca e con gli esperimenti. I dati ci sono e voglio tirarli fuori, in modo da essere pronto per quando "dovrò" tirarli fuori. Alla prossima.

P.S. I muratori stanno smontando le impalcature. Ripeto: I muratori stanno smontando le impalcature.

I2C - serial interface V.2


Ho dovuto auto costruire una seconda versione dell'interfaccia RS232 - I2C. Il "problema" dello schema precedente è che funziona a 5,1 volts. Da alcune misurazioni effettuate sulla scheda che devo sottoporre ad analisi, ho scoperto che il chip di memoria eeprom è alimentato a 3,3 volts. Dal suo datasheet leggo che la massima differenza di potenziale fra i segnali SDA e SCL e la Vcc di alimentazione non può essere superiore di 0,7 volts. Per evitare di bruciare il chip, ho dovuto allora modificare lo schema precedente. Purtroppo, dal mucchio infinito di componenti passivi recuperati da un industria di elettronica ad oggi fallita, trovo solo degli zener da 3.9 volta (BZX55C3V9 da 1/2w). Mi sorge inoltre il dubbio di dover ricalcolare le resistenze di pull-up necessarie al funzionamento della comunicazione nel canale I2C. Da un mio calcolo, che spero sia esatto, mi risulta in ogni caso necessaria una coppia di resistenze molto inferiore ai 2.2k prevista dallo schema reperito in rete (vedi post precedente). Decido allora di lasciare quelle ed adottare i due zener da 3.9 volts, alla peggio non funzionerà nulla ed andrò per tentativi. Sono ancora in attesa di un anima pia e generosa che mi faccia dono di un oscilloscopio digitale a 4 tracce... ne ho proprio bisogno. Ad ogni modo, dato che devo rifare l'interfaccia, decido stavolta di prendermela con calma e racchiudere il tutto dentro il guscio di plastica della spina seriale. L'ho recuperata da un vecchio cavo riposto con cura assieme ad altri che attendono ancora un utilizzo intelligente. Metto in funzione la micro fresa ed il risultato è visibile in foto. Cavo più maneggevole, meno soggetto al rischio di rotture, più pratico... per me ovviamente un capolavoro di manualità con ampi margini di miglioramento ovviamente. Da una prima prova effettuata, sembra che funzioni, anche se i dati estratti sono diversi da quello che mi aspettavo. Dovrò fare ancora dei tentativi, delle letture successive per verificare se i dati estratti sono gli stessi o se cambiano. In quest'ultimo caso significa che c'è qualcosa che non va e dovrò inventarmi qualche altro metodo. Nel frattempo, mi studio per bene il protocollo I2C. Nei prossimi post i risultati delle prove. alla prossima.

P.S. Ponzio Pelato non è un pomodoro menefreghista. Ripeto: Ponzio Pelato non è un pomodoro menefreghista.

domenica 11 ottobre 2009

I2C - serial interface

In vista di un progetto di analisi di alcune memorie eprom che si trovano su molte mother board di numerosi dispositivi elettronici, con applicazioni nel campo dell'hardware informatico, ho la necessità di costruire un interfaccia seriale in grado di poter accedere ai dispositivi I2C. I2C è un protocollo proprietario cui sono dotati numerosi dispositivi fra cui processori, memorie ecc.ecc. E' un canale di comunicazione ad un filo (più la massa ovviamente) che permette l'accesso su un unico filo a più dispositivi disposti "in serie". La documentazione in rete è sin troppo corposa per riportare anche qui le specifiche ed i principi di funzionamento. Meno diffusi gli schemi di collegamenti con l'interfaccia seriale dei PC. Allora ho deciso di stamparmi un manuale comprensivo delle istruzioni di base (seguendo le istruzioni ai 3 post intitolati "Libri fai da te")  e di accingermi alla costruzione usando pezzi di recupero. Meno di un ora e il dispositivo è pronto. Un connettore femmina a 9 pin, due resistenze da 220 ohm, due diodi zener da 5,1 volts ed una millefori microscopica che mi insegna come non vadano mai buttati nemmeno i pezzi più insignificanti.

Lo schema è visibile in foto ma si può trovare all'indirizzo del blog di sodoityourself.com
Ho protetto il tutto con del tubetto termo-restringente. giusto per evitare corti o rotture dovute all'uso ripetuto nel tempo. Il cavo nero è di un alimentatore di un cordless Tele*om, che fanno talmente schifo che si rompono sempre e mi rifiuto di ripararli (così forse la gente la smette di comperare quelle ciofeche). Tre fili terminano su delle prese a molla, per comodità. Per i segnali: Nero - GND, Giallo SCL e rosso SDA.
Anche se le forchette sono troppo grandi per i pin degli integrati SOIC, posso sempre collegarle al volo a dei filetti saldati al chip. Non escludo in futuro di costruirmi delle basette in grado di portare su dei pin esterni i collegamenti agli integrati SOIC rimossi dalle schede. Sto già testando il tutto e l'interfaccia funziona a meraviglia. A breve, tempi  permettendo, i risultati degli esperimenti. Alla prossima.

P.S. Nuvole nere sullo stretto di Largo Italia.  Ripeto: Nuvole nere sullo stretto di Largo Italia.