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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/499205.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【程序员是如何看待“祖传代码”的?】《代码的遗产:探索程序员眼中的“祖传代码”》

程序员是如何看待“祖传代码”的&#xff1f; 在程序员的世界里&#xff0c;代码不仅仅是构建软件的基石&#xff0c;它们也承载着历史、智慧和技术的演变。在我的编程生涯中&#xff0c;我遇到过许多神奇而独特的“祖传代码”&#xff0c;这些代码如同古老的魔法书&#xff0…

Redis高级应用——海量数据高并发下Reids的分片集群,原理和应用,集群伸缩以及项目配置

目录 引出Reids海量数据&#xff0c;高并发问题认识Redis集群算法搭建Redis分片集群准备实例安装redis启动 创建集群测试 分片集群原理搭建分片集群散列插槽插槽原理小结 认识集群伸缩需求分析创建新的redis实例添加新节点到redis集群转移插槽自动故障转移 SpringBoot配置Redis…

HarmonyOS端云体化开发—创建端云一体化开发工程

云开发工程模板 DevEco Studio目前提供了两种云开发工程模板&#xff1a;通用云开发模板和商城模板。您可根据工程向导轻松创建端云一体化开发工程&#xff0c;并自动生成对应的代码和资源模板。在创建端云一体化开发工程前&#xff0c;请提前了解云开发工程模板的相关信息。 …

2、表结构数据

1、表结构数据 表结构数据——以字段或记录作为数据的引用、操作及计算的基本单位的数据。 表的数据结构是方形的&#xff0c;要求不同字段记录行数相同。 字段——整列数记录——整行数维度——业务角度度量——业务行为的结果维度字段——文本型度量字段——数值型 2、事实…

价格腰斩:腾讯云和阿里云服务器优惠价格对比

2024年阿里云服务器和腾讯云服务器价格战已经打响&#xff0c;阿里云服务器优惠61元一年起&#xff0c;腾讯云服务器62元一年&#xff0c;2核2G3M、2核4G、4核8G、8核16G、16核32G、16核64G等配置价格对比&#xff0c;阿腾云atengyun.com整理阿里云和腾讯云服务器详细配置价格表…

MySQL:索引有哪些(清晰明了)

一提到索引&#xff0c;可能就会想到B树索引、Hash索引、聚簇索引、主键索引、唯一索引、联合索引等等&#xff0c;但这些名词并不能混为一谈&#xff0c;他们有重复的部分&#xff0c;是从不同方面给索引取的名字。 从数据结构上来讲&#xff1a;B树索引、Hash索引、Full-text…

RabbitMQ实战学习

RabbitMQ实战学习 文章目录 RabbitMQ实战学习RabbitMQ常用资料1、安装教程2、使用安装包3、常用命令4、验证访问5、代码示例 一、RabbitMQ基本概念1.1. MQ概述1.2 MQ 的优势和劣势1.3 MQ 的优势1. 应用解耦2. 异步提速3. 削峰填谷 1.4 MQ 的劣势1.5 RabbitMQ 基础架构1.6 JMS 二…

计算机组成原理-第一/二章 概述和数据的表示和运算【期末复习|考研复习】

文章目录 前言第一章 计算机组成原理 概述及各种码1.1 计算机硬件的基本组成1.1.1 存储器1.1.2 运算器1.1.3 控制器 1.2 计算机的工作过程1.3 计算机的性能指标1.4 各个字长区别与联系 第二章 数据的表示与运算2.1 ASCII码2.2 各种码2.3 浮点数 总结 前言 给大家整理了一下计算…

solidity编程

一.Solidity 简介 Solidity 是⼀种⽤于编写以太坊虚拟机&#xff08; EVM &#xff09;智能合约的 编程语⾔。我认为掌握 Solidity 是参与链上项⽬的必备技 能&#xff1a;区块链项⽬⼤部分是开源的&#xff0c;如果你能读懂代码&#xff0c;就可以 规避很多亏钱项⽬。…

【刷题】 Leetcode 1022.从根到叶的二进制数之和

刷题 1022.从根到叶的二进制数之和题目描述&#xff1a;思路一&#xff08;dfs深搜万能版&#xff09;思路二 &#xff08;栈迭代巧解版&#xff09;总结 Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;&#xff01;&#xff01;下一篇文章见&#xff…

96 “+“ 和 方法调用 的优先级问题导致的字符串拼接问题

前言 呵呵 最近的时候碰到了这样的一个问题 我使用 来进行字符串拼接, 拼接了之后 我想替换掉 整个字符串里面的 "Auth" 字符串 结果出现了这样的一个问题, 呵呵 刚看到这个问题的时候, 有点懵 但是 其实是一个 算是比较简单的一个问题吧 以下截图, 调试 基…

大模型量化技术原理-SmoothQuant

近年来&#xff0c;随着Transformer、MOE架构的提出&#xff0c;使得深度学习模型轻松突破上万亿规模参数&#xff0c;从而导致模型变得越来越大&#xff0c;因此&#xff0c;我们需要一些大模型压缩技术来降低模型部署的成本&#xff0c;并提升模型的推理性能。 模型压缩主要分…