I2C debug con l’oscilloscopio digitale

I2C, o I quadro C, sta per Circuito Inter Integrato. Fu originariamente sviluppato da Philips all’inizio degli anni ’80 per fornire una modalità a basso costo per connettere i controller ai chip delle periferiche nei sistemi TV, ma da quel momento si è evoluto in uno standard mondiale per le comunicazioni tra dispositivi nei sistemi embedded. Il design semplice a doppio filo si ritrova all’interno di una varietà di chip, come I/O expander, A/D, D/A, di sensori di temperatura, di microcontrollori e microprocessori appartenenti ad importanti compagnie, quali Analog Devices, Atmel, Infineon, Cyprus, Intel, Maxim, Philips, Silicon Laboratories, STMicroelectronics, Texas Instruments, Xicor, e altri.

Come funziona l'I2C

L’interfaccia fisica I2C comprende un clock seriale bidirezionale (SCL) e linee di dati (SDA). I2C supporta sul bus più master e slave, ma solo un master può essere attivo ogni volta. Ogni dispositivo I2C può essere attaccato al bus, permettendo ad dispositivo master di scambiare informazioni con uno slave. Ogni dispositivo viene riconosciuto per mezzo di un indirizzo unico. Un dispositivo può sia lavorare come ricevitorie che come trasmettitore, a seconda della sua funzione. Inizialmente I2C utilizzava solo indirizzi a 7 bit, ma si è evoluto per permettere anche i 10 bit di indirizzo. Sono supportate tre classi di bit-rate: 100 Kb/s (modalità standard), 400 Kb/s (modalità veloce) e 3.4 Mb/s (modalità ad alta velocità). Lo standard I2C è specificato nel formato in figura

- Start indica che il dispositivo sta prendendo il controllo del bus e che seguirà un messaggio

- Address: un numero a 7 o 10 bit rappresentante l’indirizzo del dispositivo dal quale leggerà o sul quale scriverà

- R/W Bit: un bit che indica se i dati saranno letti dal, o scritti sul dispositivo

- Ack: un bit dal dispositivo slave a conferma delle azioni del master.

- Data: un numero intero di byte letti da, o scritti sul, dispositivo

- Stop: indica che il messaggio è completo e che il master ha rilasciato il bus.

Ci sono due modi per raggruppare gli indirizzi I2C per la decodifica: in 7 bit più una schema di scrittura/lettura (R/W) bit e in 8 bit (quindi un byte) dove il bit R/W è incluso come parte dell’indirizzo. Quello a 7 bit è lo schema specifico I2C seguito dagli ingegneri firmware e hardware, ma molti usano anche lo schema 8 bit. La serie di oscilloscopi MSO/DPO può decodificare i dati in entrambi gli schemi.

Debuggare l'I2C con l'utilizzo dell'oscilloscopio digitale.

Con il modulo applicativo DPOxEMBD Serial Triggering and Analysis o con l’applicazione SR-EMBD, la serie MSO/DPO diventa un potente strumento per i progettisti di sistemi embedded che lavorano con i bus I2C. Il pannello frontale presenta i "tasti Bus" che permettono all’utente di definire gli input come in un bus. Il menu di setup del bus I2C è mostrato in figura.

Definendo semplicemente quali canali e quali dati ci sono sopra, insieme alle soglie utilizzate per determinare gli 1 e gli 0 logici, si abilita l’oscilloscopio a comprendere il protocollo trasmesso attraverso il bus. Con questa conoscenza, l’oscilloscopio può innescare ogni informazione specificata a livello del messaggio e poi decodificare la risultante acquisizione in risultati facili da interpretare e significativi. Vediamo come esempio il sistema embedded in Figura.

Un bus I2C è connesso a dispositivi multipli, tra cui una CPU, una EEPROM, un controller della velocità della ventola, un DAC (digital to analog converter) e una coppia di sensori di temperatura. Questo strumento era stato rispedito all’engineering per l’analisi del guasto, perché il prodotto tendeva a diventare consistentemente caldo e si spegneva da solo.

