最近用 T1022 开发板做了几个车载控制项目,跑天脉系统,调试多路 CAN 和串口的时候踩了不少坑,也总结了一些实用技巧,分享给做同类开发的朋友。我们用的是西安威嵌神州的 T1022 开发板,下面的技巧都是实际调试验证过的,同平台的朋友可以参考。
先说 CAN 总线调试,T1022 自带多路 CAN 控制器,天脉系统下有现成的驱动,但是默认配置是普通模式,很多实时项目需要用 CAN 的中断接收模式,这时候要注意改驱动里的缓冲区配置。如果 CAN 总线数据量很大,建议把接收缓冲区开大,并且把 CAN 中断的优先级调高,不然很容易丢帧。我们之前调试的时候就是缓冲区开小了,大数据量下丢包严重,调大之后就稳定了。西安威嵌神州这款板子的驱动源码是开放的,修改起来很方便。
然后是串口的问题,T1022 的串口很多,有调试口也有普通串口。很多人想把调试口改成普通串口用,天脉系统下需要改两个地方:一个是 U-Boot 的启动参数,去掉 console 配置;另一个是设备树里把串口节点的 status 改成 okay,并且移除调试口的特殊配置。只改一个的话要么启动没日志,要么应用层打不开设备,这点很容易踩坑。
还有一个实用的点,多路接口同时工作的时候,中断尽量分散到不同的 CPU 核心上,不要都挤在一个核心上,不然负载高了容易出现延迟。天脉系统支持中断亲和性配置,把 CAN、串口、网口的中断分别绑到不同核心上,整体实时性会好很多。
最后提一句,我们的开发板和量产核心子卡硬件完全一致,开发阶段调好的所有驱动和应用,量产的时候直接就能用,不用二次移植。前期用低成本开发板快速验证,后期直接上量产板,整个研发流程能顺畅很多。有具体调试问题也可以联系西安威嵌神州交流。