Beschleunigungsmesser BMA180. Wie gelingt es, Pins zwischen I2C und SPI zu teilen?

11

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_i2cBits 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 ).

Nick Alexeev
quelle

Antworten:

14

Ich habe genau das Verhalten gesehen, vor dem Sie Angst haben, bei einem ADXL345, der dasselbe I2C / SPI-Auswahlschema verwendet. Ich hatte ein anderes SPI-Gerät, das eine andere Taktpolarität verwendete und zufällig einen I2C-Startcode emulierte. Der ADXL345 versuchte, als I2C aus der Reihe zu sprechen. Schlechte Nachrichten.

Ich habe den SPI sorgfältig als Bit Bang umgeschrieben, anstatt das Peripheriegerät zu verwenden, und dabei darauf geachtet, die MOSI-Leitung nicht zu ändern, während die Uhr hoch war. (Dies ist die I2C-Startbedingung.) Das schien die Dinge zu lösen.

Wenn ich von vorne anfangen würde, würde ich versuchen, stattdessen den I2C-Bus oder einen dedizierten SPI-Port für den ADXL345 zu verwenden.

Anscheinend werde ich nicht der einzige sein, der dem begegnet. Dieser Absatz erschien in einer späteren Überarbeitung des ADXL345-Datenblattes:

Geben Sie hier die Bildbeschreibung ein

Markrages
quelle
+1 und danke! Im Datenblatt wurde gerade festgestellt, dass BMA180 über ein I2C-Deaktivierungsbit verfügt (siehe 7.7.11). Es ist denkbar, dass der BMA180 auch ein eingebautes ODER-Gatter hat, und es wird im Datenblatt nur nicht explizit erwähnt.
Nick Alexeev
1
Das ODER-Gatter deaktiviert den I2C-Modus effektiv, sodass es nicht in den Chip integriert ist. (Wenn der Chip-Designer den zusätzlichen Stift schonen könnte, könnte die Situation vollständig vermieden werden.)
Markrages
Ich hätte im vorherigen Beitrag nicht "zu" schreiben sollen. Mit "zu" ist "zusätzlich zum I2C-Deaktivierungsbit" gemeint. Ich habe mich auch geirrt, dass in diesem Schema das ODER-Gatter dauerhaft in den Beschleunigungsmesser-IC eingebaut werden kann. Das würde das I2C endgültig deaktivieren. Ich werde diesen vorherigen Kommentar umschreiben.
Nick Alexeev
BMA180 hat 3x DNC / reservierte Pins. Möglicherweise werden sie bereits für Fabrikzwecke verwendet.
Nick Alexeev
1
Mir ist aufgefallen, dass die digitalen Beschleunigungsmesser in der Regel stiftkompatibel sind. Das könnte die unbenutzten Stifte erklären. Oder Werkstest wie du gesagt hast.
Markrages