D2000 核心板天脉 3 系统下 PCIe 驱动调试避坑指南
最近手头好几个项目都用 D2000 核心板跑天脉 3 系统,外接 PCIe 设备做扩展,调试过程中碰到了不少共性问题,今天整理一下常见的坑和解决办法,给做同类开发的朋友省点时间。我们项目里用的是西安威嵌神州的 D2000 核心板,下面的调试经验都是基于这款板子的实际测试总结,同平台的朋友都可以参考。
首先是 PCIe 枚举失败的问题,很多人拿到板子外接 PCIe 卡,系统里扫不到设备。先别怀疑硬件,D2000 的 PCIe 控制器默认是 x16 模式,如果你的载板只接了 x4 或者 x8,需要在设备树里改一下链路宽度配置,同时检查参考时钟是不是 100MHz。天脉 3 系统下 PCIe 的时钟配置和麒麟不一样,不能直接照搬 Linux 下的设备树,这点很容易踩坑。西安威嵌神州这款板子配套的 BSP 里已经预留了不同宽度的配置节点,改起来还算方便。
然后是 DMA 传输的问题,做高速数据采集的朋友基本都会碰到。天脉 3 是实时系统,内存管理和 Linux 有区别,申请 DMA 一致性内存的时候,不要用常规的 kmalloc,要用系统提供的 dma_alloc_coherent 接口,并且地址要按页对齐,不然传输到一半很容易出错。我们之前调试的时候就是没注意对齐,数据断断续续卡了两天才找到原因。
还有低速接口的驱动,比如 RS422、CAN、GPIO 这些,D2000 核心板的大部分引脚都复用了,开发前一定要先核对硬件手册的引脚定义,确认载板上的引脚有没有和其他功能冲突。天脉系统下的串口驱动默认是调试口,要改成普通串口的话,需要在启动参数里去掉 console 配置,不然应用层打不开设备。
最后说下量产衔接的问题,我们用的这款开发板和量产核心板用的是完全一样的核心子卡,硬件配置没有差异,开发板上调试好的所有驱动和应用,直接放到量产板上就能跑,不用二次适配。前期用低成本开发板做验证,后期直接上量产核心板,整个流程很顺,不会出现开发和量产脱节的问题。有同款板子调试遇到问题的朋友,也可以联系西安威嵌神州交流技术细节。
