Eseguire il debug di I2C con l’ADP3450

I2C, o circuito inter-integrato, è un bus di comunicazione seriale di uso comune, single-edge, a commutazione di pacchetto, inventato all’inizio degli anni ’80 per semplificare la comunicazione con le periferiche. Con I2C sono necessarie solo due linee di bus: la linea seriale dei dati (SDA) e la linea seriale di clock (SCL) con due resistenze di pull-up, semplificando i requisiti di progettazione dell’hardware.

La velocità di comunicazione originale di 100 kbps è sufficiente per la maggior parte delle applicazioni; tuttavia, la “modalità veloce” (fast mode) di 400 kbps consente di raggiungere velocità di trasferimento più elevate.

La capacità di analizzare con precisione l’interfaccia I2C è fondamentale per il debug hardware dei sistemi embedded. Gli oscilloscopi, gli analizzatori di protocollo e gli analizzatori logici sono tutti strumenti che consentono di individuare problemi di natura elettrica nei dispositivi che codificano i dati binari in forme d’onda fisiche. Spesso gli ingegneri dei sistemi embedded dovranno alternare l’uso di questi dispositivi come strumenti da banco dedicati o sceglierne tra di essi. L’ADP3450 è un eccezionale oscilloscopio di serie a segnale misto, con quattro canali di oscilloscopio ad alta risoluzione, due trigger di input esterni e 16 pin di I/O digitali. Utilizzando l’ADP3450 e il suo strumento di scripting personalizzato del segnale all’interno dell’interfaccia utente WaveForms, gli utenti possono sia pilotare e analizzare in digitale con un analizzatore logico e di protocollo, sia comprendere rapidamente la qualità del segnale con un oscilloscopio ad alta risoluzione.

Questo manuale inizia con una discussione sulle basi di I2C come protocollo e sulle applicazioni dei bus I2C, prima di illustrare i vantaggi dell’uso di un oscilloscopio, di un analizzatore logico e di un analizzatore di protocollo per eseguire il debug di I2C. Si conclude con un esempio, utilizzando il visualizzatore di protocollo e l’analizzatore logico dell’ADP3450 per generare segnali I2C personalizzati e visualizzare le transazioni per l’analisi e il debug.

Comprensione del protocollo I2C

Poiché l’I2C è un bus seriale, tutti i dati viaggiano su un’unica linea di dati (a differenza delle linee multiple presenti nei bus paralleli). Le linee bidirezionali di dati e di clock sono open-drain, una caratteristica che consente l’impiego di più master o più slave (fino a 128) con lo stretching (Figura 1). Ciò significa che i dispositivi master e slave I2C possono pilotare solo

le linee di dati e di clock basse, oppure lasciarle aperte. I resistori di pull-up (tra 1 k_ e 10 k_) “tirano” su la linea fino a Vcc (5V, 3,3V o 1,2V); in caso contrario, il dispositivo I2C master/slave la tira giù con driver open drain o FET. Questi resistori di pull-up generano le caratteristiche forme d’onda a dente di sega tipiche dell’I2C, che mostrano le cariche e le scariche della linea sui bordi ascendenti e discendenti del dente di sega.

Figura 1: connessione I2C che mostra lo stretching o il funzionamento di più slave. Lo stretching può rallentare le comunicazioni mantenendo bassa la linea di clock seriale (SCL).

Applicazioni di bus I2C

I2C solitamente sfrutta dispositivi a bassa velocità come microcontrollori (MCU), periferiche di I/O, chip di controllo delle ventole, EEPROM, convertitori analogico-digitali (ADC), convertitori digitale-analogici (DAC) e altre periferiche più piccole nei sistemi embedded. Poiché il protocollo utilizza solo due fili, è particolarmente adatto a schede con molte interconnessioni.

Questo si può applicare a tutto, dai dispositivi IoT per polling/ricezione dei dati dei sensori fino ai circuiti di alimentazione degli FPGA per scalare la potenza in funzione della frequenza di clock del processore.

