ST意法半导体
直播中

王浩

7年用户 1324经验值
私信 关注
[问答]

为什么读取VL53L5CX的多字节会触发超时呢?

我们似乎无法通过 vl53l5cx_init(&Dev); 功能为VL53L5CX 。我们可以读取单个字节,但多字节 (4) 读取会触发超时,并且 ULD 无法成功加载。这是我们的 RdMulti 函数:
  • uint8_t RdMulti(
  •         VL53L5CX_Platform *p_platform,
  •         uint16_t RegisterAddress,
  •         uint8_t *p_values,
  •         uint32_t size)
  • {
  •     uint8_t DeviceAddress = p_platform->address;
  •     Wire.beginTransmission(DeviceAddress);
  •     Wire.write((RegisterAddress & 0xFF00) >> 8); //MSB
  •     Wire.write(RegisterAddress & 0x00FF); //LSB
  •     uint8_t status = Wire.endTransmission(false);
  •     if (status) { // failed
  •         return status;
  •     }
  •     uint32_t i = 0;
  •     status = Wire.requestFrom(DeviceAddress, size);
  •     if(status != size){
  •     return 1; // failed
  •     }
  •     while (Wire.available()) {
  •         p_values[i++] = Wire.read();
  •     }
  •     return 0;
  • }
这是 Arduino 的一个非常标准的多字节读取函数,所以我们有点惊讶它不起作用。似乎没有足够的诊断来确定为什么不。关于我们可能遗漏的任何想法?有什么办法可以改变超时?
除了 uint8_t error = vl53l5cx_is_alive(&Dev, &isAlive); 之外,您能否建议我们验证 I2C 通信的方法?我们谈判成功了吗?
我们在多个平台上以 100kHz 和 400kHz I2C 总线速度进行了尝试,结果相同。我们已经使用类似的多字节读取功能成功地与数十个 I2C 传感器通信,包括 VL6180X、VL53L0 和 VL53L1。不确定我们可能会遗漏什么...感谢您提供的任何建议。

回帖(1)

冯敏敏

2022-12-28 14:14:59
为了完整起见,我们现在使用这个库与 Arduino IDE 一起工作。我们不得不修改通常的多字节读/写函数来处理大的可变字节大小。管理这个的方法可能不止一种,但回购协议中的内容有效。
举报

更多回帖

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