MLX90640 EEPROM地址与寄存器地址映射
图中EEPROM地址 0x240F 中低字节是设备的I2C地址0x33,其对应的寄存器地址是0x8010。
MLX90640 修改I²C地址
- MLX90640的I²C地址可以通过编程其EEPROM中的特定位来更改。每个MLX90640传感器在出厂时都被设置为默认地址(0x33),但用户可以通过更改EEPROM中的配置来设定不同的地址,最多可支持127个不同的地址。
- 第一种修改方法是通过向EEPROM的特定地址写入新的I²C地址,来修改MLX90640的I²C地址。该方法修改后需重新上电。
void Chage_MLX90640_addr(uint16_t new_addr){
uint16_t data;
// 初始化IIC
Wire.setPins(MLX_SDA_PIN, MLX_SCL_PIN);
mlx.begin(MLX90640_I2CADDR_DEFAULT, &Wire);
//erase
mlx.MLX90640_I2CWrite(MLX90640_I2CADDR_DEFAULT, 0x240F, 0x00);
delay(100);
mlx.MLX90640_I2CRead(MLX90640_I2CADDR_DEFAULT, 0x240F, 1, &data);
printf("设备地址%02X\r\n", (uint8_t)data);
// 写入新地址
if(!mlx.MLX90640_I2CWrite(MLX90640_I2CADDR_DEFAULT, 0x240F, new_addr)){
Serial.println("MLX90640 地址更新成功\r\n");
}
delay(100);
// 读出新地址
mlx.MLX90640_I2CRead(MLX90640_I2CADDR_DEFAULT, 0x240F, 1, &data);
printf("新地址%02X\r\n", (uint8_t)data);
}
- 第二种方法是通过对应的寄存器地址0x8010,写入新的I²C地址。该方法修改即生效,但是断电不保留。
//new_addr :0xBEXX
void Chage_MLX90640_addr(uint16_t new_addr){
uint16_t data;
// 初始化IIC
Wire.setPins(MLX_SDA_PIN, MLX_SCL_PIN);
mlx.begin(MLX90640_I2CADDR_DEFAULT, &Wire);
// 写入新地址
mlx.MLX90640_I2CWrite(MLX90640_I2CADDR_DEFAULT, 0x8010, new_addr);
delay(10);
// 读出新地址
mlx.MLX90640_I2CRead((uint8_t)new_addr, 0x8010, 1, &data);
printf("新地址%X\r\n", data);
}
注意事项
- 修改地址前,请确认所选地址不与系统中已有的其他I²C设备地址冲突。
- 修改EEPROM是有限次数的,频繁修改可能会损害EEPROM。
欢迎在评论区留下你的问题或建议,让我们共同进步!