第4周 (2026-08-03 ~ 2026-08-07)
本周工作
1. SG2002 UART1/2 回环失败 — 时钟根因定位与修复
问题:UART1 (/dev/ttyS1) 和 UART2 (/dev/ttyS2) 回环测试,TX 发送 35 字节成功,RX 收到 0 字节。短接 A18/A19 已确认物理层连通。
根因:
- CLKGEN 的
CLK_EN_1寄存器(offset 0x004)中 UART1/2 的 core clock 和 APB clock 未显式使能 - RSTC 的
SOFT_RSTN_0(offset 0x000)中 UART1/2 复位位未释放 - UART0 由 U-Boot 初始化所以正常工作,UART1/2 在内核里无人管
修复(api/src/vfs/dev/tty_serial.rs):
- 添加
CLKGEN_BASE(0x03002000) 和RSTC_BASE(0x03003000) 常量 - 添加
enable_uart1_clock_and_reset()和enable_uart2_clock_and_reset()函数 - 在
new_tty_s1()和new_tty_s2()开头调用 - 编译通过(Rust nightly-2026-01-01, riscv64gc-unknown-none-elf),生成 boot.sd (1.55MB)
2. cpumask panic 修复
现象:板子启动后立即 panic:
panicked at cpumask-0.1.0/src/lib.rs:124:9:
assertion failed: index < SIZE
根因:
axplat-riscv64-sg2002/src/init.rs中axplat::percpu::init_primary(0)曾被注释掉- per-CPU 区域未初始化 →
this_cpu_id()返回垃圾值 →cpumask::CpuMask::one_shot()硬断言失败 cpumaskcrate 更新后暴露了此问题(用的是硬断言assert!而非debug_assert!,release 也会触发)
修复:取消注释 init_primary(0),重新编译。
3. 版本管理 — boot.sd 部署状态
修复版与旧版对比:
| 版本 | 编译时间 | 大小 | MD5 | 状态 |
|---|---|---|---|---|
| boot.sd(SD卡当前) | 8/6 11:48 | 1,549,772 | f45b0c8c... | ❌ 有 cpumask panic |
| boot.sd.v2(修复版) | 8/6 12:37 | 1,549,780 | b6909a12... | ✅ 待部署 |
SD 卡文件已整理备份,部署命令已准备:
sudo cp /mnt/sde1/boot.sd /mnt/sde1/boot.sd.bak_20260807
sudo cp /home/jiangyuyue/boot.sd.v2 /mnt/sde1/boot.sd
sync
4. 电机调试进展
- PC 端 ESP32 直连验证:26/26 协议测试全部通过 ✅
- INIT/CONFIG/SET_SPEED/STOP/BRAKE/RESET 全通
- 编码器计数、ISR 触发、RPM 均正常
- 结论:ESP32 固件 100% 正常,问题在 SG2002 ↔ ESP32 的 UART 通信链路
5. Windows 平台适配
motor_debug.py双平台重写(pyserial + termios 兜底)motor_driver.pyWindows 适配完成uart_loopback.py板端回环诊断脚本新增
当前状态总览
| 组件 | PC端 | SG2002板端 |
|---|---|---|
| ESP32 + 电机 | ✅ 26/26 全通 | 🔴 UART 待验证 |
| UART 时钟修复 | — | 🔴 已改待测 |
| cpumask panic | — | 🔴 修复版待部署 |
| TPU 管线 | — | ✅ 5.2fps |
| Camera | — | ✅ 100ms 稳定 |
| Servo | — | ✅ 驱动就绪 |
下周计划
- SD 卡部署 boot.sd.v2,验证 cpumask panic 已修复
- 短接 A18/A19 跑 UART1/2 回环测试,确认时钟修复生效
- 回环通过后接回 ESP32 验证电机通信
- 全管线联调(Camera → TPU → 电机/舵机)