大多数发行版linux系统已经自带PCAN驱动,无需安装驱动实现“免驱”,如果没有可自行搜索安装。但嵌入式linux是个特例,必须在内核源码里开启驱动👉编译内核👉烧录镜像,才能使用。
嵌入式linux需要内核开启PCAN驱动,具体步骤详见《嵌入式Linux内核开启USB CAN驱动方法》
树莓派OS对PCANFD支持不太友好,需要安装linux 驱动,详见《Linux安装PCAN驱动,安装方法以树莓派为例》
===================================================================
Linux免驱使用PCAN FD,使用方法以Ubuntu为例,连接设备后,
可使用 ifconfig -a 命令查询设备号(当连接一个CAN设备时,通常为CAN0)。
如果没有can0显示,说明系统缺少依赖。
图:查询CAN设备号
安装依赖:
SocketCAN 驱动程序:这是 Linux 内核中实现 CAN 协议栈的模块,通常在大多数 Linux 发行版中已经默认启用。
安装依赖命令:
sudoaptupdatesudoaptinstallbuild-essential1:首先安装can-utils工具,可通过如下命令安装,作者电脑已安装can-utils。
can-utils 工具:一个用于测试和调试 CAN 总线通信的工具集。
sudoapt-getinstallcan-utils
图:安装can-utils工具
2:以CAN0设备为例,运行以下命令配置和启动
● 示例配置为仲裁段500kbps, 数据段2M的CANFD模式
sudoiplinksetcan0 uptypecan bitrate500000dbitrate2000000fd on
图:CAN FD配置波特率并启动
3:运行candump命令打印报文:
建议新开一个终端用来接收报文,
candump can0
图:CAN FD接收报文
4:运行cansend命令发送报文:
使用<can_id>#{data}方式发送CAN2.0报文
#:表示发送CAN2.0报文分隔符。
can发送命令示例:
# 发送 标准帧,数据帧cansend can0123#12345678# 发送 标准帧,远程帧cansend can0123#R# 发送 扩展帧,数据帧cansend can0 00000123#12345678# 发送 扩展帧,远程帧cansend can0 00000123#R发送(标准帧,数据帧,ID:0x1a6,date:0000000000000000)
cansend can0 1a6#0000000000000000使用<can_id>##(flags){data}方式发送FD报文。
##:表示发送FD报文分隔符。
flags:BRS为0普通帧,1为加速帧。
canfd发送命令示例:
# 发送 标准帧,数据帧 示例:ID:0x123,date:12 34 56 78cansend can0123##012345678# 发送 扩展帧,数据帧 示例:ID:0x00000123,date:12 34 56 78cansend can0 00000123##012345678# 发送 标准帧,数据帧,加速帧 示例:ID:0x456,date:12 34 56 78cansend can0456##112345678# 发送 扩展帧,数据帧,加速帧 示例:ID:0x00000456,date:12 34 56 78cansend can0 00000456##112345678发送FD报文(标准帧,数据帧,ID:222,date:112233445566778899AABBCC)
cansend can0222##0112233445566778899AABBCC发送FD报文加速帧(标准帧,数据帧,ID:222,date:112233445566778899AABBCC)
cansend can0222##1112233445566778899AABBCC
图:发送CAN 2.0与CAN FD报文区别
需注意:受CAN FD协议规定,若FD报文长度上图Length下拉,会自动以0补齐。
如果在使用中切换波特率,必须要先关闭一次,再按照步骤2依次重新配置,请务必确保设备端波特率与报文发送正常,若不确定,请参考《PCAN安装驱动、使用PcanView监听发送报文》
5:CAN关闭命令
sudoifconfigcan0 down或者
sudoiplinksetcan0 down