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

2024-03-01 05:28

本文主要是介绍ArmSoM Rockchip系列产品 通用教程 之 CAN 使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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 = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
    转换完成,产生中断信号。

  • 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 = <0x0 0xfea50000 0x0 0x1000>;interrupts = <GIC_SPI 341 IRQ_TYPE_LEVEL_HIGH>;clocks = <&cru CLK_CAN0>, <&cru PCLK_CAN0>;clock-names = "baudclk", "apb_pclk";resets = <&cru SRST_CAN0>, <&cru SRST_P_CAN0>;reset-names = "can", "can-apb";pinctrl-names = "default";pinctrl-0 = <&can0m0_pins>;tx-fifo-depth = <1>;rx-fifo-depth = <6>;status = "disabled";};can1: can@fea60000 {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";pinctrl-names = "default";pinctrl-0 = <&can1m0_pins>;tx-fifo-depth = <1>;rx-fifo-depth = <6>;status = "disabled";};can2: can@fea70000 {compatible = "rockchip,can-2.0";reg = <0x0 0xfea70000 0x0 0x1000>;interrupts = <GIC_SPI 343 IRQ_TYPE_LEVEL_HIGH>;clocks = <&cru CLK_CAN2>, <&cru PCLK_CAN2>;clock-names = "baudclk", "apb_pclk";resets = <&cru SRST_CAN2>, <&cru SRST_P_CAN2>;reset-names = "can", "can-apb";pinctrl-names = "default";pinctrl-0 = <&can2m0_pins>;tx-fifo-depth = <1>;rx-fifo-depth = <6>;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 = <&cru CLK_CAN1>;assigned-clock-rates = <200000000>;pinctrl-names = "default";pinctrl-0 = <&can1m1_pins>;      #根据原理图进行配置
};
  • 由于系统根据上述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

这篇关于ArmSoM Rockchip系列产品 通用教程 之 CAN 使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/761341

相关文章

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa