第二十八周工作总结
概述
上周完成了 K3 RT24 启动机制的全链路调研,结论是"rt-async 可直接复用官方 esos.itb 打包链,无需自实现唤醒逻辑"。本周从调研转入实体板硬件实操,目标是把加载链在真实 K3 板子上跑通,并先点亮 RT24 的 UART 通路。
进展与遇到的问题:
- 串口线踩坑:官方盒装串口线经环回测试确认损坏,换自制线后成功刷机。
- RT24 UART 输出已通、输入异常:RT24 (rcpu) 的 UART 输出正常,但输入存在字符错误,初步怀疑串口转换芯片驱动能力不足,仍在排查。
- 加载链最小化验证:用极简的
simplehello.elf替换esos在 rcpu1 上的固件,验证"自定义程序能否被 SPL 唤醒并在 RT24 上执行",仍在调试。
1. 串口线问题(环回测试定位硬件故障)
用官方盒装串口线连板子,刷机与交互时好时坏、数据乱码。将串口线 TX/RX 短接做环回自收发测试,结果发送字节与接收字节对不上,确认线缆(或其内部 USB 转串口芯片/接线)存在物理故障。
- 官方盒装串口线确认为坏件,弃用;改用自制线后刷机成功,后续 UART 调试均基于自制线。
2. RT24 UART 输出已通 / 输入字符错误(排查中)
| 方向 | 状态 | 说明 |
|---|---|---|
| RT24 → 主机(输出) | ✅ 正常 | RT24 经 R_UART0 发送的字符主机能正确接收 |
| 主机 → RT24(输入) | ⚠️ 异常 | 主机下发到 RT24 的字符存在错码/丢字符 |
输出方向完全正常、输入方向出错,初步怀疑串口转换芯片驱动能力不足:输出由板载 UART 驱动发送、转换芯片接收(链路负担轻);输入由转换芯片驱动发送、板载 UART 接收,若芯片驱动能力弱(电平摆率/驱动电流不足),可能导致板载端采样出错。
待排查:换不同型号 USB 转串口线对比;用示波器/逻辑分析仪抓输入波形;核对波特率分频与采样点是否与 R_UART(PXA-UART)预期一致。
3. 加载链最小化验证:simplehello.elf 替换 rcpu1 固件
理论上一条"把任意 ELF 塞进 rcpu1-fw 节点即可在 RT24 上跑"的结论上周已成立,但未在真实硬件上验证过。本周编写极简 simplehello.elf(仅最小启动初始化 + UART 循环输出,不依赖任何 RTOS/中断/复杂驱动),替换 esos.itb 中 rcpu1 固件节点重打包,观察 RT24 核 1 是否被唤醒并执行输出。
为何先不上 rt-async:rt-async 启动涉及 __Start、trap、PLIC、定时器、内存布局等多重环节,若直接替换后无响应,无法区分"加载链没通"还是"rt-async 自身初始化失败"。simplehello.elf 把变量降到最少——只要它在 RT24 上输出,就证明加载链是通的。仍在调试中,卡点下周补充。
4. 本周在 K3 迁移中的位置
对应 项目计划-20260528 K3 适配第一阶段,与上周"下周计划"对齐:
| 上周计划项 | 本周状态 |
|---|---|
| 在 R_UART0 看到 rt-async 启动日志 | 🟡 UART 输出已通(simplehello 验证),输入待修;rt-async 本体未上板 |
用 esos_rt24_sign.its 打包自定义 ELF | 🟡 打包链跑通,simplehello 替换调试中 |
实现 PXA-UART Chip::put_str + CCU 时钟使能 | ⏳ 待加载链验证通过后推进 |
加载链(SPL → rproc → RT24)是整个迁移的地基,本周用 simplehello 把地基单独夯实——地基不通,后续改址、PXA-UART 驱动、PLIC 适配都是空中楼阁。
5. 下周计划
- 定位 UART 输入字符错误根因:换线对比 + 波形抓取,确认是否串口芯片驱动能力问题。
- 跑通 simplehello 在 RT24 上的加载与执行,打通最小加载链。
- 加载链验证通过后,启动
modules/chip-k3-rt24/,实现 PXA-UARTChip::put_str+ CCU 时钟使能。 - 目标:在 R_UART0 看到 rt-async 自身的启动日志(而非 simplehello)。