La prima cosa da verificare è il controller della ventola e le stesse ventole, ma entrambi appaiono a posto. Il passo successivo consiste nel cercare il sensore della temperatura guasto (il controller della velocità della ventola interroga i due sensori, posti in due differenti aree dello strumento e regola la velocità della ventola per mantenere costante la temperatura interna).

Il problema deve allora risiedere in uno, o entrambi, i sensori. Per vedere l’interazione tra i sensori e il controller, basta connettersi con il clock I2C e le linee di dati e configurare un bus sulla serie MSO/DPO. Sappiamo che i due sensori hanno come indirizzi 18 e 19 sul bus I2C, quindi possiamo configurare un evento trigger per avere una scrittura sull’indirizzo 18 (il controller che interroga il sensore sulla temperatura corrente). È possibile vedere l’acquisizione in figura.

In questo caso, il canale 1 (giallo) è connesso a SCLK e il canale 2 (ciano) a SDA. La linea viola rappresenta il bus I2C che abbiamo definito inserendo alcuni parametri all’oscilloscopio. La porzione in alto del display mostra l’intera acquisizione. La porzione in basso, quella più grande, è invece la finestra di zoom. Come si può vedere, l’oscilloscopio ha decodificato il contenuto di ogni messaggio che viaggia attraverso il bus. I bus sulla serie MSO/DPO usano i colori e i contrassegni in tabella per indicare parti importanti del messaggio.

Dando un’occhiata alle curve acquisite, è possibile vedere che l’oscilloscopio ha innescato una scrittura sull’indirizzo 18 (mostrato nella parte in basso a sinistra del display). Infatti, il controller della velocità della ventola ha tentato di scrivere all’indirizzo 18 due volte, ma in entrambi i casi non ha ricevuto l’informazione di ritorno dal sensore della temperatura.

Poi ha controllato il sensore della temperatura all’indirizzo 19 e ha ricevuto l’informazione desiderata. Quindi, dopo un’analisi del circuito, è stato rilevato che una delle linee di indirizzo non era stata saldata in modo corretto e quindi il sensore non era in grado di comunicare le informazioni e quindi l’unità andava in surriscaldamento. È possibile risolvere questo problema in un paio di minuti grazie al trigger I2C e alla capacità di decodifica del bus della serie MSO/DPO. Vediamo anche quali sono le altre potenzialità della serie:

- Start: si innesca quando SDA si abbassa e SCL è alto

- Repeated Start: si innesca quando una condizione di partenza si verifica senza che si sia stata, precedentemente, una condizione di stop. Questo accade di solito quando un master invia messaggi multipli senza rilasciare il bus

- Stop: si verifica quando SDA si alza e SCL è alto

- Address: si attiva su un indirizzo specificato da un utente o su uno degli indirizzi speciali pre-programmati che includono General Call, Start Byte, HS-mode, EEPROM, o CBUS.

- Data: attiva fino a 12 byte di dati specificati dell’utente, inseriti sia in binario che in esadecimale

- Address e Data: permette di inserire sia un indirizzo che i valori dei dati. Questi trigger permettono di isolare il particolare traffico in cui un utente è interessato, mentre la capacità di decodificare da la possibilità di vedere istantaneamente il contenuto di ogni messaggio trasmesso attraverso il bus in un’acquisizione.

Gli oscilloscopi digitali Tektronix sono disponibili da Farnell


L'articolo è tratto da Debugging Serial Buses in Embedded System Designs di Gina Bonini Technical Marketing Manager @Tektronix.

Oscilloscopio digitale Tektronix MSO2024

L'oscilloscopio Tektronix (4 canali, display TFT color, 200Mhz di banda e campionamento a 1Gsps) è disponibile subito qui nello store.

 

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend