状态:未解决。 原文章「根因已定位并修复」的说法并不成立,现改为排查留档,供后续继续分析。
现象
新焊接的 ESP32-S3 主控板上,PCA9685 舵机驱动初始化失败,abort() 报 ESP_ERR_INVALID_STATE;随后 U8G2(SSD1306 OLED)初始化也出现同样报错:
1 | ESP_ERROR_CHECK failed: esp_err_t 0x103 (ESP_ERR_INVALID_STATE) |
环境
- 自行焊接的 ESP32-S3 主控板,同一套代码在旧板上正常
- I2C:GPIO4/GPIO5,外置 1kΩ 上拉,引脚连通性已用万用表确认
已排除
| 因素 | 操作 | 结果 |
|---|---|---|
| 物理连接 | 万用表测通 | 正常 |
| 总线速度 | 400kHz → 100kHz | 仍报错 |
| 上电时序 | 纯延迟 50ms / 500ms | 仍报错 |
| trans_queue_depth | 0 / 16 / 64 | 均报错 |
关键线索
- 初始化前调用一次
i2c_master_probe后成功(probe 起了”预热”作用) - 报错伴随
ops list is full, please increase your trans_queue_depth,但调大队列深度无效 - 总线扫描发现 0x40(PCA9685)和 0x70(PCA9685 ALLCALL 广播地址,非额外设备)
待分析
- probe 的”预热”究竟改变了什么?为何增大 trans_queue_depth 无效而 probe 有效
- 需深入 I2C 驱动源码,确认首次传输报
ESP_ERR_INVALID_STATE的确切条件