Monitor di linea I2C

Il bus I2C viene spesso utilizzato per la comunicazione tra circuiti integrati. Talvolta è utile sapere quali dati vengono inviati su tale canale. Il circuito qui descritto legge i dati I2C e li invia, tramite USB, a un PC che li visualizza sullo schermo in formato esadecimale. A richiesta, i dati possono essere filtrati per una selezione d'indirizzi specifici.

Introduzione

Il bus I2C è costituito da due linee di segnale: il clock SCL e la linea dati SDA. I dati vengono trasmessi serialmente. Un messaggio è composto da due o più byte, ognuno seguito da un bit di riconoscimento. Una sequenza di avvio indica l'inizio del messaggio, una sequenza di arresto lo chiude. La frequenza di clock nella "modalità standard" del bus I2C è di 100 kHz, con una velocità di trasmissione dati di 20 kB al secondo. In modalità veloce è di 80 kB al secondo. Nell'applicazione qui descritta, un pacchetto di 64 byte per millisecondo viene inviato tramite USB. Questo è sufficiente per leggere i dati dal bus I2C in modalità standard, ma non adatto per la modalità veloce.

L'hardware

La figura 1 mostra lo schema del lettore di bus di dati I2C. Si notano i due microcontrollori. Il PIC16F1455 (U2) è utilizzato per leggere i dati I2C e inviarli al PC via USB. Il modulo I2C di questo controller è configurato come RX slave per raccogliere tutti i dati da qualsiasi indirizzo. Tuttavia, ciò accade solo se è presente il bit di scrittura dei dati in entrata. Quando il bit di lettura è impostato, tutti i dati vengono ignorati. Inoltre, le informazioni di conferma non possono essere lette.

Figura 1: schema elettrico completo del lettore di bus dati I2C

Figura 1: schema elettrico completo del lettore di bus dati I2C

Il PIC16F15313 (U1) converte ogni bit "letto" in un bit "di scrittura". I bit di lettura e il riconoscimento vengono rimossi dal flusso di dati e passati separatamente al PIC16F1455. Quest'ultimo manda tali informazioni al PC tramite USB. U1 è un PIC dotato di quattro celle logiche configurabili (CLC). La figura 2 mostra come esse sono configurate per questo progetto.

Figura 2: la configurazione dei CLC in U1 per questo progetto

Figura 2: la configurazione dei CLC in U1 per questo progetto

Il microcontrollore PIC16F1455 include l'interfaccia USB completa. L'oscillatore interno è sufficientemente preciso e non risulta necessario un cristallo di quarzo esterno. Il microcontrollore memorizza tutti i byte ricevuti nelle posizioni di memoria corrette e dopo aver ricevuto un numero di dati sufficienti, essi vengono inviati al PC. Il firmware per entrambi i processori è scritto in assembly. Le temporizzazioni critiche sono, quindi, accuratamente sotto controllo. Anche la configurazione del modulo USB è scritta in linguaggio assembly. Questa parte del firmware è stata originariamente fornita dalla Microchip. Il circuito richiede poca energia elettrica. Attinge l'alimentazione direttamente dalla connessione USB del PC. Il circuito contiene componenti SMD su un piccolo PCB a doppia faccia, con una dimensione di 14 per 33 mm (vedi figura 3).

Figura 3: il lato superiore e inferiore del PCB basato su componenti SMD

Figura 3: il lato superiore e inferiore del PCB basato su componenti SMD

Firmware e software

Il "Timer0" di U1 genera un bit che azzera il read-bit (vedi figura 4). Nel listato 1 è mostrato come CLC2 e imposta il read-bit su '0'. Il segnale SDA modificato è collegato all'uscita RA4. Essa è un'uscita "open-drain" con resistenza di pull-up esterna. U2 restituisce sempre, infatti, un segnale di conferma (ACK) dopo aver ricevuto un byte. L'input di U2 diventa poi un'uscita.