Funzionamento di I2C

Il protocollo I2C consiste in un bit di avvio, bit di indirizzo dello slave, un bit di lettura/scrittura (R/W), byte di dati, un bit di acknowledge (ACK), un bit di no-acknlowedge (NACK), un bit di stop e un bit di re-start (Figura 2). Le fasi della comunicazione sull’interfaccia I2C sono le seguenti:

1. Il dispositivo master fornisce una condizione di avvio (il bit di start) per iniziare la comunicazione e informare tutti i dispositivi slave di “ascoltare” la linea dati per le istruzioni.

2. Il dispositivo master invia l’indirizzo del dispositivo slave di destinazione e un flag R/W.

3. Il dispositivo slave con l’indirizzo slave corrispondente risponde con acknowledgement (ACK) o con un no-acknowledgement (NACK).

4. Se viene ricevuto un ACK, la comunicazione tra il master e lo slave procede in modalità di lettura o di scrittura sul bus dati. Il trasmettitore invia 8 bit di dati al ricevitore, che quindi risponde con un ACK. Quando la comunicazione è completa, il master invia un comando di stop. Se viene ricevuto un NACK, il trasferimento viene interrotto e il master invia un bit di stop per terminare la comunicazione.

I2C come forma d’onda

Il bit di start che dà inizio alle comunicazioni appare come un passaggio da alto a basso su SDA mentre SCL è alto. Dopodiché, il dispositivo master invia l’indirizzo dello slave con un bit R/W finale. I bit di indirizzo sono in formato a 7 o 10 bit. Il bit R/W è l’ottavo bit del byte di indirizzo, dove il valore basso corrisponde a “scrittura” e quello alto a “lettura” nell’indirizzo a 7 bit. Nell’indirizzo a 10 bit la scrittura è costituita da due byte e la lettura da tre byte.

L’acknowledgement (ACK) del dispositivo slave avverrà al nono impulso SCL, dove la linea SDA è bassa. In questo caso, la linea SDA è abbassata perché il dispositivo ricevente sta trasmettendo. Tuttavia, un NACK apparirà sul nono impulso SCL con la linea SDA ancora alta.

Ciò è dovuto al fatto che lo slave non riesce a trasmettere e non riesce a portare a livello basso la linea dati. A comunicazione completa, il master invia il bit di stop. Questo bit di stop è sempre definito come una transizione da basso ad alto nella linea SDA mentre la linea SCL è alta.

Figura 2: Protocollo di comunicazione I2C.

I vantaggi dell’utilizzo di un oscilloscopio, un analizzatore logico e un analizzatore di protocollo per eseguire il debug di I2C

La capacità di analizzare con precisione l’interfaccia I2C è fondamentale per il debug hardware dei sistemi embedded. Gli oscilloscopi, gli analizzatori di protocollo e gli analizzatori logici sono tutti strumenti che permettono di capire i problemi di natura elettrica dei dispositivi tramite:

• Forme d’onda fisiche

• Visualizzazione esadecimale, ASCII e binaria dei dati del protocollo

• Decodifica del protocollo

Un oscilloscopio offre un’analisi delle forme d’onda dell’interfaccia I2C, mostrando più facilmente problemi quali jitter, rumore e il rapporto segnale/rumore (SNR). Gli oscilloscopi sono eccellenti per visualizzare i seguenti problemi del bus I2C:

• Tempi di salita lenti

• Diafonia (falsi picchi sulla linea di clock)

• Livelli di tensione insolitamente elevati per SDA nello stato basso

• Massicci undershoot

Questo permette agli ingegneri di vedere facilmente dove e perché la linea SDA potrebbe non essere adeguatamente spinta a un livello di tensione basso o alto. Questi problemi spesso corrispondono direttamente un problema di circuito, come una resistenza di pull-up inadeguata o FET di pulldown deboli negli slave I2C.

