BMA180 加速度计。它如何在 I2C 和 SPI 之间共享引脚?

电器工程 spi i2c
2022-01-13 13:57:42

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(此处为官方信函)。

1个回答

我已经在 ADXL345 上看到了您害怕的行为,它使用相同的 I2C/SPI 选择方案。我有另一个使用不同时钟极性的 SPI 设备,它碰巧模拟了 I2C 启动代码,ADXL345 试图像 I2C 一样乱说话。坏消息。

我小心地将 SPI 重写为 bit bang 而不是使用外设,确保在时钟为高电平时不要更改 MOSI 线。(这是 I2C 启动条件。​​)这似乎解决了问题。

如果我从头开始,我会尝试使用 I2C 总线或 ADXL345 的专用 SPI 端口。

显然我不是唯一一个遇到这种情况的人。这一段出现在 ADXL345 数据表的更高版本中:

在此处输入图像描述