ぉ沙皮狗的忧伤 发表于 2020-4-3 17:56:07

linux CAN通信学习笔记(一)功能实现

本帖最后由 ぉ沙皮狗的忧伤 于 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 能接收,

页: [1]
查看完整版本: linux CAN通信学习笔记(一)功能实现