BMA180 加速度计可以是 SPI 从机或 I 2 C 从机。两条总线的引脚是共享的。
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
根据数据表(见第 8 章),总线之间的选择是通过 CSB 引脚完成的。当 CSB 为低电平时,该设备为 SPI 从设备。当 CSB 为高电平时,该器件是一个 I 2 C 从器件。
这是我担心的故障模式。假设 BMA180 在 SPI 总线上。同一总线上还有另一个设备具有自己的芯片选择。假设,SPI 总线主机正在与其他设备通信。BMA180 的 CSB 很高,所以应该启用 I 2 C。BMA180 看到 SCL(SPI 的 SCLK)上的时钟边沿和 SDA(SPI 的 MOSI)上的位飞过。如果其中一些位在 BMA180 看来是有效 I 2 C 读取事务的开始,而 BMA180 开始输出数据并破坏现有的 SPI 事务会怎样?BMA180 的设计如何防止这种情况发生?
这是一个好奇的问题。我还没有尝试过这些问题。我将在 SPI 上使用 BMA180。
任何建议,见解或参考都非常感谢!
更新。 在数据表中找到了一些东西(参见 7.7.11)。如果通过 SPI 与 BMA180 通信,建议通过设置该位禁用 I 2 C。dis_i2c
使用 SPI 接口时,强烈建议将 dis_i2c 设置为 1,以免发生故障。
BMA180 具有内置 EEPROM。寄存器内容可以存储在 EEPROM 中,并在上电序列时自动加载。因此,可以让 BMA180 完全且始终忽略 I 2 C。
更新。 L3GD20 陀螺仪是另一个 IC,它以类似的方式在 I 2 C 和 SPI 之间共享引脚。它似乎没有用于禁用 I 2 C 模式的设置。因此,它需要一个像 ADXL345 这样的 OR 门,这是 @markrages 提出的。
小心! 博世停止发货 BMA180(此处为官方信函)。