[嵌入式硬件开发基础与MCU选型] OK1126BJ-S 开发板测评(七):外设测试(下)

[复制链接]
9|0
怀揣少年梦 发表于 2026-10-27 09:48 | 显示全部楼层 |阅读模式

本篇实测三项外设:CAN-FD、USB 主机、SD 卡槽,另附 USB 带宽归因与存储测速口径两条通用结论。全程串口 COM25(115200)下发命令,板端跑 Buildroot + Linux 6.1.141,验证靠预编译 C 工具和 BusyBox 命令。MIPI-CSI 摄像头没有 sensor 模块、USB gadget 本轮不做。

一、CAN-FD:软件全通,收发器损坏中断

控制器与驱动先验证到位:设备树使能 can@21d40000,引脚复用选 M1 组(RX=引脚 22,TX=引脚 29),重编后只需重烧 boot 分区。

用户态第一个坑:板端 ip 是 BusyBox 精简版,不支持 type can 语法,位时序设不进去,Rockchip 官方文档(RK-KF-YF-C44)的示例命令同样跑不了。解法是自制 rtnetlink 工具 canset/canset2,直接设 IFLA_CAN_BITTIMING:

/usr/share/model/canset2 can0 500000 2000000 up
/usr/share/model/canset can0 show

回读:brp=6、tseg1=85、tseg2=13,297 MHz ÷ (6×99) = **精确 500 kbps**,采样点 86.9%(文档引用的 CiA 推荐为 87.5%),接口 UP、mtu 72、error-active,与 CANalyst-II 出厂时序(16 tq、87.5%)匹配。环回模式自发自收也正常——但这是控制器内部自 ACK 的假象,证明不了总线上有信号。

物理层接 MAX3051 收发器(3.3V,TXD→引脚 29、RXD→引脚 22)和 CANalyst-II 分析仪联调(500 kbps 标准帧、120 Ω 终端开启),双向不通:板端发帧,TEC 几秒冲到 256(无 ACK),分析仪零帧;分析仪发帧,板端 candump 同样零帧,REC 恒 0——总线始终是干净隐性电平,排除了波特率不匹配和 CANH/CANL 反接。重焊连接线、修复收发器与板子未共地、逐脚核对接线后复测依旧。软件层可查项全部排除后,故障定位到收发器本体:MAX3051 芯片损坏,总线无任何差分信号输出。手头没有备用收发器,CAN 实测到此中断。

cansend can0 123#11223344
/usr/share/model/canset can0 show | grep -E 'berr|state'
# berr counters: TEC=256 REC=0
# state: 1 (error-warning)

file-20261027094439855.png

二、USB 主机:四类设备全通

1×USB 3.0 + 3×USB 2.0/1.1,挂 xHCI/EHCI/OHCI 三控制器。四类设备枚举、挂载、读写全部通过:

设备 链路 结果
PL2731 读卡器 + SD 卡 USB 2.0 → sda 真实口径写26.4 MB/s、冷读29.5 MB/s
vivo 手机 USB 2.0 → sr0 ISO9660 虚拟光驱(内装 vivo 助手),MTP 缺 libmtp,访问不了主存储
USB 摄像头 UVC → video52 MJPG 1920×1080 抓帧有效,实测28.34 fps
Kingston U 盘 USB 3.0 →5 Gbps 读66.7 MB/s、写7.0 MB/s
lsusb; lsblk
v4l2-ctl -d /dev/video52 --set-fmt-video=width=1920,height=1080,pixelformat=MJPG \
  --stream-mmap --stream-count=1 --stream-to=/data/cam_frame.jpg

两个坑:UVC 摄像头反复开关会触发驱动锁流(VIDIOC_REQBUFS busy,只能重启恢复),测试全程只开 2 次流;手机"存储"是固件模拟的光驱,不是真实主存储。

usb-cam-frame-1920x1080.jpg

三、USB 2.0 带宽归因

读卡器链路三级瓶颈叠加:USB 2.0 协议硬顶 40~50 MB/s → PL2731(BOT 无 UASP)30~40 MB/s → SD 卡本体约 38 MB/s。实测 26.4/29.5 MB/s 已摸到读卡器水位;要更快就换 USB 3.0 读卡器或直插板载卡槽。

四、USB 3.0 对照

同一介质换口对比:裸设备冷读 29.5 → 66.7 MB/s(2.3 倍),证明瓶颈在前两级不在板端 xHCI;写速反而 26.4 → 7.0 MB/s,被 U 盘闪存本体卡死。链路走的是 BOT 不是 UASP,想吃满 5 Gbps 需换 UASP SSD。

五、存储测速口径

本轮踩坑后定的规矩,后续存储测速照此执行:

  • 写必须 conv=fsync,否则是页缓存速度(本轮 228 MB/s 假写速)
  • 读先 sync && echo 3 > /proc/sys/vm/drop_caches,否则读的是内存(1.3 GB/s 假读速)
  • 刚写完的文件即使清缓存仍可能命中盘控内部缓存(90.5 MB/s 假高),持续读以裸设备或盘内大文件冷读为准
  • 口径不同的数字不能横向对比

六、SD 卡槽

两张卡均协商 SDR104 [url=/u/198]@198[/url] MHz,热插拔正常、无需重启:

卡 识别 裸设备读 fsync 写
16 GB Class 10 SDHC SDR104 38.6 MB/s 37.3 MB/s(vfat)
64 GB A1 SDXC SDR104 84.8 MB/s(理论上限的 86%) 14.1 MB/s(FUSE exFAT)

64 GB 卡裸读逼近 UHS-I 上限,证明板端 SDIO 控制器能跑满带宽;16 GB 卡瓶颈在卡本身。14.1 MB/s 是 FUSE 用户态开销下的下限,不代表卡真实写速。持续写入场景建议 V30 以上高速卡 + ext4 分区。

七、小结

USB 主机与 SD 卡槽全通:四类 USB 设备即插即用、链路速率自动协商,SDIO 控制器能跑满 UHS-I 带宽。CAN-FD 是唯一未通项:设备树、驱动、位时序全部验证通过,物理层联调定位为 MAX3051 收发器芯片损坏,实测中断;工具已固化板端持久区 /usr/share/model/,换收发器后再补多档速率、FD 报文(canfdtest)和总线负载实测。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:一切皆有可能

59

主题

509

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部