# CH390 最终结论报告 ## 结论 本轮循环调试的最终结论是: 1. 当前工程中的主要软件问题已经完成收敛和清理。 2. CH390D 驱动、lwIP `netif`、ARP 与 ICMP 基本链路已经在实机上打通。 3. 本轮最终根因已确认不是普通软件逻辑错误,而是 CH390D 相关供电滤波电容虚焊,导致供电不稳定。 ## 已完成的软件侧工作 本轮已完成并验证的事项包括: 1. 修复 PHY 访问无超时导致的永久卡死风险。 2. 修复未初始化 IWDG 句柄刷新导致的 HardFault。 3. 清理 CH390 运行时中断屏蔽范围,消除阻塞式 SPI 访问造成的运行时假死。 4. 重构 CH390 运行时所有权,避免多层并发触达底层 SPI 路径。 5. 在 `main()` 中移除重复 CH390 复位,避免启动阶段额外复位噪声。 6. 清理已确认 warning 来源,避免无效变量继续污染构建结果。 7. 增加 CH390 identity gate,避免在无效寄存器读回前继续执行默认配置和 PHY 初始化。 8. 曾增加 bit-bang 诊断读用于快速隔离问题,该临时调试路径已在当前代码中移除。 ## 实机关键证据 ### 1. MCU 自身正常工作 已验证: 1. RTT 正常输出。 2. 主循环正常运行。 3. `TIM4` 心跳正常。 4. 运行期不再出现此前已修复的 HardFault 和“长时间假死”症状。 ### 2. 最终硬件根因已定位 最终实板排查结果: 1. 板载一颗 CH390D 供电相关滤波电容存在虚焊。 2. 该问题导致 CH390D 供电不稳定,表现为寄存器读写、链路状态和报文收发在调试过程中不一致。 3. 修复硬件后,实机已观察到: - `VID=0x1C00`、`PID=0x9151`、`REV=0x2B` - PHY 寄存器稳定可读 - `lwIP netif` 能进入 `LINK_UP` - 设备可接收 ARP request 并发出 ARP reply - 设备可接收 ICMP Echo Request 并发出 Echo Reply ### 3. 历史 bit-bang 对照结果(已归档) 在早期调试中,曾绕过 STM32 硬件 SPI 外设、直接用 GPIO 软件时序读取 `VIDL/VIDH/PIDL/PIDH/CHIPR`,RTT 输出为: ```text CH390 bitbang VIDL=0xFF VIDH=0xFF PIDL=0xFF PIDH=0xFF CHIPR=0xFF ``` 该历史证据用于定位阶段,当前仅保留结论,不再保留对应代码路径。它说明: 1. 在硬件未修复前,单看软件现象会误导排查方向。 2. 电源完整性问题会放大为看似“SPI/IRQ/RX/TX 都可疑”的复合症状。 ## 外部参考对结论的支撑 对公开 CH390 / DM9051 实现的对照结果表明: 1. CH390 SPI 访问时序、模式选择和 RX SRAM 连续事务仍然值得严格对照参考实现。 2. 但本项目最终问题并非“参考实现缺失”,而是硬件供电缺陷放大了调试噪声。 3. 外部参考对软件排查有帮助,但不能替代板级供电与焊接检查。 ## 当前最可信判断 最终确认的板级问题为: 1. CH390D 供电滤波电容虚焊。 2. 该虚焊导致供电稳定性不足,从而引出不稳定的寄存器读写、链路与收发行为。 ## 版本库状态 本轮已创建一个阶段性 checkpoint commit: 1. `1808f99` `fix: harden CH390 bring-up diagnostics` 该提交记录了: 1. warning 清理 2. 移除重复复位 3. CH390 早期 identity gate 4. 链路变化稳定等待 ## 推荐的下一步 后续更高价值的工作不再是继续怀疑 CH390 是否“完全不通”,而是: 1. 在硬件问题修复后补充长时间稳定性测试。 2. 验证 TCP Server / TCP Client 业务流量与桥接逻辑在修复硬件后的行为。 3. 保持驱动层日志最小化,仅在重新排障时按需开启详细 RTT。 ## 收尾说明 本轮循环的退出条件已经满足:软件主路径已验证,且硬件根因已定位。 因此当前最合理的结论是: 1. CH390D 驱动、lwIP `netif`、ARP 和 ICMP 基本链路已在实机打通。 2. 本轮真正拦路的不是普通软件逻辑,而是板级供电滤波电容虚焊。 3. 后续应在硬件修复后的稳定板卡上继续推进应用层联调与文档收口。