小工具知识网

当前位置: 首页 > 行业知识 > ArmSoM Rockchip系列产品 通用教程 之 CAN 使用

行业知识

ArmSoM Rockchip系列产品 通用教程 之 CAN 使用

2026-10-22 02:47:26 来源:互联网转载

CAN 使用

1. CAN 简介

CAN (controller Area Network):控制器局域网络总线,是一种有效支持分布式控制或实时控制的串行通信网络。

  • 目前世界上绝大多数汽车制造厂商都采用CAN总线来实现汽车内部控制系统之间的数据通信。

  • RK3568/RK3588的CAN驱动文件:drivers/net/can/rockchip/rockchip_canfd.c

  • 在ArmSoM-Sige7中,CAN集成在40PIN中,可供用户复用为CAN相关引脚。

    2. 原理图

    CAN在40PIN中的位置: CAN_TX对应40PIN中的第35编号,CAN_RX对应40PIN中的第12编号

    3. 硬件连接

    CAN模块之间接线:CAN_TX接CAN_TX,CAN_RX接CAN_RX。

    4. 内核配置

    • rockchip_linux_defconfig配置:
      CONFIG_CAN=yCONFIG_CAN_DEV=yCONFIG_CAN_ROCKCHIP=yCONFIG_CANFD_ROCKCHIP=y
      • 内核配置:
        cd kernelmake ARCH=arm64 menuconfigmake savedefconfig
        • 选择:Networking support —> CAN bus subsystem support ()—>CAN Device Drivers() —> Platform CAN drivers with Netlink support(*)

          5. DTS 节点配置

          5.1 主要参数:

          • interrupts = ;

            转换完成,产生中断信号。

          • clock

            时钟属性,用于驱动开关clk,reset属性,用于每次复位总线。

          • pinctrl

            配置CAN相关的引脚信息,功能复用

            5.2 芯片级公共配置

            kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588s.dtsi

            can0: can@fea50000 {            compatible = "rockchip,can-2.0";            reg = ;            interrupts = ;            clocks = , ;            clock-names = "baudclk", "apb_pclk";            resets = , ;            reset-names = "can", "can-apb";            pinctrl-names = "default";            pinctrl-0 = ;            tx-fifo-depth = ;            rx-fifo-depth = ;            status = "disabled";    };can1: can@fea60000 {            compatible = "rockchip,can-2.0";            reg = ;            interrupts = ;            clocks = , ;            clock-names = "baudclk", "apb_pclk";            resets = , ;            reset-names = "can", "can-apb";            pinctrl-names = "default";            pinctrl-0 = ;            tx-fifo-depth = ;            rx-fifo-depth = ;            status = "disabled";    };can2: can@fea70000 {            compatible = "rockchip,can-2.0";            reg = ;            interrupts = ;            clocks = , ;            clock-names = "baudclk", "apb_pclk";            resets = , ;            reset-names = "can", "can-apb";            pinctrl-names = "default";            pinctrl-0 = ;            tx-fifo-depth = ;            rx-fifo-depth = ;            status = "disabled";    };
            • compatible = “rockchip,can-1.0” ,rockchip,can-1.0用来匹配can控制器驱动。

            • compatible = “rockchip,can-2.0” ,rockchip,can-2.0用来匹配canfd控制器驱动。

            • assigned-clock-rates用来配置can的始终频率,如果CAN的比特率低于等于3M建议修改CAN时钟到100M,信号更稳定。高于3M比特率的,时钟设置200M就可以。

            • pinctrl配置:根据实际板卡连接情况配置can_h和can_l的iomux作为can功能使用。

              5.3 板级配置

              kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588-armsom-w3.dts

              /* can1 */&can1 {status = "okay";assigned-clocks = ;assigned-clock-rates = ;pinctrl-names = "default";pinctrl-0 = ;      #根据原理图进行配置};
              • 由于系统根据上述dts节点创建的CAN设备只有一个,而第一个创建的设备为CAN0

                6. CAN通信测试

                • 查询当前⽹络设备:
                  ifconfig -a
                  • CAN启动
                    ip link set can0 down   //关闭CANip link set can0 type can bitrate 500000   #设置⽐特率500KHzip -details -statistics link show can0    #打印can0信息ip link set can0 up     //启动CAN
                    • 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)
                      • CAN接收
                        candump can0       //candump can0      #发送(扩展帧,数据帧,ID:00000123,date:DEADBEEF)cansend can0 00000123#R              #发送(扩展帧,远程帧,ID:00000123)
                        • CAN接收
                          candump can0       //candump can0

上一篇:服务器怎么24小时开着?

下一篇:追债攻略,如何有效起诉欠债不还者!