Velocità e affidabilità minima del clock I2C


12

Esiste un clock rate minimo specificato da I2C? So che la frequenza di clock più utilizzata è 100kHz e esiste una modalità "veloce" di 400kHz supportata da alcuni dispositivi e una modalità più veloce ma supportata da altri dispositivi (penso 1MHz?). Dal momento che il segnale SCK viene generato dal master, presumo che si possa operare a una velocità molto più lenta di qualsiasi di quelli: esiste un limite inferiore nella pratica? In che misura i dispositivi slave si preoccupano della frequenza di clock (ad esempio, è comune che abbiano timeout brevi)? Il motivo per cui mi chiedo è che mi chiedo se è possibile eseguire I2C su una distanza maggiore (ad es. 20 piedi) per programmare le EEPROM I2C in modo affidabile in una configurazione del tester di produzione. Suppongo che non funzionerà in modo affidabile su quella distanza alle velocità dei dati standard.


La modalità Hi-Speed ​​consente un clock da 3,4 MHz a max. Capacità del bus 100 pF.
Stevenvh,

Risposte:


16

No, non esiste una frequenza minima, la frequenza di clock minima è 0 o CC. Vedere le specifiche , pagina 48.

Ma dovrai prestare attenzione ai tempi di salita e di discesa. Quelli hanno un massimo di 1000 ns e 300 ns, rispettivamente. E un cavo più lungo, con una certa capacità, influenzerà i bordi, indipendentemente dalla frequenza.

È quella capacità, insieme alle resistenze di pull-up che determineranno il tempo di salita. Il tempo di caduta non è un problema perché il FET che tira la linea in basso ha una resistenza molto bassa, e quindi anche la costante del tempo di caduta sarà molto bassa. Quindi ci resta il tempo di salita. Per ottenere un tempo di salita di 1000 ns su un cavo da 200 pF, le resistenze pull-up non dovrebbero essere più grandi di 2,2 kΩ. (tempo di salita al 90% del valore finale.)

inserisci qui la descrizione dell'immagine

Il grafico mostra la massima resistenza al pull-up (in Ω) rispetto alla capacità del cavo (in pF) per ottenere fronti di salita di 1000 ns. Si noti che i dispositivi I2C non devono assorbire più di 3 mA, quindi a 3,3 V la capacità del bus non dovrebbe essere superiore a circa 395 pF, altrimenti la resistenza di pull-up dovrebbe essere inferiore a 1100 Ω e consentire più rispetto ai 3 mA. Queste sono le linee tratteggiate verdastre. Per un funzionamento a 5 V la capacità consentita è pari a 260 pF, per un valore di pull-up di 1667 Ω (le linee tratteggiate viola).


Chi dice che il dispositivo I2C può assorbire al massimo 3mA? I miei dispositivi I2C hanno VOL = 0,4 V per IOL = 20mA. Ciò significa che può assorbire molta più corrente, quindi le resistenze di pull-up possono essere più piccole. Ciò causa la possibilità di gestire più capacità. @stevenvh
Kono,

Un esempio sono gli schiavi Arduino. Possono affondare fino a 10mA prima di VOL = 0,4-0,5V. Ciò significa che possono guidare autobus con carichi molto più elevati.
Kono,

La maggior parte dei dispositivi I2C può effettivamente affondare solo 3mA, ma al giorno d'oggi ci sono molti più dispositivi con più capacità di assorbimento. Fortunato!
Kono,

4

Ho eseguito I2C a circa 100Hz senza alcun problema. Come ha detto @stevenvh, preoccupati solo della velocità massima e della capacità della linea.


2
Ho i2c a passo singolo. Ciò non garantisce che tutti i dispositivi che trovi saranno realizzati in questo modo, ma tecnicamente non c'è nulla che ne impedisca il funzionamento "fino a CC".
Gbarry,

4

Dovresti essere in grado di risolvere i problemi di lunghezza della linea con un'attenta selezione di driver e adattamento dell'impedenza.

Un'altra opzione, supponendo che il lungo periodo faccia parte dell'installazione e non del prodotto, potrebbe essere quella di utilizzare qualcosa che gestisca bene la distanza come RS422 (o praticamente anche RS232) per parlare con un microcontrollore posto nel connettore del cablaggio di prova, che quindi parlerebbe di i2c a una distanza abbastanza breve dal bersaglio.

Oppure potresti farlo probabilmente senza l'intelligenza, usando una piccola scheda che collegava un protocollo di segnalazione differenziale con i ricevitori di trigger Schmidt da e verso la segnalazione i2c sul bersaglio.

Le tue corse probabilmente non sono abbastanza lunghe da richiedere tempi di propagazione del segnale (assenza di problemi di assestamento) che richiedono frequenze di clock particolarmente lente per evitare di girare il bus mentre i vecchi dati sono ancora in volo.

Naturalmente vorrai fare una verifica di lettura dei dati che hai appena programmato.

Solo per fare un confronto, i monitor VGA IIRC hanno una lettura ID i2c (o è simile a i2c), che probabilmente funziona ancora se aggiungi un cavo di prolunga da 6 piedi al cavo da 3 o 4 piedi di serie.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.