fix: restore CH390 bridge flow and sync driver docs

This commit is contained in:
2026-04-03 05:18:02 +08:00
parent 1ef1ba9490
commit fd1fae8ad7
18 changed files with 501 additions and 178 deletions
+212
View File
@@ -0,0 +1,212 @@
# TCP2UART 工程调试指南
## 1. 适用范围
本指南面向当前 `TCP2UART` 工程,目标是指导以下调试场景:
1. `STM32F103R8T6 + CH390D` 的基础 bring-up
2. CH390D 的寄存器读写、链路检测、中断与收发调试
3. `lwIP RAW API + NO_SYS=1` 路线下的网络链路问题定位
4. UART 透传与 TCP 双链路联调
本指南默认基线:
1. 当前工程已切换为裸机主循环架构
2. CH390 运行时访问统一由 `ch390_runtime` 持有
3. 调试输出通过 `SEGGER RTT`
4. 当前代码已经通过 `MDK-ARM` 构建,且构建结果为 `0 error / 0 warning`
## 2. 当前工程调试边界
截至当前版本,工程状态应按以下层级理解:
1. MCU 启动、系统时钟、RTT、TIM4 心跳与主循环均可正常工作
2. CH390D 已恢复基础寄存器读写,不再处于“全 `0xFF` / 全 `0x0000`”阶段
3. 实机已读到可信芯片与 PHY 标识:`VID=0x1C00``PID=0x9151``REV=0x2B``PHYID1=0x7371``PHYID2=0x9011`
4. 实机已观察到主机 Realtek USB GbE 网卡为 `Connected 100 Mbps`,且设备侧 `lwIP netif` 标志包含 `LINK_UP`
5. 当前调试重点不再是“SPI 是否完全不通”,而是:
- 默认配置是否完整生效
- MAC 写入与回读是否一致
- PHY 协商、`INT/LINK/RX/TX` 是否进入正常工作态
- 网络链路与 UART 透传是否稳定协同
因此,后续调试应避免继续沿用“CH390 完全无响应”的旧结论,而应转入功能链路验证。
## 3. 代码入口与责任边界
### 3.1 启动路径
当前 CH390 相关启动链路为:
1. `main()`
2. `App_Init()`
3. `lwip_netif_init()`
4. `ethernetif_init()` / `low_level_init()`
5. `ch390_runtime_init()`
6. `ch390_gpio_init()`
7. `ch390_spi_init()`
8. `ch390_hardware_reset()`
9. `ch390_runtime_probe_identity()`
10. `ch390_default_config()`
11. `ch390_set_mac_address()` / `ch390_get_mac()`
12. `ch390_interrupt_init()`
### 3.2 运行时责任边界
当前代码约束如下:
1. `Drivers/CH390/CH390_Interface.c`
- 只负责底层 GPIO、SPI 与寄存器/内存访问
- 当前寄存器读写路径使用 `Mode 3 + bytewise exchange` 事务模型
2. `Drivers/CH390/CH390.c`
- 只负责芯片级 helper,例如 `default_config`、PHY 访问、MAC 操作
3. `Drivers/CH390/ch390_runtime.c`
- 唯一的 CH390 运行时拥有者
- 负责初始化、链路查询、IRQ 消费、RX/TX 服务
4. `Drivers/LwIP/src/netif/ethernetif.c`
- 不再直接承担复杂 CH390 运行时事务,只做 netif glue
5. `Core/Src/main.c`
- 启动后只通过 `BootDiag_ReportCh390()` 读取 runtime 提供的启动快照
调试时应优先维护这个边界,不要重新把原始寄存器访问散落回 `main.c` 或 EXTI 中断中。
## 4. 当前硬件连接事实
根据 `PCB/SCH_Schematic1_2026-03-26.pdf`CH390D 关键硬件事实如下:
1. MCU 与 CH390D 的连接关系:
- `PA4 -> CH_CS -> U4.SCS`
- `PA5 -> CH_CLK -> R10(22Ω) -> U4.SCK`
- `PA6 <- CH_SDO <- U4.SDO/MISO`
- `PA7 -> CH_SDI -> U4.SDI/MOSI`
- `PB0 <- CH_INT <- U4.INT`
- `PB1 -> CH_RST -> R8(470Ω) -> U4.RSTB`
2. CH390D 使用 `25MHz` 晶振 `X2`
3. CH390D 存在独立相关电源域:
- `VDDK`
- `AVDD33/VDDIO`
- `AVDD33`
4. CH390D 周边去耦电容包括 `C18/C20/C21/C22`
5. 原理图上未看到独立的 `MISO` 外部上拉电阻
6. 当前代码中的 `ch390_hardware_reset()` 采用:
- 复位前等待 `10ms`
- `RSTB` 拉低 `3ms`
- 释放后等待 `50ms`
调试时必须优先在 **CH390 芯片脚侧** 量测,而不是只在 MCU GPIO 侧判断。
## 5. 推荐调试顺序
### 5.1 P0:先确认基础条件
每次进入功能调试前,先确认以下最小基线:
1. `MDK` 可成功构建,且当前日志为 `0 error / 0 warning`
2. RTT 可输出启动日志
3. `BootDiag_ReportCh390()` 能打印出 `VID/PID/REV/NSR/NCR/RCR/IMR/INTCR/GPR/ISR`
4. `App_Poll()` 正常运行,LED 心跳正常
### 5.2 P1:验证 CH390 初始化状态
优先检查以下问题:
1. `ETH init: probe/default/mac/getmac/irq/done` 是否完整打印
2. `VID/PID/REV` 与 PHY ID 是否稳定、可信
3. MAC 写入与 `ch390_get_mac()` 回读是否一致
4. `RCR/IMR/INTCR/GPR` 是否进入预期工作态
5. `link_up``lwIP netif``LINK_UP` 标志是否与物理网线状态一致
如这一层失败,优先回到芯片侧量测:
1. `RSTB`
2. `CS`
3. `SCK`
4. `MOSI`
5. `MISO`
6. `VDDK / AVDD33/VDDIO / AVDD33`
### 5.3 P2:验证 IRQ 与链路检测
在基础寄存器读写可信后,重点验证:
1. `PB0/EXTI0` 是否能接收到 CH390 的 `INT`
2. `ISR_LNKCHG` 发生时,`ch390_runtime_poll()` 是否正确更新链路状态,不再依赖阻塞式 `HAL_Delay(65)`
3. `ethernetif_check_link()``ch390_runtime_check_link()` 的结果是否一致
4. 必须区分“启动快照中的 `g_diag.link_up`”与“主循环中实时更新后的 `netif->flags & NETIF_FLAG_LINK_UP`
### 5.4 P3:验证 RX/TX 数据通路
`link_up` 可信后,再继续验证数据通路:
1. 先确保主机网卡与设备处于同一子网;当前联调基线曾使用主机 `192.168.31.1` 与设备 `192.168.31.x`
2. `ch390_runtime_input()` 是否能稳定读取 `RX SRAM`
3. `rx_status / rx_len` 是否合理
4. `ch390_runtime_output()` 是否能正确等待 `TCR_TXREQ` 清零并发送帧
5. 网络端与 UART2/UART3 透传是否联通
### 5.5 P4:验证系统级联调
最终再验证:
1. TCP Server 与 UART2 双向透传
2. TCP Client 与 UART3 双向透传
3. 配置保存、复位与 MAC 生效路径
4. 长时间运行稳定性
## 6. 推荐的现场观测点
### 6.1 软件观测点
优先关注以下函数与状态:
1. `BootDiag_ReportCh390()`
2. `ch390_runtime_probe_identity()`
3. `ch390_runtime_init()`
4. `ch390_runtime_poll()`
5. `ch390_runtime_check_link()`
6. `ch390_runtime_input()`
7. `ch390_runtime_output()`
### 6.2 硬件观测点
优先关注 CH390 芯片脚侧:
1. `RSTB`
2. `SCS`
3. `SCK`
4. `SDI/MOSI`
5. `SDO/MISO`
6. `INT`
7. `VDDK`
8. `AVDD33/VDDIO`
9. `AVDD33`
10. `XI/XO`
## 7. 常见误区
调试当前工程时,应避免以下误区:
1. 不要再直接沿用“CH390 恒为全 `0xFF`”这一过时结论
2. 不要在 `main.c`、IRQ、netif 多处重新插入原始 CH390 访问
3. 不要在没有芯片脚侧证据前,只凭 MCU 侧 GPIO 就认定 `RST/CS/SCK/MISO` 正常
4. 不要在基础寄存器读写尚不可信时,直接调高层 `TCP/UART` 业务逻辑
5. 不要把一次性的 bring-up 实验代码长期留在正式启动路径中
## 8. 当前推荐结论表达方式
当需要向项目成员同步当前状态时,推荐使用如下表述:
1. 当前工程软件架构已稳定在 `bare-metal + lwIP RAW + ch390_runtime 单一拥有者`
2. 当前 CH390D 已恢复基础寄存器读写,调试重点已转入初始化完整性、链路、中断与收发功能
3. 硬件验证仍必须以 CH390 芯片脚侧波形与电源域量测为准
4. 上层 `TCP/UART` 联调应建立在 CH390 初始化、链路与供电稳定三者都可信之后
5. 本项目已确认过一次真实硬件根因:CH390D 供电滤波电容虚焊会直接表现为网络收发异常
## 9. 建议配套文档
建议与本指南配套阅读:
1. `项目技术实现.md`
2. `CH390D_硬件检查指南.md`
3. `uart-ch390-debug-handoff.md`
4. `PCB/SCH_Schematic1_2026-03-26.pdf`