ESP32-S3 I2C ESP_ERR_INVALID_STATE 排查记录(未解决)

状态:未解决。 原文章「根因已定位并修复」的说法并不成立,现改为排查留档,供后续继续分析。

现象

新焊接的 ESP32-S3 主控板上,PCA9685 舵机驱动初始化失败,abort() 报 ESP_ERR_INVALID_STATE;随后 U8G2(SSD1306 OLED)初始化也出现同样报错:

1
2
ESP_ERROR_CHECK failed: esp_err_t 0x103 (ESP_ERR_INVALID_STATE)
E (1565) i2c.master: ops list is full, please increase your trans_queue_depth

环境

  • 自行焊接的 ESP32-S3 主控板,同一套代码在旧板上正常
  • I2C:GPIO4/GPIO5,外置 1kΩ 上拉,引脚连通性已用万用表确认

已排除

因素 操作 结果
物理连接 万用表测通 正常
总线速度 400kHz → 100kHz 仍报错
上电时序 纯延迟 50ms / 500ms 仍报错
trans_queue_depth 0 / 16 / 64 均报错

关键线索

  1. 初始化前调用一次 i2c_master_probe 后成功(probe 起了”预热”作用)
  2. 报错伴随 ops list is full, please increase your trans_queue_depth,但调大队列深度无效
  3. 总线扫描发现 0x40(PCA9685)和 0x70(PCA9685 ALLCALL 广播地址,非额外设备)

待分析

  • probe 的”预热”究竟改变了什么?为何增大 trans_queue_depth 无效而 probe 有效
  • 需深入 I2C 驱动源码,确认首次传输报 ESP_ERR_INVALID_STATE 的确切条件