ST意法半导体
直播中

卓侨汉

7年用户 1052经验值
擅长:MEMS/传感技术
私信 关注
[问答]

如何将两个传感器连接到同一SPI总线?

在我们的系统中,有一个 LSM6DSL 加速度计和 LPS22HH 气压计连接到同一 SPI 总线。
当加速度计的 nCS 置位 (0) 时,气压计的 nCS 置位 (1),反之亦然。
然而,由于 nCS=1(对于两个传感器)也意味着组件在 I2C 模式下工作,出现以下情况(作为示例):
  • nCS_Acc = 0, nCS_Baro = 1:尝试与加速度计通信
  • MCU (STM32F412) 通过 SPI 通信 - 它使用相关的加速器命令驱动 MOSI 和 SCLK
  • 与加速度计同时,现在处于 I2C 模式的气压计在其 SDA 和 SCL 线上接收 MOSI 和 SCLK 信号
  • 加速度计按预期对 SDO 响应 MCU MISO
  • 现在,如果气压计将与其对等方的 SPI 通信解释为有效的 I2C 地址字节,它会在 SDA 线上进行确认(与 MOSI 共享)并进行总线争用并弄乱两个传感器的通信……
我的问题是:
  • 我理解正确还是我监督了什么?
  • 我们怎样才能避免这种潜在的争用/通信混乱?









回帖(1)

杨云

2023-1-16 15:34:24
理论上你是对的,传感器之间可能会有一些不需要的串扰。但这是一个遥远的可能性。
即,请注意:


  • I2C 和SPI 是不同的协议,通常以不同的时钟速度运行,第一个需要精确的从属地址并确认有效(即触发传感器ASIC 中的数字通信块)。
  • 但是,您可以防止“误报”I2C 运行设置设备如下:


    • 对于 LSM6DSL IMU,您可以写入 CTRL4_C (13h) 寄存器的 I2C_disable 位(数据表第 63 页);
    • 对于 LPS22HH 压力传感器,您可以写入 IF_CTRL (0Eh) 寄存器的 I2C_DISABLE 位(数据表第 42页)。




举报

更多回帖

发帖
×
20
完善资料,
赚取积分