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

Der Beschleunigungsmesser BMA180 kann entweder SPI-Slave oder I 2 C-Slave sein. Die Pins für beide Busse werden geteilt.

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

Laut 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 im SPI-Bus. Es gibt auch ein anderes Gerät auf demselben Bus mit eigener Chipauswahl. Angenommen, der SPI-Busmaster kommuniziert mit diesem anderen Gerät. CSB für BMA180 ist hoch, also sollte I 2 C aktiviert sein. BMA180 sieht Taktflanken auf SCL (SPIs SCLK) und Bits auf SDA (SPIs MOSI), die vorbeifliegen. Was ist, wenn einige dieser Bits für den BMA180 wie ein Beginn einer gültigen I 2 C-Lesetransaktion aussehen und der BMA180 mit der Ausgabe von Daten beginnt und die vorhandene SPI-Transaktion behindert? Wie würde das Design von BMA180 das verhindern?

Dies ist eine Frage der Neugier. Ich habe mit diesen Problemen noch nicht experimentiert. Ich werde BMA180 auf SPI verwenden.

Jeder Vorschlag, Einblick oder Hinweis wird wirklich geschätzt!

Aktualisieren. Etwas im Datenblatt 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 die SPI-Schnittstelle verwendet wird, wird dringend empfohlen, dis_i2c auf 1 zu setzen, um Fehlfunktionen zu vermeiden.

BMA180 hat eingebautes EEPROM. Registerinhalte können im EEPROM gespeichert und beim Einschalten automatisch geladen werden. Es ist also möglich, den BMA180 dazu zu bringen, I 2 C vollständig und immer zu ignorieren.

Aktualisieren. Der L3GD20-Gyro 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 haben. Es würde also ein ODER-Gatter wie ADXL345 erfordern, das @markrages aufbrachte.

Kopf hoch! Bosch hat die Auslieferung des BMA180 eingestellt ( offizielles Schreiben hier ).

Antworten (1)

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 es emulierte zufällig einen I2C-Startcode, der ADXL345 versuchte, außer der Reihe als I2C zu sprechen. Schlechte Nachrichten.

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

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

Anscheinend will ich nicht der Einzige sein, dem das begegnet. Dieser Absatz erschien in einer späteren Überarbeitung des ADXL345-Datenblatts:

Geben Sie hier die Bildbeschreibung ein

+1 und danke! Gerade im Datenblatt gefunden, dass BMA180 ein I2C-Deaktivierungsbit hat (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.
Das ODER-Gatter deaktiviert effektiv den I2C-Modus, so dass es nicht in den Chip eingebaut ist. (Wenn der Chipdesigner den zusätzlichen Pin entbehren könnte, könnte die Situation vollständig vermieden werden.)
Ich hätte im vorherigen Post 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 den I2C für immer deaktivieren. Ich werde diesen vorherigen Kommentar umschreiben.
BMA180 hat 3x DNC/reservierte Pins. Möglicherweise werden sie bereits für Fabrikzwecke verwendet.
Mir ist aufgefallen, dass die digitalen Beschleunigungsmesser dazu neigen, untereinander Pin-kompatibel zu sein. Das könnte die ungenutzten Pins erklären. Oder Werkstest wie du sagst.