第三十五周:机器人控制双串口板上调通——R_UART0 查清、机械臂改走 AP 域 UART5
一、本周完成
R_UART0 串口双向贯通(底盘通道)
- 真板 RPC 链路(robot-ctl 固件 + rtsh)验证:
uwrite 0 48656C6C6F(Hello)经 USB 串口在 pin29 正确收到;USB 串口发1234到 pin32,uread 0 4读回 31323334。 驱动、pinmux、波特率、共口线物理通路全通。 - 期间排障:pin29 用逻辑分析仪测不到波形、USB 串口"只插 GND+RX 乱码、插上 TX 才 正常"、短接回环读不到数据(USB 线未拔时两路输出推拉冲突,拔线后正常)。
R_UART0 硬件特性查清(原理图 k3-com260_kit_v02 实查 + esos 官方源码对照)
- 链路:pad GPIO_122/123(1.8V 域,m0 = MMC2_DAT[3]/[2])→ BTRD04A02 四通道双向 电平转换器 → 40pin pin29(GPIO01_LS)/pin32(GPIO07_LS);与 M.2 KEY-E 槽 SDIO DATA0-3、SODIMM 跨页共网。
- 3.3V 侧无独立上拉(上拉在 pad 内部 1.8V 侧,过转换器为弱/高阻):网络悬空时 浮空/低,必须对端推挽驱动(USB TX)才有确定空闲高——这解释了 LA 直线、 "插 TX 才正常"、以及六月那轮"输入乱码随芯片而变"的电气根源。真机场景(对端 设备自带驱动)不受影响。
- mux 档位勘误:主仓 DTS(GPIO_122/123 + MUX_MODE4)与 esos 官方 com260_ifx 板级
k3-pinctrl.dtsi的 ruart0_3_cfg 逐字节一致,esos 官方固件同板输出正常 ——m4 是正确档位,此前"m3 才是 R.UART0"的旧结论作废(原理图标列表序与 mux 值存在偏移)。软串口 GPIO_113 的 MUX_MODE2 由板测(pin40 拉低)实证正确。 - 载板 V2.0 勘误"UART0 TX/RX 调换"系 X100 调试口修订,与 R.UART0 无关。
- 注意:pin29/pin32 与 M.2 KEY-E 槽共网,槽内不得插 WiFi/BT 卡(会驱动 SDIO 线,与底盘通信冲突)。
软串口(pin40):问题逐个修掉,但跨域桥过不去,放弃
- 早先怀疑 TIMER_IRQ=9 不对,查实这个假设本来就是对的,ISR 不来是另外两个 原因:softuart 节点没挂 clocks,R_GPIO 的时钟门一直关着;GPDR 是只读镜像, 置输出要走 GSDR。
- 顺带两处勘误:mux 档位比手册标注大 1(GPIO_113 的 R.GPIO[30] 实际是 MUX_MODE3,m2 下写 8 次都无效);AON_TIMER 的 match 是相对单发,计数器跑着 的时候写绝对比较值不生效,官方驱动每次都是先停、再写、再启。
- 都修好后波形出来了,但帧漂移 20-30%——每拍被中断延迟和 ISR 前缀拉长,一帧 里累积起来。这条路最终走不通:每拍"停→写→启"过一次跨域桥要 ~13.4µs,比 115200 的位宽 8.68µs 还长,校准只能修快慢偏差,省不出这 5µs。通道放弃, soft_uart 模块保留这轮的实测结论,不再注册。
机械臂改走 AP 域 UART5(TX 轮询,板验通过)
- RT24 能访问 AP 域 UART 的寄存器,但收不到它们的中断(只进 AP 侧 APLIC); ZP10S 只收不回,TX 轮询就够用。40pin 上唯一能用的 AP UART TX 是 pin3 (pad83 的 m4,网络名 I2C3_SDA,直连、不经过电平转换)。找这个脚费了功夫: 排针网络名和 pad 号对不上(网络 GPIO12 实际是 pad 127),靠原理图 SO-DIMM 表和 pin→pad 追线表才定下来。
- 时钟:APBC 里 func parent 的源随引导阶段变(BROM 配的是 14.519M,U-Boot 改成精确 14.7456M),写死任何一个都可能碰到没输出的源。改为跟着 console UART0 的 sel 走、按 MPMU 分频寄存器的实际值算除数,两个阶段板测都落在 sel=1、DLL=8。
- AP 起来后会把 pad83 重新 mux 成触摸屏 i2c3(probe 时还是对的,之后被改成 0xc046)。send() 前自查一遍 MFPR,不对就重写——每次上电偷一次,修一次就 稳定,日志里偶尔一条 warn 属正常。
- 板验:pin3 波形正常,
arm 0 150解出#000P1611T1000!。 - R_UART 和 AP 域 UART 是同一个 16550A IP,但驱动不做合并:时钟怎么开、pad 会不会被 AP 动、中断收不收得到,两边差别都大,寄存器定义重复一百行可以接受。
硬件处置(可选)
- 无设备测量/调试场景:pin29、pin32 各加 10kΩ 上拉到 pin1(VDD_3V3_SYS), 恢复 UART 空闲高电平(亦 SDIO 总线标准上拉),LA/USB 均不依赖"先插 TX"; RX 浮动噪声亦消除。真机场景无需加。
二、下一步
- 真机联调:ZP10S 接 pin3 跑抓放全序列,底盘走 init/drive/get/stop;
- 盯 pad83 的 stolen warn,反复出现就在 AP 侧 dts 禁 i2c3;
- rtsh 各命令和 robot.py serve 模式过一遍。
三、备注
- 主仓 feat/ap-uart-arm(248d6dc)
--no-ff并入 master(24e1f19),未推送; 本周子仓 rt-async 无代码改动。 - 报告会议 PPT 单独成文: 报告会议 PPT:面向异构多核 SoC 的 AMP 双内核实时系统。
- 本周调试中发现的平台问题(40pin 串口引出、上拉、引导链改 pinmux、fence/原子 固定开销等)整理成 K3 平台开发问题反馈,准备发厂商。