内核支持:
默认情况下can在kernel driver没有被打开 ifconfig -a也拿不到can0的设备节点 , 需要改kernel的defconfig文件。
CONFIG_CAN_SLCAN=y CONFIG_CAN_DEV=y CONFIG_CAN_EMS_USB=y CONFIG_CAN_ESD_USB2=y CONFIG_CAN_8DEV_USB=y CONFIG_CAN_PEAK_USB=y CONFIG_CAN=y CONFIG_CAN_GS_USB=y #这个必须,dmesg打印出就是gs usb
CAN常用命令:
对常用的CAN 调试终端命令记录简要记录:
ip link set canX down //关闭can设备; ip link set canX up //开启can设备; ip -details link show canX //显示can设备详细信息; candump canX //接收can总线发来数据; ifconfig canX down //关闭can设备,以便配置; ip link set canX up type can bitrate 250000 //设置can波特率 conconfig canX bitrate + 波特率; canconfig canX start //启动can设备; canconfig canX ctrlmode loopback on //回环测试; canconfig canX restart // 重启can设备; canconfig canX stop //停止can设备; canecho canX //查看can设备总线状态; cansend canX --identifier=ID+数据 //发送数据; candump canX --filter=ID:mask //使用滤波器接收ID匹配的数据
应用举例:
ip link set can0 type can bitrate 250000 //在收发端设置比特率为250Kbps ip link set can0 up //在收发端打开can0设备 candump can0 //在接收端执行candump,阻塞等待报文 cansend can0 123#1122334455667788 //在发送端执行cansend,发送报文
总线分析仪睿紫版CA105/CA105G资料(仅支持Linux):
SocketCAN 是 Linux 的 CAN 驱动程序和网络工具的集合。它允许以与其他网络设备类似的方式与 CAN总线设备连接和通讯。
1、SocketCAN设备的基本操作。
(1)查看CAN设备
在命令终端中输入:
ifconfig -a
得到如下结果
can0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 UP RUNNING NOARP MTU:16 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:10 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) can1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 NOARP MTU:16 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:10 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) eth0 Link encap:Ethernet HWaddr 0a:6d:fe:63:f9:05 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:12 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:1455 (1.4 KB) Interrupt:24 eth1 Link encap:Ethernet HWaddr e2:97:09:7b:42:2c inet addr:192.168.1.179 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::5771:d375:5f9:ee6c/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2758 errors:0 dropped:0 overruns:0 frame:0 TX packets:51 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:195456 (195.4 KB) TX bytes:6030 (6.0 KB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:170 errors:0 dropped:0 overruns:0 frame:0 TX packets:170 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:13064 (13.0 KB) TX bytes:13064 (13.0 KB)
(2)设置 can 设备的波特率
在命令终端中输入:(以下命令将 can0 设备的波特率设定为 500000 bps)
sudo ip link set can0 type can bitrate 500000
(3)启动 can 设备
在命令终端中输入:
sudo ip link set can0 up
(4)关闭 can 设备
在命令终端中输入:
sudo ip link set can0 down
2、SocketCAN工具can-utils使用:
can-utils是linux下操作socketcan的一个实用工具集,包含多个收发can的小工具,如candump,cansend 等。
(1)安装can-utils
通过在命令终端中输入以下命令来安装can-utils:
1. sudo apt update # rk3399上必须执行 ,不然找不到下面这个包 2. sudo apt-get install can-utils
(2)candump
candump can0
candump 还可以对接收到的can 信息进行过滤。详细请输入candump -h 命令进行查看。
(3)cansend
cansend 可以将单个CAN 帧发送到总线上。需要设置设备名,CAN ID和要发送的数据字节。
例如:
cansend can0 123#1122334455667788
此条指令将在接口can0 上发送一条消息,CAN ID为0x123,数据字节为[0x11、0x22、0x33、
0x44、0x55、0x66、0x77、0x88]。请注意,can-utils工具默认数据为十六进制。
(4)cangen
cangen可以生成随机的CAN数据,这对于测试很有用。有关更多的用法信息,请在命令终端中输入:
cangen -h
(5)cansniffer
cansniffer 可以显示总线上接收到的 CAN 消息,而且可以过滤掉数据不变的帧。这对于逆向工程 CAN总线系统非常有用。有关更多信息,请在命令终端中输入:
cansniffer -h