Listato 1
banksel CLC2GLS0 ; TMR0 ANDed with SDA clears bit 8
movlw 2
movwf CLC2GLS0
movwf CLC2GLS1
movwf CLC2GLS2
movlw 4
movwf CLC2GLS3
movlw 1 ; SDA input signal
movwf CLC2SEL0
movlw 0ch ; TMR0 overflow
movwf CLC2SEL1
clrf CLC2SEL2
clrf CLC2SEL3
clrf CLC2POL
movlw 82h
movwf CLC2CON

L'informazione letta è disponibile all'uscita di CLC3 e viene instradata su RA0. Poiché il segnale SDA è leggermente ritardato dal CLC, per mantenere la sincronizzazione corretta, anche il segnale SCL deve essere ritardato con CLC4. Un piccolo programma controlla il timer e legge il bit di conferma per RA2.

Figura 4: i segnali attorno a U1 indicano dove viene rimosso il read-bit

Figura 4: i segnali attorno a U1 indicano dove viene rimosso il read-bit

La figura 5 mostra l'interfaccia utente grafica (GUI) del software per PC. La barra di stato indica se il lettore di bus dati I2C è collegato e riconosciuto o meno. Il pulsante "Avvia acquisizione" inizia a leggere i dati I2C. Il LED del lettore si illumina di verde. Il pulsante di avvio diventa ora la funzione di arresto. I dati del bus I2C vengono visualizzati nella finestra, dove "S" sta per Start, "R" per Read, "W" per Write, "A" per Acknowledge, "N" per "No Acknowledge" e "P" per "stoP". I byte dei dati sono visualizzati in formato esadecimale.

Figura 5: l'interfaccia utente è molto chiara e dotata di alcune utili funzionalità

Figura 5: l'interfaccia utente è molto chiara e dotata di alcune utili funzionalità

Il software consente di filtrare, in forma esadecimale o binaria, i primi due byte. Quando essi sono specificati, saranno visualizzati solo i dati che iniziano con questi byte. Se "Post Acquisition" è selezionato, l'acquisizione dei dati inizia solo dopo il ricevimento dei byte specificati. La dimensione del buffer è di circa 40 kbyte. Se esso sta per riempirsi, parte dei dati all'inizio sono cancellati. Il controllo "Arresta quando buffer pieno" impedisce d'interrompere l'acquisizione dei dati in quel momento. Il LED verde si spegne non appena l'acquisizione si interrompe. Se sono presenti troppi dati, l'acquisizione dei dati s'interrompe e il LED rosso si accende. Il software ritorna alla situazione di partenza. I dati nella finestra del registro rimangono intatti finché non vengono eliminati o finché il buffer non si riempie. Attraverso il menu "File" è possibile salvare i dati della finestra su disco rigido. La visualizzazione continua dei dati è pesante e carica un po' il sistema operativo Windows. Pertanto si raccomanda di non eseguire contemporaneamente altri programmi sul PC.

Utilizzo

Prima di poter utilizzare il lettore di bus dati I2C, è necessario installare il driver USB. Quando si collega il lettore al PC tramite il Cavo USB, il PC vede un nuovo dispositivo. Nel download dell'articolo [1], è incluso nella directory del driver un file .inf . Si deve selezionare questo file quando il PC lo richiede. Il driver verrà installato automaticamente. Per installare l'interfaccia utente, occorre fare doppio clic sul programma Setup.exe, che è anche disponibile nel download all'indirizzo [1] e si seguano le istruzioni sullo schermo.

Conclusioni

La particolarità del lettore di dati bus I2C descritto nell'articolo è la sua capacità di leggere i dati finché è necessario, cioè per un tempo illimitato . Questo consente di rilevare errori che si verificano raramente.

Web link

[1] Articolo: https://www.elektormagazine.com/magazine/elektor-88/42454

 

Elektor Post

Scrivi un commento

Send this to a friend