CAN接口:Ubuntu系统下CAN接口使用python调用过程
介绍在Ubuntu系统中通过python程序使用CAN接口。
1. 使用平台
NVIDIA小型边缘设备NX,(Orin NX和Xavier NX都可以),系统采用Ubuntu,(18.04版本和20.04版本都可以),目的是通过python程序调用CAN接口接收数据。
2. 准备工作
- 首先使用命令查看是否有CAN接口
ifconfig -a
说明现在是没有办法使用CAN接口的,需要通过几部操作让CAN接口显示出来。
- 在~/下添加 .canrc文件,创建一次即可
指令:sudo vi ~/.canrc
在里面填写如下信息
[default]
interface = socketcan
channel = can0
然后创建脚本cantest.sh,在脚本中添加以下内容,该脚本在每次开机时需要启动,然后才可以显示CAN端口。
sudo busybox devmem 0x0c303000 32 0x0000C400
sudo busybox devmem 0x0c303008 32 0x0000C458
sudo busybox devmem 0x0C303010 32 0x0000C400
sudo busybox devmem 0x0c303018 32 0x0000C458
sudo modprobe can
sudo modprobe can_raw
sudo modprobe can_dev
sudo modprobe mttcan
再次运行指令,ifconfig -a
可以看到出现CAN端口。
- 此时可利用candump进行CAN端口的测试过程。同时CAN接口的操作过程在终端中可以通过类似操作网口的方式操作。
ip link set can0 down
ip link set can0 type can bitrate 250000 loopback off
ip link set can0 up
上面的代码分别为设置关闭CAN0,设置CAN0参数250k波特率,设置打开CAN0
2. python 所需库
- canlib
通过指令
pip install canlib
安装,然后在程序中通过import canlib
导入。
相关的使用文档
- can
通过指令
pip install python-can
安装,然后在程序中通过import can
导入。
相关的使用文档和文档,这都是官方的文档,讲述的比较全面。
在头一次使用的过程中,在运行python程序会出现无法找到libcanlib.so
文件的情况,需要首先现在linuxcan
文件,然后对文件进行解压,在解压后的目录中打开终端运行,不方便寻找的可以利用下面的下载地址进行下载。
sudo make
sudo make install
此过程会安装上相应的库文件,这时再次运行自己的python程序就不会出现找不到libcanlib.so
文件的情况。
3. 注意事项
在python中使用CAN接口的过程中有需要注意的两点。
- 使用CAN,而不使用canlib,
这两个库是存在差别的,python-can
是Linux下的通用CAN库,
而canlib
库是支持很多的USBCAN和虚拟CAN的库,这个和安装Linuxcan是对应的,但是在安装的过程中,通过打印信息可以看到,把SocketCAN
加入进了黑名单,所以不能通过canlib调用socketCAN接口,使用过程中会出现在终端中用candump测试没有问题,但是python程序找不到CAN通道。 - 多使用
candump
指令在终端中进行测试。 - 关于socketCAN和Linuxcan的区别在
Kvaser
的一篇文章中有说明,可以参考。
4. LinuxCAN下载地址
可以利用下面的百度网盘进行下载。
链接:https://pan.baidu.com/s/1AAkmfpfcb4_sx8RdoC0vLg
提取码:lf1v
–来自百度网盘超级会员V5的分享