Accelerometro BMA180. Come riesce a condividere i pin tra I2C e SPI?


11

L'accelerometro BMA180 può essere uno slave SPI o uno I 2 C. I pin di entrambi gli autobus sono condivisi.

SPI mode                    I2C mode
---------------------------------------------------
SDI  input                  SDA  bidirectional (!)
SDO  output                 ADDR address bit, input
SCLK input                  SCL  input
CSB  chip select, input     I2C  mode select, input

Secondo la scheda tecnica (vedere il capitolo 8) , la selezione tra bus viene effettuata tramite il pin CSB. Quando CSB è basso, il dispositivo è uno slave SPI. Quando CSB è alto, il dispositivo è uno slave I 2 C.

Ecco una modalità di errore , di cui sono preoccupato. Supponiamo che BMA180 sia sul bus SPI. C'è anche un altro dispositivo sullo stesso bus con la propria selezione di chip. Supponiamo che il master del bus SPI stia comunicando con quell'altro dispositivo. CSB per BMA180 è alto, quindi è I 2 C dovrebbe essere abilitato. BMA180 vede i bordi dell'orologio su SCL (SPI's SCLK) e i bit su SDA (SPI's MOSI) che volano. Che cosa succede se alcuni di questi bit sembrano BMA180 come l'inizio di una transazione di lettura I 2 C valida e BMA180 inizia a produrre dati e blocca la transazione SPI esistente? In che modo il design di BMA180 lo impedirebbe?

Questa è una questione di curiosità. Non ho ancora sperimentato questi problemi. Userò BMA180 su SPI.

Qualsiasi suggerimento, approfondimento o riferimento è molto apprezzato!

Aggiornare. Trovato qualcosa nel foglio dati (vedi 7.7.11) . Si consiglia di disabilitare I 2 C impostando il dis_i2cbit, se si comunica con BMA180 tramite SPI.

Quando si utilizza l'interfaccia SPI, si consiglia vivamente di impostare dis_i2c su 1 per evitare malfunzionamenti.

BMA180 ha EEPROM incorporato. I contenuti del registro possono essere archiviati nella EEPROM e caricati automaticamente alla sequenza di accensione. Quindi, è possibile fare in modo che BMA180 ignori I 2 C completamente e sempre.

Aggiornare. Il giroscopio L3GD20 è un altro circuito integrato che condivide i pin tra I 2 C e SPI in modo simile. Non sembra avere un po 'di impostazione per disabilitare la modalità I 2 C. Quindi, richiederebbe un gate OR come ADXL345, che @markrages ha mostrato.

Dritta! Bosch ha smesso di spedire BMA180 ( lettera ufficiale qui ).

Risposte:


14

Ho visto esattamente il comportamento di cui hai paura su un ADXL345, che utilizza lo stesso schema di selezione I2C / SPI. Avevo un altro dispositivo SPI che utilizzava una diversa polarità dell'orologio e mi è capitato di emulare un codice di avvio I2C, l'ADXL345 ha provato a parlare fuori turno come I2C. Cattive notizie.

Ho riscritto attentamente l'SPI come bit bang invece di usare la periferica, assicurandomi di non cambiare la linea MOSI mentre l'orologio era alto. (Questa è la condizione iniziale di I2C.) Sembrava risolvere le cose.

Se stavo iniziando da zero, proverei invece a utilizzare il bus I2C o una porta SPI dedicata per ADXL345.

Apparentemente non sono l'unico a trovarlo. Questo paragrafo è apparso in una successiva revisione del foglio dati ADXL345:

inserisci qui la descrizione dell'immagine


+1 e grazie! Ho appena scoperto nel foglio dati che BMA180 ha un bit di disabilitazione I2C (vedi 7.7.11). È plausibile che anche il BMA180 abbia un gate OR incorporato e non è esplicitamente menzionato nel foglio dati.
Nick Alexeev

1
Il gate OR disabilita effettivamente la modalità I2C, quindi non è integrato nel chip. (Se il progettista del chip potesse risparmiare il pin extra, la situazione potrebbe essere completamente evitata.)
Markrages il

Non avrei dovuto scrivere "troppo" nel post precedente. Con "troppo" intendevo "oltre al bit di disabilitazione I2C". Ho anche sbagliato che in questo schema, il gate OR può essere permanentemente integrato nell'IC accelerometro. Ciò disabiliterebbe definitivamente l'I2C. Riscriverò quel commento precedente.
Nick Alexeev

BMA180 ha 3 pin DNC / riservati. Può essere, sono già utilizzati per scopi di fabbrica.
Nick Alexeev

1
Ho notato che gli accelerometri digitali tendono ad essere pin-compatibili tra loro. Ciò potrebbe spiegare i pin non utilizzati. O test di fabbrica come hai detto.
segna il
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.