La diafonia, invece, indica la presenza di capacitanza parassita tra le tracce SDA e SCL, mentre i massicci undershoot rivelano un’induttanza parassita su una delle linee di clock o di dati [1].

Tuttavia, questa è una prospettiva di basso livello delle comunicazioni I2C; gli ingegneri dovranno spesso decodificare i messaggi inviati a diversi dispositivi, che potrebbe comportare il noioso compito di contare i bit manualmente. Per una migliore risoluzione dei problemi di comunicazione, è utile visualizzare il contenuto decodificato di questi pacchetti. È qui che gli analizzatori di protocollo e logici si rivelano utili, consentendo agli ingegneri di visualizzare i dati decodificati con pacchetti di facile interpretazione e non con singoli flussi di bit.

Spesso gli ingegneri dovranno alternare l’uso di questi dispositivi come strumenti da banco dedicati o scegliere tra di essi. L’ADP3450 è un eccezionale oscilloscopio di serie a segnale misto, con quattro canali di oscilloscopio ad alta risoluzione, due trigger di input esterni e 16 pin di I/O digitali. Utilizzando l’ADP3450 e il suo strumento di scripting personalizzato del segnale all’interno dell’interfaccia utente WaveForms, gli utenti possono sia pilotare e analizzare in digitale con un analizzatore logico e di protocollo, sia comprendere rapidamente la qualità del segnale con un oscilloscopio ad alta risoluzione.

Utilizzo dell’area di lavoro del visualizzatore di protocollo I2C dell’ADP3450

Sia l’analizzatore logico che l’analizzatore di protocollo dell’ADP3450 possono essere utilizzati nell’area di lavoro del visualizzatore di protocollo per eseguire le seguenti operazioni:

1. Generare segnali I2C nello strumento di scripting personalizzato dell’analizzatore di protocollo

2. Visualizzare le transazioni I2C come valori esadecimali con l’analizzatore logico

L’ADP3450 può essere utilizzato con lo strumento “Protocollo” di WaveForms per lavorare con protocolli di comunicazione da I2C e UART a SPI e CAN. Queste transazioni possono essere ricevute, trasmesse o rilevate dall’ADP3450 utilizzando uno qualsiasi dei 16 I/O digitali a una frequenza di campionamento di 100 megacampioni (MS/s). In questo modo, l’ADP3450 può essere usato come dispositivo I2C master o slave. Come master, l’ADP3450 è in grado di generare transazioni che inducono la risposta desiderata dai circuiti collegati. Lo strumento di scripting personalizzato consente di creare sequenze di transazioni I2C.

L’analizzatore di protocollo utilizza le stesse risorse hardware dell’analizzatore logico, consentendo l’uso simultaneo di questi strumenti. L’analizzatore logico può configurare i 16 canali di I/O digitali per catturare gli stati logici alti e bassi nelle comunicazioni I2C. Il contenuto decodificato dei pacchetti I2C viene visualizzato con questo strumento.
Ciò può avvenire sui pin collegati con una frequenza di campionamento fino a 125 MS/s con tensioni standard di 5 V, 3,3 V e 1,2 V. Gli elevati segnali logici a 5 V si ottengono quando i canali sono configurati in ingresso. Gli stati dei segnali, i valori decodificati del bus e i protocolli decodificati possono essere utilizzati per attivare l’acquisizione dell’analizzatore logico.
Per I2C, questi attivatori di protocollo includono l’inizio della trasmissione, il comando di stop e il contenuto del pacchetto che corrisponde a un valore. e il contenuto di un pacchetto che corrisponde a un valore.

Questa sezione del manuale descrive le configurazioni hardware e software necessarie per il funzionamento del visualizzatore di protocollo I2C.

Configurazione hardware

L’ADP3450 può essere collegato a un computer o a un portatile tramite USB per avviare il processo di debug.

