赞
踩
默认情况下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 调试终端命令记录简要记录:
- 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,发送报文
SocketCAN 是 Linux 的 CAN 驱动程序和网络工具的集合。它允许以与其他网络设备类似的方式与 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)
在命令终端中输入:(以下命令将 can0 设备的波特率设定为 500000 bps)
sudo ip link set can0 type can bitrate 500000
在命令终端中输入:
sudo ip link set can0 up
在命令终端中输入:
sudo ip link set can0 down
can-utils是linux下操作socketcan的一个实用工具集,包含多个收发can的小工具,如candump,cansend 等。
通过在命令终端中输入以下命令来安装can-utils:
- sudo apt update # rk3399上必须执行 ,不然找不到下面这个包
- sudo apt-get install can-utils
candump can0
candump 还可以对接收到的can 信息进行过滤。详细请输入candump -h 命令进行查看。
cansend 可以将单个CAN 帧发送到总线上。需要设置设备名,CAN ID和要发送的数据字节。
例如:
cansend can0 123#1122334455667788
此条指令将在接口can0 上发送一条消息,CAN ID为0x123,数据字节为[0x11、0x22、0x33、
0x44、0x55、0x66、0x77、0x88]。请注意,can-utils工具默认数据为十六进制。
cangen可以生成随机的CAN数据,这对于测试很有用。有关更多的用法信息,请在命令终端中输入:
cangen -h
cansniffer 可以显示总线上接收到的 CAN 消息,而且可以过滤掉数据不变的帧。这对于逆向工程 CAN总线系统非常有用。有关更多信息,请在命令终端中输入:
cansniffer -h
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。