Der Beschleunigungsmesser BMA180 kann entweder ein SPI-Slave oder ein I 2 C-Slave sein. Die Pins für beide Busse werden gemeinsam genutzt.
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
Gemäß Datenblatt (siehe Kapitel 8) erfolgt die Auswahl zwischen Bussen über den CSB-Pin. Wenn CSB niedrig ist, ist das Gerät ein SPI-Slave. Wenn CSB hoch ist, ist das Gerät ein I 2 C-Slave.
Hier ist ein Fehlermodus , über den ich mir Sorgen mache. Angenommen, BMA180 befindet sich auf dem SPI-Bus. Auf demselben Bus befindet sich auch ein anderes Gerät mit eigener Chipauswahl. Angenommen, der SPI-Bus-Master kommuniziert mit diesem anderen Gerät. CSB für BMA180 ist hoch, daher sollte I 2 C aktiviert werden. BMA180 sieht Taktflanken auf SCL (SPIs SCLK) und Bits auf SDA (SPIs MOSI) vorbeifliegen. Was ist, wenn einige dieser Bits für BMA180 wie ein Start einer gültigen I 2 C- Lesetransaktion aussehen und BMA180 Daten ausgibt und die vorhandene SPI-Transaktion blockiert? Wie würde das Design von BMA180 das verhindern?
Dies ist eine Frage der Neugier. Ich habe noch nicht mit diesen Problemen experimentiert. Ich werde BMA180 auf SPI verwenden.
Jeder Vorschlag, jede Einsicht oder Referenz wird wirklich geschätzt!
Aktualisieren. Im Datenblatt etwas gefunden (siehe 7.7.11) . Es wird empfohlen, I 2 C durch Setzen des dis_i2c
Bits zu deaktivieren , wenn mit BMA180 über SPI kommuniziert wird.
Wenn eine SPI-Schnittstelle verwendet wird, wird dringend empfohlen, dis_i2c auf 1 zu setzen, um Fehlfunktionen zu vermeiden.
BMA180 verfügt über ein eingebautes EEPROM. Registerinhalte können im EEPROM gespeichert und beim Einschalten automatisch geladen werden. So ist es möglich, dass BMA180 I 2 C vollständig und immer ignoriert .
Aktualisieren. Der L3GD20-Kreisel ist ein weiterer IC, der auf ähnliche Weise Pins zwischen I 2 C und SPI teilt . Es scheint keine Bit-Einstellung zum Deaktivieren des I 2 C-Modus zu geben. Es würde also ein ODER-Gatter wie ADXL345 erfordern, das @markrages aufgerufen hat.
Kopf hoch! Bosch hat den Versand von BMA180 eingestellt ( offizieller Brief hier ).