Skip to content

第三十五周:机器人控制双串口板上调通——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 浮动噪声亦消除。真机场景无需加。

二、下一步

  1. 真机联调:ZP10S 接 pin3 跑抓放全序列,底盘走 init/drive/get/stop;
  2. 盯 pad83 的 stolen warn,反复出现就在 AP 侧 dts 禁 i2c3;
  3. rtsh 各命令和 robot.py serve 模式过一遍。

三、备注