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

相关文章

MQTT SpringBoot整合实战教程

《MQTTSpringBoot整合实战教程》:本文主要介绍MQTTSpringBoot整合实战教程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录MQTT-SpringBoot创建简单 SpringBoot 项目导入必须依赖增加MQTT相关配置编写

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1

SpringCloud使用Nacos 配置中心实现配置自动刷新功能使用

《SpringCloud使用Nacos配置中心实现配置自动刷新功能使用》SpringCloud项目中使用Nacos作为配置中心可以方便开发及运维人员随时查看配置信息,及配置共享,并且Nacos支持配... 目录前言一、Nacos中集中配置方式?二、使用步骤1.使用$Value 注解2.使用@Configur

Mac备忘录怎么导出/备份和云同步? Mac备忘录使用技巧

《Mac备忘录怎么导出/备份和云同步?Mac备忘录使用技巧》备忘录作为iOS里简单而又不可或缺的一个系统应用,上手容易,可以满足我们日常生活中各种记录的需求,今天我们就来看看Mac备忘录的导出、... 「备忘录」是 MAC 上的一款常用应用,它可以帮助我们捕捉灵感、记录待办事项或保存重要信息。为了便于在不同

在Java中基于Geotools对PostGIS数据库的空间查询实践教程

《在Java中基于Geotools对PostGIS数据库的空间查询实践教程》本文将深入探讨这一实践,从连接配置到复杂空间查询操作,包括点查询、区域范围查询以及空间关系判断等,全方位展示如何在Java环... 目录前言一、相关技术背景介绍1、评价对象AOI2、数据处理流程二、对AOI空间范围查询实践1、空间查

如何Python使用设置word的页边距

《如何Python使用设置word的页边距》在编写或处理Word文档的过程中,页边距是一个不可忽视的排版要素,本文将介绍如何使用Python设置Word文档中各个节的页边距,需要的可以参考下... 目录操作步骤代码示例页边距单位说明应用场景与高级用China编程途小结在编写或处理Word文档的过程中,页边距是一个

Logback在SpringBoot中的详细配置教程

《Logback在SpringBoot中的详细配置教程》SpringBoot默认会加载classpath下的logback-spring.xml(推荐)或logback.xml作为Logback的配置... 目录1. Logback 配置文件2. 基础配置示例3. 关键配置项说明Appender(日志输出器

SpringBoot项目Web拦截器使用的多种方式

《SpringBoot项目Web拦截器使用的多种方式》在SpringBoot应用中,Web拦截器(Interceptor)是一种用于在请求处理的不同阶段执行自定义逻辑的机制,下面给大家介绍Sprin... 目录一、实现 HandlerInterceptor 接口1、创建HandlerInterceptor实

使用JavaConfig配置Spring的流程步骤

《使用JavaConfig配置Spring的流程步骤》JavaConfig是Spring框架提供的一种基于Java的配置方式,它通过使用@Configuration注解标记的类来替代传统的XML配置文... 目录一、什么是 JavaConfig?1. 核心注解2. 与 XML 配置的对比二、JavaConf

使用Python和Tkinter实现html标签去除工具

《使用Python和Tkinter实现html标签去除工具》本文介绍用Python和Tkinter开发的HTML标签去除工具,支持去除HTML标签、转义实体并输出纯文本,提供图形界面操作及复制功能,需... 目录html 标签去除工具功能介绍创作过程1. 技术选型2. 核心实现逻辑3. 用户体验增强如何运行