4.3 KiB
4.3 KiB
CH390 最终结论报告
结论
本轮循环调试的最终结论是:
- 当前工程中的主要软件问题已经完成收敛和清理。
- CH390D 仍然无法建立可信通信,但最新证据已不再支持“继续修改普通软件逻辑即可修好”的判断。
- 更可信的当前根因方向是硬件/总线/器件侧无响应。
已完成的软件侧工作
本轮已完成并验证的事项包括:
- 修复 PHY 访问无超时导致的永久卡死风险。
- 修复未初始化 IWDG 句柄刷新导致的 HardFault。
- 清理 CH390 运行时中断屏蔽范围,消除阻塞式 SPI 访问造成的运行时假死。
- 重构 CH390 运行时所有权,避免多层并发触达底层 SPI 路径。
- 在
main()中移除重复 CH390 复位,避免启动阶段额外复位噪声。 - 清理已确认 warning 来源,避免无效变量继续污染构建结果。
- 增加 CH390 identity gate,避免在无效寄存器读回前继续执行默认配置和 PHY 初始化。
- 曾增加 bit-bang 诊断读用于快速隔离问题,该临时调试路径已在当前代码中移除。
实机关键证据
1. MCU 自身正常工作
已验证:
- RTT 正常输出。
- 主循环正常运行。
TIM4心跳正常。- 运行期不再出现此前已修复的 HardFault 和“长时间假死”症状。
2. 硬件 SPI 读 CH390 恒为全 0xFF
RTT 实测:
TCP2UART boot
ETH init: gpio
ETH init: spi
ETH init: reset
ETH init: probe
ETH init: invalid chip id
CH390 VID=0xFFFF PID=0xFFFF REV=0xFF NSR=0xFF LINK=0
CH390 NCR=0xFF RCR=0xFF IMR=0xFF INTCR=0xFF GPR=0xFF ISR=0xFF
3. 历史 bit-bang 对照结果(已归档)
在早期调试中,曾绕过 STM32 硬件 SPI 外设、直接用 GPIO 软件时序读取 VIDL/VIDH/PIDL/PIDH/CHIPR,RTT 输出为:
CH390 bitbang VIDL=0xFF VIDH=0xFF PIDL=0xFF PIDH=0xFF CHIPR=0xFF
该历史证据用于定位阶段,当前仅保留结论,不再保留对应代码路径。它说明:
- 问题不再像单纯的
SPI1模式寄存器或 HAL 事务实现错误。 - 即使 MCU 直接软件驱动
CS/SCK/MOSI,CH390 端仍未给出有效响应。
外部参考对结论的支撑
对公开 CH390 / DM9051 实现的对照结果表明:
- 工作实现普遍使用
mode 0与1-bit command + 7-bit address事务模型。 - packet SRAM 连续事务在这些实现中通常是一次完整 burst,而不是随意拆成多个碎片事务。
- 这些信息对后续软件兼容性优化仍有价值。
- 但它们更适用于“基础寄存器读写已经成立之后”的阶段。
- 对“开机就连
VID/PID都全0xFF”这一症状,公开实现并不支持把根因优先归到 packet SRAM 分帧之类的高层软件问题。
当前最可信判断
当前更可信的方向是以下一种或多种板级问题:
CS没有真正选中 CH390。MISO没有被 CH390 主动驱动,处于悬空上拉高状态。RST在 CH390 芯片引脚侧没有真正达到有效复位/释放条件。- CH390 电源、内部数字核、PHY 供电或相关时序不满足器件进入 SPI 可响应状态的条件。
- 芯片本体损坏,或者焊接/连线仍有隐患。
版本库状态
本轮已创建一个阶段性 checkpoint commit:
1808f99fix: harden CH390 bring-up diagnostics
该提交记录了:
- warning 清理
- 移除重复复位
- CH390 早期 identity gate
- 链路变化稳定等待
推荐的下一步
此后不建议继续盲目修改普通软件逻辑。更高价值的下一步应是板级取证:
- 抓取
CS/SCK/MOSI/MISO/RST/INT的实际波形。 - 确认 CH390 芯片引脚侧
RST真实状态,而不是只看 MCU 端 GPIO 输出假设。 - 确认
MISO是否被器件主动驱动,而不是上拉或悬空导致读到全高。 - 确认供电、地、焊接、封装方向、芯片型号与原理图一致。
收尾说明
本轮循环的退出条件已经满足“确定软件无明显剩余普通逻辑问题,而更像硬件存在问题”。
因此当前最合理的结论不是“CH390 软件已经完全正确”,而是:
- 软件侧已经做到了足够强的隔离和验证。
- 继续在没有新硬件证据的前提下反复改驱动,收益已经明显下降。
- 应转入硬件/总线取证阶段。