La Figura 3 mostra la configurazione tipica di una connessione I2C con due resistenze di pull-up da 1 k_ a 5 k_ tra l’alimentazione e le linee seriali di clock e di dati. Ciò porta il segnale ad un livello alto con l’alimentazione dell’ADP3450. Idealmente, entrambe le resistenze dovrebbero essere da 4,7k_, ma il protocollo può gestire una gamma di valori compresi tra 1 e 5k_. Le resistenze devono essere collegate tra l’alimentazione e le due linee di dati.

Figura 3: Configurazione hardware per una connessione I2C con l’ADP3450.

Configurazione software

Per scaricare l’area di lavoro WaveForms, andare a I2C Protocol Viewer Workspace ZIP

Archive. Dopo l’apertura di WaveForms, il software host genererà un prompt in cui verrà richiesto di passare al dispositivo utilizzato con l’area di lavoro. Poiché si tratta del dispositivo originariamente utilizzato quando l’area di lavoro è stata creata e archiviata, selezionare “No”. Navigare a Impostazioni ? Gestione dispositivi sulla barra dei menu nella parte superiore della finestra, per verificare che il dispositivo attivo sia il vostro dispositivo Discovery.

Figura 4: Gestione dispositivi consente di verificare che il dispositivo attivo sia il vostro dispositivo Discovery.

Fare clic sul pulsante “Open Workspace” nella scheda Welcome per navigare e aprire l’area di lavoro “i2c-protocol-viewer” in WaveForms.

Figure 5: Navigazione nell’area di lavoro “i2c-protocol-viewer”.

Funzionamento del visualizzatore di protocollo I2C

Ora che l’area di lavoro è pronta per l’uso, è possibile configurare il visualizzatore di protocollo per eseguire uno script personalizzato. La tensione di uscita per gli alimentatori è configurata per 3,3 V, indipendentemente dai dispositivi utilizzati. Per portare le linee I2C su valori elevati, abilitare gli alimentatori facendo clic sulla freccia verde (pulsante Run) nella scheda “Supplies”. Premere il pulsante “Single” nella scheda Logic, quindi premere il pulsante “Execute” nella scheda Protocol. Nella Figura 6, l’Analizzatore logico visualizza i valori decimali dei codici ASCII per “Hello World!”. Modificando semplicemente il contenuto dell’array ASCII e l’argomento dell’indirizzo della chiamata Write, è possibile inviare valori diversi a uno dei vari dispositivi slave I2C sullo stesso bus.

È importante notare che l’Analizzatore di protocollo deve essere messo in modalità di debug per disabilitare la capacità dell’Analizzatore di protocollo di ricevere dati. Ciò consente all’utente di visualizzare i dati attraverso l’Analizzatore logico mentre utilizza l’Analizzatore di protocollo. Tuttavia, se questo spazio di lavoro viene usato per ricevere dati attraverso l’Analizzatore di protocollo, il pulsante di debug dovrà essere deselezionato.

Figura 6: Strumento dell’editor di script presente nell’analizzatore di protocollo che visualizza la frase “Hello World!” da codificare, convertire e scrivere all’indirizzo (a sinistra). Lo strumento dell’analizzatore logico (a destra) visualizza i valori decimali dei codici ASCII di “Hello World!”.

Note finali

L’ADP3450 può essere utilizzato per trasmettere, ricevere e rilevare le transazioni I2C attraverso l’Oscilloscopio, l’Analizzatore di protocollo e l’Analizzatore logico. Ciò rende l’ADP un potente strumento per il debug delle comunicazioni I2C tra dispositivi master e slave multipli oppure per l’utilizzo dell’ADP stesso come dispositivo master, per controllare/trasmettere messaggi a uno o più slave.

La serie Analog Discovery PRO 3000 è disponibile presso Distrelec Italia, distributore autorizzato Digilent.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Menu