目的:在 i2c 从设备软件端设置地址。
示例:3 个传感器具有相同的地址 0x29。通过某种方法sensor1设置0x22,sensor2设置0x25,sersor3设置0x28。
信息:我有 3 个具有相同 i2c 地址的类似设备。 i2c 从设备是带有 BeagleBone Black debian 操作系统的 VL53L0X (TOF) 传感器。通信通过sys/ioctl.h
和进行linux/i2c-dev.h
。
示例代码:
#include <sys/ioctl.h>
#include <linux/i2c-dev.h>
ioctl(open("/dev/i2c-2", O_RDWR), I2C_SLAVE, 0x29);
谢谢你!!
答案1
这VL53L0X 数据表第 18-19 页指定可以通过对设备中相应寄存器进行简单的写入操作来更改设备的 I2C 地址。请注意,示例中的 I2C 地址 0x29 与数据表中的 0x52 相同,但数据表地址值左移一位,以将 I2C 读/写位包含在最低有效位位置。
但由于多个 VL52L0X 器件最初都具有相同的地址,因此必须有一种方法来独立控制每个 VL53L0X 芯片的复位信号。必要的过程描述于VL53L0X 的 AN4846 应用笔记。简而言之,应该有两个 GPIO 引脚分别直接或通过某些 GPIO 扩展器芯片连接到每个 VL53L0X 芯片。您需要检查您的硬件设计,找出它们在其中的布线位置。
寄存器编号显示在VL50L0X 的 C 编程 API 包(免费,但需要使用有效的电子邮件地址注册)。在API包中查找VL53L0X_REG_I2C_SLAVE_DEVICE_ADDRESS
in文件。VL53L0X_1.0.4/Api/core/inc/vl53l0x_device.h
en.STSW-IMG005_v1.0.4.zip