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_i2c
bit, 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 ).