CAN 协议是在 1980 年代由 Bosch 公司开发的,旨在满足汽车工业的需求,但随着时间的推移,它逐渐应用于其他领域。CAN 是一种基于消息的通信协议,允许多台设备通过总线进行通信。每个设备(节点)可以向总线上发送消息,所有设备都可以接收这些消息。
主要特点:
以ArmSoM-Sige7为实例,CAN在40PIN中的位置:
| I2C | 引脚 | 功能 |
|---|---|---|
| CAN1_TX_M1 | 3 | can1_m1 数据传输引脚 |
| CAN1_RX_M1 | 5 | can1_m1 数据接收引脚 |
| CAN1_RX_M0 | 12 | can1_m0 数据传输引脚 |
| CAN1_TX_M0 | 35 | can1_m0 数据接收引脚 |
CAN模块之间接线:CAN_TX接CAN_TX,CAN_RX接CAN_RX。

CONFIG_CAN=y
CONFIG_CAN_DEV=y
CONFIG_CAN_ROCKCHIP=y
CONFIG_CANFD_ROCKCHIP=y
cd kernel
makeARCH=arm64 menuconfig
make savedefconfig

主要参数:
/* can1 */
&can1 {
compatible ="rockchip,can-2.0";
reg =<0x0 0xfea60000 0x0 0x1000>;
interrupts =<GIC_SPI 342 IRQ_TYPE_LEVEL_HIGH>;
clocks =<&cru CLK_CAN1>, <&cru PCLK_CAN1>;
clock-names ="baudclk", "apb_pclk";
resets =<&cru SRST_CAN1>, <&cru SRST_P_CAN1>;
reset-names ="can", "can-apb";
tx-fifo-depth =<1>;
rx-fifo-depth =<6>;
status ="okay";
assigned-clocks =<&cru CLK_CAN1>;
assigned-clock-rates =<200000000>;
pinctrl-names ="default";
pinctrl-0 =<&can1m0_pins>;#根据原理图进行配置
};
CAN接口在默认情况是关闭状态的,需要使能才能使用
在 Armbian 操作系统中,/boot/armbianEnv.txt 文件用于配置系统启动时的参数和设备树插件。你可以通过编辑该文件来启用或禁用 CAN 设备树插件,确保 CAN 总线可以在启动时正确加载。
如果你希望检查或启用 CAN 相关设备树插件,可以按照以下步骤操作:
查看设备树插件配置
打开文件: 通过终端打开 /boot/armbianEnv.txt 文件,使用文本编辑器如 nano 或 vim,例如:
root@armsom-sige7:/home/armsom# sudo nano /boot/armbianEnv.txt
这里以激活 can-m0 为例,将 rk3588-can1-m0 打开如下:
overlays=rk3588-can1-m0
编辑完成后,保存文件并退出编辑器 重启系统使配置生效:
// 先执行sync
root@armsom-sige7:/home/armsom# sync
root@armsom-sige7:/home/armsom# sudo reboot
提示
ifconfig-a
iplinkset can0 down //关闭CAN
iplinkset can0 type can bitrate 500000#设置⽐特率500KHz
ip-details-statisticslink show can0 #打印can0信息
iplinkset can0 up //启动CAN
cansend can0 123#DEADBEEF #发送(标准帧,数据帧,ID:123,date:DEADBEEF)
cansend can0 123#R #发送(标准帧,远程帧,ID:123)
cansend can0 00000123#12345678 #发送(扩展帧,数据帧,ID:00000123,date:DEADBEEF)
cansend can0 00000123#R #发送(扩展帧,远程帧,ID:00000123)
candump can0 //candump can0
更多回帖