CAN接口是一种用于实现车载网络通信的接口,它可以支持多个设备之间的高速数据传输。它是由德国BOSCH公司开发的,并最终成为国际标准(ISO 11898),在北美和西欧,它已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车辆设计的J1939协议。
CAN接口主要应用于汽车行业,可以用于汽车控制、安全系统、车载娱乐系统等。此外,它还可以用于工业控制、医疗设备、家庭自动化等领域。
钡铼技术嵌入式ARM控制器BL301/BL302系列是一款工业级坚固型工业控制器,采用NXP的高性能处理器I.MX6ULL,搭配先进的ARM Cortex-A7构架,运行速度高达800MHz,具有高度的稳定性。
钡铼技术嵌入式ARM控制器BL301/BL302系列拥有4路RS485/RS232、1路CAN口、2路网口、2路DI口、2路PWM口输出、1路USB 接口、1路电源输入/输出接口和1路HDMI视频显示接口,
钡铼技术嵌入式ARM控制器BL301/BL302系列可运行LINUX、Ubuntu、Debian等操作系统,兼容Node-Red、QT、Python、C++等应用程序,支持MySQL、InfluxDB、SQLite等数据库。
本文主要讲解钡铼技术嵌入式ARM控制器BL301/BL302系列使用CAN口的教程
CAN接口如图所示,输入如下命令:
ifconfig -a //查看所有网卡
如果FlexCAN驱动工作正常的话就会看到CAN对应的网卡接口,如图。从图中可以看出,有一个名为“can0”的网卡,这个就是BL302板上的CAN1接口对应的can网卡设备。
BL302板子上有一个CAN接口,如需测试CAN接口,还需要一个CAN设备,可以使用另一块BL302板子,或者带有CAN的板子进行测试。
准备两块BL302设备,然后将CAN接口连接起来,BL302设备上CAN接线端子如图
将两个设备的CAN接口连接起来,注意,CAN_H接CAN_H,CAN_L接CAN_L。
首先使用ip命令设置两个设备的CAN接口,首先设置CAN接口的速度,输入如下所示命令:
ip link set can0 type can bitrate 500000
上述命令设置can0速度为500Kbit/S,两个CAN设备的速度要设置为一样的!速度设置好以后打开can0网卡,命令如下:
ifconfig can0 up //打开can0
can0打开以后就可以使用can-utils里面的小工具进行数据收发测试了。一个设备用来接收数据,一个用来发送数据,接收数据的设备使用candump命令,输入如下命令:
candump can0 //接收数据
发送数据的设备使用cansend命令向接收单元发送8个字节的数据:0X11、0X22、0X33、0X44、0X55、0X66、0X77、0X88。输入如下命令:
cansend can0 5A1#11.22.33.44.55.66.77.88
cansend命令用于发送can数据,“5A1”是帧ID,“#”号后面的“11.22.33.44.55.66.77.88”就是要发送的数据,十六进制。CAN2.0一次最多发送8个字节的数据,8个字节的数据之间用“.”隔开。
如果CAN工作正常的话接收端就会接收到上面发送过来的这8个字节的数据
/ # candump can0 can0 5A1 [8] 11 22 33 44 55 66 77 88 |
从上面可以看出,接收端的can0接口接收到了8个字节的数据,帧ID为5A1,说明CAN驱动工作正常。
如果要关闭can0的话输入如下命令:
ifconfig can0 down
如果要在一个板子上进行CAN回环测试,按照如下命令设置CAN:
ifconfig can0 down //如果can0已经打开了,先关闭
ip link set can0 type can bitrate 500000 loopback on //开启回环测试
ifconfig can0 up //重新打开can0
candump can0 & //candump后台接收数据
cansend can0 5A1#11.22.33.44.55.66.77.88 //cansend发送数据
如果回环测试成功的话那么设备就会收到发送给自己的数据,如图所示:
/ # cansend can0 5A1#11.22.33.44.55.66.77.88 can0 5A1 [8] 11 22 33 44 55 66 77 88 |