本帖最后由 ぉ沙皮狗的忧伤 于 2020-4-8 16:44 编辑
(一)、先看原理图
注:原理图并非米联客的开发板,关系不大,测试都差不多可以参考
(二)、vivado配置
注:根据自己板卡的情况设置PS IP核can功能这里也可在设备树中设置CAN的pinctrl代码
(三)、配置内核
1、#make menuconfig
Networking support --->
<*> CAN bus subsystem support --->
--- CAN bus subsystem support
<*> Raw CAN Protocol (raw access with CAN-ID filtering)
<*> Broadcast Manager CAN Protocol (with content filtering)
<*> CAN Gateway/Router (with netlink configuration)
CAN Device Drivers --->
<*> Xilinx CAN
#make all
#make uImage
拷贝uImage到SD卡中
2、配置设备树
打开can设备树代码
#vim arch/arm/boot/dts/system-top.dts
增加CAN pinctrl代码
#make all
将arch/arm/boot/dts/system-top.dtb重命名位devicetree.dtb文件放入SD中
(四)、调试板卡
设置can0的波特率,这里设置的是125k
ip link set can0 type can bitrate 125000
启用can0
ip link set can0 up
显示can0状态信息
ip -d -s link show can0
1、回环测试(自己发自己收)
can0接受同时发送数据
candump can0&
cansend can0 123#0011223344556677
2、测试通信
板A发数据
板B收数据
板卡连接图
关闭can0
ip link set can0 down
测试can_id参考网址:http://www.voidcn.com/article/p-yiqzydyx-bwo.html
candump can0,00200200:0,255:0
00200200:0,255:0分别是过滤器指定接收数据的can_id,冒号后面的0表示mask掩码,当掩码为0时,每个CAN ID都将匹配它.
所以can_id没有实际效果,这就是所有消息都通过的原因,can id中的每个必需位都应该在掩码中设置为1.
candump can0,00200200:DFFFFFFF,255:7FF
cansend can0 207#112233 不能发送过来,被过滤掉
cansend can0 255#112233 能接收,
|