i2c 多个内部地址?
i2c multiple internal addresses?
我对 I2C 协议比较陌生,我必须为我拥有的特定传感器编写一个 C++ 库。我正在使用 raspberry pi 接口和 wiringpi(i2c 组件)来处理低级通信。这是一个非常标准的库(read8bits、read16bits、readbuffer,写入相同,支持寄存器操作)所以我需要做的就是特定的、更高级别的传感器操作并将传感器数据导出到主项目。
但是我有一个问题,这个特定的传感器是一个 10DOF IMU 传感器
(https://www.waveshare.com/product/10-DOF-IMU-Sensor-C.htm) - 它提供温度压力加速度计磁力计和陀螺仪信息 - 我已经设法让压力和温度传感器报告得很好,但 MPU 组件很奇怪......
因此传感器注册了两个 I2C 地址,一个用于 pressure/temperature,一个用于 accelerometer/magnetometer/gyroscope。
Waveshare 有一个 C 库,我用它来了解传感器的工作原理,并且由于某种原因,该库正在写入不同的地址(与注册地址不同)。这个特定的传感器注册了两个地址,0x77 和 0x68,我用 i2cdetect 检查了这些地址,但查阅了代码,它有一个用于陀螺仪和加速度计的特定地址,以及一个用于磁力计的单独地址(再次为 0xD0、0x18),它们应该是相同的。
那么对注册地址以外的地址做read/writes正常吗?那行得通吗?我错过了什么?
MPU-9255
实际上是2个独立的I2C设备,加速度计和陀螺仪在I2C地址0x68
(或0x69
上访问,具体取决于[=14=的逻辑电平] 引脚),在 I2C 地址 0x0C
.
上访问磁力计
加速度计和陀螺仪 I2C 地址在 MPU-9255 product specification 的第 7.2 节中介绍。磁力计I2C地址在4.11节
您在代码中看到的值(0xD0
和 0x18
)移动了 1,这为 I2C read/write 位留出了空间。
0x68 << 1 = 0xD0
0x0C << 1 = 0x18
我对 I2C 协议比较陌生,我必须为我拥有的特定传感器编写一个 C++ 库。我正在使用 raspberry pi 接口和 wiringpi(i2c 组件)来处理低级通信。这是一个非常标准的库(read8bits、read16bits、readbuffer,写入相同,支持寄存器操作)所以我需要做的就是特定的、更高级别的传感器操作并将传感器数据导出到主项目。
但是我有一个问题,这个特定的传感器是一个 10DOF IMU 传感器 (https://www.waveshare.com/product/10-DOF-IMU-Sensor-C.htm) - 它提供温度压力加速度计磁力计和陀螺仪信息 - 我已经设法让压力和温度传感器报告得很好,但 MPU 组件很奇怪...... 因此传感器注册了两个 I2C 地址,一个用于 pressure/temperature,一个用于 accelerometer/magnetometer/gyroscope。 Waveshare 有一个 C 库,我用它来了解传感器的工作原理,并且由于某种原因,该库正在写入不同的地址(与注册地址不同)。这个特定的传感器注册了两个地址,0x77 和 0x68,我用 i2cdetect 检查了这些地址,但查阅了代码,它有一个用于陀螺仪和加速度计的特定地址,以及一个用于磁力计的单独地址(再次为 0xD0、0x18),它们应该是相同的。
那么对注册地址以外的地址做read/writes正常吗?那行得通吗?我错过了什么?
MPU-9255
实际上是2个独立的I2C设备,加速度计和陀螺仪在I2C地址0x68
(或0x69
上访问,具体取决于[=14=的逻辑电平] 引脚),在 I2C 地址 0x0C
.
加速度计和陀螺仪 I2C 地址在 MPU-9255 product specification 的第 7.2 节中介绍。磁力计I2C地址在4.11节
您在代码中看到的值(0xD0
和 0x18
)移动了 1,这为 I2C read/write 位留出了空间。
0x68 << 1 = 0xD0
0x0C << 1 = 0x18