Perché la necessità di più porte I²C?


19

Il protocollo I²C consente, in teoria e con indirizzamento a 7 bit, di collegare al master fino a 127 dispositivi. Si tratta di un numero elevato, quindi perché un microcontrollore a basso costo (ad esempio questo PIC24 ) dovrebbe avere più di una porta I²C? Perché è necessario?

Risposte:


23

Disposizione del mozzo del sensore

In questo scenario, ci sono due bus I²C. Chiamiamoli bus locale e bus principale . Lo scopo del bus locale è quello di collegare un gruppo di sensori a un microcontrollore (μC). Lo scopo del μC è di sondare i sensori, aggregare le informazioni da essi e rilevare determinati eventi. Un μC in tale ruolo è chiamato hub sensore . L'hub del sensore non è responsabile per le funzioni di ordine superiore; c'è un potente processore principale per questo. Il bus principale collega l'hub del sensore al processore principale. Pertanto, l'hub del sensore μC è un master sul bus I²C locale e uno slave sul bus principale I²C.

SPI e I²C

Il PIC collegato nel post originale non condivide i pin tra SPI e I²C. Tuttavia, ci sono altri PIC che usano gli stessi pin per hardware SPI e I²C, perché entrambi sono implementati con la stessa periferica MSSP. Se un PIC ha due periferiche MSSP separate, una può essere utilizzata per SPI hardware, mentre l'altra è utilizzata per I²C hardware.


21

Un motivo molto comune per richiedere più di un bus è disporre di dispositivi che funzionano a velocità diverse. Inizialmente, I²C funzionava a un massimo di 100 kHz. Successivamente, la velocità è stata aumentata a un massimo di 400 kHz e, successivamente, a 1 MHz e oltre.

Il problema è che, poiché l'indirizzo di ciascun dispositivo è incorporato nel protocollo I²C, quindi se hai dispositivi con velocità diverse sullo stesso bus, diciamo 100 kHz e 400 kHz, devi sempre far funzionare il bus alla velocità più bassa comune a tutti i dispositivi sullo stesso bus (100 kHz in questo caso).

Se si esegue il bus alla velocità più elevata (400 kHz), ovviamente il dispositivo a velocità inferiore non funzionerebbe correttamente e potrebbe persino interpretare l'indirizzo del dispositivo ad alta velocità come proprio, causando il guasto del dispositivo a 400 kHz come bene. Ma anche se inizialmente si eseguisse il bus a 100 kHz e si tentasse quindi di accelerare il bus a 400 kHz dopo aver indirizzato un chip a velocità più elevata, sarebbe possibile (sebbene probabilmente improbabile) per il chip a velocità inferiore interpretare uno dei i pacchetti di dati ad alta velocità erroneamente come il suo indirizzo, e quindi confondere la comunicazione sul bus. In entrambi i casi, al termine dell'interscambio con il dispositivo a 400 kHz, il dispositivo a 100 kHz sarebbe probabilmente in uno stato sconosciuto.

Quindi è più efficiente, se hai dispositivi che funzionano a velocità diverse e hai più porte I²C e hai i pin di riserva per consentire tale lusso, avere un I²C dire per i dispositivi a 100 kHz, un altro per i dispositivi a 400 kHz e un altro per dispositivi da 1 MHz, a seconda delle esigenze.

Questo non è un problema con SPI perché ogni dispositivo è abilitato (indirizzato) nell'hardware da una linea di selezione chip separata. Quindi la velocità di clock può essere adattata alla velocità del chip selezionato (10 MHz, 20 MHz, qualunque cosa) senza avere alcun effetto su altri chip sullo stesso bus, poiché non sono abilitati.


19

Inoltre potrebbe consentire di supportare due dispositivi con lo stesso indirizzo. Sì, la maggior parte dei dispositivi ti consente di selezionare forse i due bit inferiori del loro indirizzo con cinghie. Di recente ho dovuto supportare 4 dispositivi che consentivano ciascuno di impostare l'LSB del proprio indirizzo con un resistore. Avere due porte significa per me nessun costo aggiuntivo.

Forse voglio che uno sia il master per un gruppo di dispositivi e presenti l'altro come porta slave, quindi il mio master non deve aspettare per afferrare il bus per darmi un comando mentre eseguo il polling di un sensore di temperatura per il 10.000 ° tempo.

Sembra che ci siano un sacco di altre buone risposte in questa discussione, aggiungendo solo i miei 2 centesimi.


9

Velocità.

Se dovessi accedere a due dispositivi I2C contemporaneamente, potresti avere un conflitto significativo. Oppure, uno dovrebbe aspettare l'altro.


9

In secondo luogo, I²C può essere utilizzato per ottenere una maggiore larghezza di banda (è possibile ricevere o inviare due byte contemporaneamente).

Se si dispone di un ADC che funziona in modo continuo, un I²C è sempre occupato.

Anche il cambio di indirizzo richiede del tempo, quindi in alcuni casi è possibile utilizzare due porte per due dispositivi ed evitare cambi di indirizzo per risparmiare tempo.


0

Altri hanno menzionato molti motivi per farlo, ne aggiungerò uno:

Hai un sacco di dispositivi I2C 5V e un sacco di dispositivi I2C 3V3.

Ad esempio, ho un micro 3.3V che ha due porte I2C, una tollerante 5V, l'altra solo 3V3.


Per curiosità, che micro è?
Nick Alexeev

1
LPC4330, ecco un estratto del manuale: "Pad I / O digitale tollerante a 5 V a drain aperto, compatibile con le specifiche Fast Mode Plus del bus I2C. Questo pad richiede un pull-up esterno per fornire funzionalità di uscita. Quando viene spento, questo il pin collegato al bus I2C è mobile e non disturba le linee I2C. "
Peufeu,
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.