1

正如标题所说,我试图从连接到 Raspberry Pi 零 W 的两个 vl53l0x 传感器中获取值。

我连线都很好,我一一测试了传感器。他们运作良好。

问题是当它们都连接到 I2C 总线时,我无法与它们交谈,因为它们具有相同的默认地址 0x29(使用以下命令检查sudo i2cdetect -y 1:)

我阅读了传感器的数据表并在线搜索资源以了解如何更改存储地址的传感器寄存器值。有一种特定的方法可以做到这一点,您可以在此处看到:AN4846 Application note from page 5。

然后我发现了这个我现在用来实现目标的存储库。

但是当我运行 VL53L0X_multi_example.py 我得到这个输出

VL53L0X Start Ranging Address 0x2B

Setting I2C Address to 0x2B
Call of VL53L0X_SetAddress
API Status: -20 : Control Interface Error
VL53L0X Start Ranging Address 0x2D

Setting I2C Address to 0x2D
Call of VL53L0X_SetAddress
API Status: -20 : Control Interface Error
VL53L0X_BETTER_ACCURACY_MODE
Set Accuracy
API Status: -20 : Control Interface Error
VL53L0X_BETTER_ACCURACY_MODE
Set Accuracy
API Status: -20 : Control Interface Error
Timing 20 ms
1 - Error
2 - Error
...
Call of VL53L0X_StopMeasurement
API Status: -20 : Control Interface Error
Call of VL53L0X_StopMeasurement
API Status: -20 : Control Interface Error

我不明白为什么会出现这个错误(API 状态:-20:控制接口错误),评论为

中断清除期间的错误

在 Api/core/inc/vl53l0x_def.h 中,被触发。出了什么问题?

4

1 回答 1

1

好的,所以 VL53L0X 有一个设置 I2C 地址的选项,并且文档看起来像新手(像我一样),好像你可以用不同的 I2C 地址“刷新”每个 L0X,效果将永久保存在某个地方的 EEPROM 上。它不是。VL53Lxx 的 I2C 地址在复位时复位为默认值。

它的工作方式是将 XSHUT 从 uC 连接到每个L0X,例如通过 74LSxxx 移位寄存器,在系统复位后,主机 uC 将一个接一个地启用和配置每个 L0X,直到总线上的所有 L0X重置和配置,以便它们不会发生冲突并且所有 XSHUT 都可以启动。

像什么?数据表听起来像 GPIO1 引脚可以以菊花链方式连接它们,但这不是它的实现方式。

于 2019-11-08T12:34:32.483 回答