当你把 ML307R 插到 ESP32 的 USBH_CDC 示例中,却一直卡在 “Network disconnected” 或频繁重连,很可能是以下几点原因之一,建议按“硬件 → USB 协议 → AT 驱动 → 网络配置”四个层面来逐步排查:
1. 硬件接线 与 电源 检查
-
USB 线与接口
- 确保你的 ML307R 板载 USB D+/D– 正确连到 ESP32 的对应引脚(默认示例中是 GPIO18/19,或按
usb_host_install
时指定的管脚)。 - 用示波器或万用表测量 D+/D– 拉高电阻确保有 1.5 kΩ 的上拉(USB 全速设备需 1.5 kΩ)。
- 确保你的 ML307R 板载 USB D+/D– 正确连到 ESP32 的对应引脚(默认示例中是 GPIO18/19,或按
-
电源
- ML307R 峰值发射电流可达 300 mA 左右,且还要驱动 USB PHY,务必保证 5 V→3.3 V DCDC 能提供至少 500 mA。
- 如果电压跌落,会导致模块复位或 USB 断连。
2. USB 枚举 与 协议
-
VID/PID 与 接口号
-
在日志里你看到
esp-modem: Model: User Defined esp-modem: Modem itf 3
这说明框架并没有识别到 ML307R 的“预定义” VID/PID。ESP 模块内部有一张
predefined modem list
,需要把 ML307R 的 VID/PID、接口号(interface) 和端点(endpoint) 加进去。 -
取出 ML307R 板上的 VID/PID(用
lsusb
或 Wireshark 抓 USB),然后在components/esp_modem/src/predefined/modem_list.c
中新增类似:{ .vendor_id = 0x2E8A, // 示例 VID,替换为你的实际值 .product_id = 0x0001, // 示例 PID .ifc = 3, // 从日志或抓包确认 .notif_ep = 0x8A, // Notification endpoint .in_ep = 0x82, .out_ep = 0x01, .type = ESP_MODEM_DCE_CDC_ACM, .has_dsr = false, },
-
重编译并 flash 后,日志里就能看到
Model: ML307R
而不再是User Defined
,后续 AT 驱动才能正确加载。
-
-
USB 速度
- ML307R 默认是 USB Full-Speed (12 Mbps),ESP32 USBH 需配置为全速模式:在
iot_usb_host_config_t
里确保phy_mode = USB_PHY_FS
。
- ML307R 默认是 USB Full-Speed (12 Mbps),ESP32 USBH 需配置为全速模式:在
3. AT 驱动层面
-
查看 AT 命令交互
-
打开更详细的日志:
esp_modem_set_log_level(ESP_MODEM_LOG_VERBOSE);
这样可以看到每条 AT 命令及应答,确认是否
AT
→OK
,AT+CREG?
、AT+CGATT?
、AT+CGDCONT?
等都返回正常。
-
-
重置 & DTR/RTS
- ML307R 有时需要通过 DTR 或 RTS 来触发出厂固件的 USB 复位。示例默认把 DTR 绑到 ESP32 的 GPIO12。
- 确认
config.dte_use_dtr = true; config.dte_dtr_level = 0; config.dte_rts_level = 0;
与硬件一致,否则模块可能一直在复位环。
4. 网络 & SIM 配置
-
SIM 卡状态
-
日志显示
SIM Card Ready
,但Signal quality: rssi=26, ber=99
(位错误率99%)表示无线信号非常差。请:- 换一张已知正常的 SIM 卡,或把天线插紧。
- 在天线外加 SMA 天线,确保至少 RSSI > 10dBm 且 BER < 1%。
-
-
APN 与 PDP 激活
-
默认示例里 APN 可能是空串或 “internet”,但你运营商的 APN 不同。务必在
esp_modem_dce_set_sim_apn(dce, "你的APN", "user", "pwd")
或者在启动时:esp_modem_config_t config = ESP_MODEM_DEFAULT_CONFIG(); config.dte_sim_apn = "CMNET"; // 比如中国移动
-
然后看
AT+CGDCONT?
、AT+CGACT?
确认 PDP 已激活。
-
-
运营商网络注册
-
用
AT+CREG?
、AT+CGREG?
确认已注册到网络(返回状态 1 或 5)。 -
如果长期注册失败,可尝试手动锁网:
AT+COPS=1,2,"46000" // 锁定到中国移动
-
快速排查步骤汇总
- 硬件:检查 USB 线、上拉、供电。
- USB 枚举:抓包确认 VID/PID/接口/端点,加到预定义列表并编译。
- AT 层:打开 VERBOSE 日志,看命令/应答;确认 DTR/RTS 复位逻辑。
- SIM & 网络:天线/SIM 检查,正确配置 APN,手动 AT 命令确认网络注册。
按上面四个层面逐步排除,就能锁定到底是硬件接线、USB 协议不匹配、驱动识别不到模块,还是网络/APN 配置问题。祝顺利调通!