CAN总线接口

DEL中CAN总线

测试CAN总线接口

首先,编译一个带有CAN支持的内核和文件系统,并在文件系统中集成can_test测试例程。

在CC53中,内核配置选择默认已经开启CAN总线支持,可以参考下面步骤检查一下,用户仍需在应用程序模板中勾选can_test以便把例程添加到文件系统中。

右键单击项目,选择配置项目,参考ESP中DEL帮助文档9.9章节,把内核配置成支持CAN总线,并把can_test集成到rootfs当中。



在应用程序模板中选中的应用程序会拷贝源码到build/apps,用户可以更改源码来生成自己所需的测试代码,或者是作为模板参考来开发自己的应用程序。

保存项目配置,然后编译,编译完成后,用“Install Project”来生成文件系统。

完成后,在/tftpboot目录上,就有新编译生成的内核和文件系统镜像,可以烧录到flash中。

ConnectCard i.mx28是一个多复用的精简引脚的微型嵌入式核心板,这使得它足够小巧,这也意味着对内核的裁减需要注意避免复用同一接口两种功能。查看CC28的复用情况,可以根据DEL的帮助文档,并配合HRM中的IOMUX表格。我们需要在复用引脚中仅启用一种功能,以避免接口功能冲突导致编译失败或接口功能无法使用。

在DEL的帮助文档中,有关CAN总线的部分,提到:

也就是如果需要CNA1,那么就要在内核配置中禁掉UART3。

其它方面和CC53基本上做法相同。

请参考DEL固件更新的方法进行对模块进行固件更新。

测试前的硬件准备 首先看一下HRM和开发板的原理图,了解电平情况和终端电阻情况 从CC53 HRM可知,CAN接口的引脚从53出来是2.775V,开发板上的J7和J9接上时,分别对应CAN1和CAN2相当于接上120欧终端电阻,其中X31是一个对应CAN1的DB9接口,在DB9引脚中中分别是2-CAN1L,3-GND,6-GND,7-CAN1H。X21是CAN2接口的排针,针脚定义同DB9。 下图是原理图,用到一个SN65HVD233片子,其供电是3.3V(3.15V)。百度一下这个片子是TI的CAN收发器。

本次测试用的是若比特USB-CAN通讯模块V2

默认是把CAN驱动编译到内核,所以DEL启动后已经加载了相关驱动。如果当初是选择编译为可加载模块,那么

#modprobe flexcan 

您可以用下面命令查看驱动命令是否加载,以决定是否需要运行上述命令。

#dmesg |grep can 

在DEL系统中,CAN总线的设置位于/sys/devices/platform/FLEXCAN.0,默认的速率是500Kbps,如果和测试软件上的不匹配,比如你的测试软件只支持250Kbps,可以用下面命令更改

#echo 250000 /sys/devices/platform/FLEXCAN.0/bitrate      #把CAN0波特率改为250Kbps

注意您修改某些参数像波特率,您需要在启用CAN之前进行,如果CAN已经启用,需先停用。

CAN接口的启用和停用类似以太网口,用ifconfig命令即可操作,下面命令用CAN0接口

 ifconfig can0 up 

我们参考DEL的帮助,发送一个id为0x12的帧,看CAN测试工具是否能收到

 can_test -l 1 -b 8 -d can0 -i 0x12 -p 0x65 -m 

以下是测试结果,表明电脑端的CAN模块已经接收到该帧。

我们再来测试一下用DEL接收CAN的包,注意can_test是个命令行工具,如果不懂得用,可以用can_test -h来查询一下相关命令 我们可以用下面的命令行让can_test进行接收1000次循环状态

can_test -l 1000 -d can0 -i 1 -p 1 -v 3

然后在pc端向id=1的设备发一个包,相关结果如下

PC端:


DEL设备端:


延伸阅读 - 如何接收远程帧