Linux驱动开发基础(can)

目录

1.can的介绍 

2.can的硬件连接

2.1 CPU自带can控制器

2.2 CPU没有can控制器

3.电气属性

4.can的特点

5.can协议

5.1 can的种类

5.2 数据帧

5.2.1 标准数据帧格式

5.3.1 扩展数据帧格式

5.3 遥控帧

5.4 错误帧

5.5 过载帧

5.6 帧间隔

5.7 位填充

5.8 位时间

​编辑

5.9 硬同步和再同步

5.10 仲裁


1.can的介绍 

CAN是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议

在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为了减少线束的数量的需要,且能让不同的ECU模块(汽车电子中的最小控制模块)可以相互通信,1986年德国电气商博世公司开发出面向汽车的CAN通信协议。此后,CAN通过ISO11898及ISO11519进行了标准化,现在在欧洲已是汽车网络的标准协议。

现在,CAN的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。

CAN等通信协议的开发,使多种LAN通过网关进行数据交换得以实现。如图是车载网络的构想示意图。

2.can的硬件连接

2.1 CPU自带can控制器

2.2 CPU没有can控制器

can总线两端1200欧姆为终端电阻,作用是消除总线上的信号反射。

3.电气属性

高速CAN:当 CANH 和 CANL 电压相同时为逻辑“1”(隐性状态),CANH 和 CANL 电压相差2V时为逻辑“0”(显性状态)

can使用差分信号来传输数据,并且物理连接上一般使用双绞线,抗干扰能力更强。

注意:干扰信号对双绞线的干扰是等幅值,等相位,等频率的,所以双绞线抗干扰能力更高

所以 can 总线速率最快可达到1Mbps,此时传输距离最远可达40m

4.can的特点

(1) 多主控制

在总线空闲时,所有的单元都可开始发送消息(多主控制)。

最先访问总线的单元可获得发送权(CSMA/CA方式*1)。

多个单元同时开始发送时,发送高优先级ID消息的单元可获得发送权。

(2) 消息的发送

在CAN协议中,所有的消息都以固定的格式发送。总线空闲时,所有与总线相连的单元都可以开始发送新消息。两个以上的单元同时开始发送消息时,根据标识符(Identifier 以下称为 ID)决定优先级。ID并不是表示发送的目的地址,而是表示访问总线的消息的优先级。两个以上的单元同时开始发送消息时,对各消息ID的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作。

(3) 系统的柔软性

与总线相连的单元没有类似于“地址”的信息。因此在总线上增加单元时,连接在总线上的其它单元的软硬件及应用层都不需要改变。

(4) 通信速度

根据整个网络的规模,可设定适合的通信速度。

在同一网络中,所有单元必须设定成统一的通信速度。即使有一个单元的通信速度与其它的不一样,此单元也会输出错误信号,妨碍整个网络的通信。不同网络间则可以有不同的通信速度。

(5) 远程数据请求

可通过发送“遥控帧” 请求其他单元发送数据。

(6) 错误检测功能·错误通知功能·错误恢复功能

所有的单元都可以检测错误(错误检测功能)。 检测出错误的单元会立即同时通知其他所有单元(错误通知功能)。 正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)。

(7) 故障封闭

CAN可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。

(8) 连接

CAN总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。但实际上可连接的单元数受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少。

5.can协议

5.1 can的种类

通信是通过以下5种类型的帧进行的。

• 数据帧

• 遥控帧

• 错误帧

• 过载帧

• 帧间隔

另外,数据帧和遥控帧有标准格式和扩展格式两种格式。

标准格式有11个位的标识符(Identifier: 以下称ID), 扩展格式有29个位的ID。 各种帧的用途如表所示。

5.2 数据帧

can通信是通过数据帧进行发送数据的。数据帧会携带数据从发送设备到接收设备。数据帧分为标准数据帧和扩展数据帧两种。

5.2.1 标准数据帧格式

标准数据帧由 7 个不同的位场组成,分别是帧起始,仲裁(字段)场,控制(字段)场,数
据(字段)场,CRC(字段)场,应答(字段)场,帧结尾。

帧起始仲裁字段控制字段数据字段CRC 字段ACK 字段帧结束

标准数据帧格式分析:

(1)帧起始和帧结束
帧起始和帧结束表示一帧数据的起始和结束,帧起始由 1 个显性位组成,帧结束由 7 个连续的隐形位组成。

(2)仲裁字段
仲裁字段包括 11 位 ID 位,1 位 RTR 位,共 12 位。ID 位可以用来区分数据帧的功能(不同功能的报数据帧,ID 是不同的),也可以用来区分优先级。根据仲裁规则,ID 小的数据帧优先发送。禁止高 7 位都为隐性(禁止设定:ID=1111111XXXX)。
RTR 是远程请求标志位,用于区分数据帧还是遥控帧。数据帧 RTR 位必须为显性 0,遥控帧必须位隐性 1。(相同 ID 的数据帧和遥控帧,数据帧的优先级大于遥控帧)。

(3)控制字段
控制字段由 1 位 IDE 位,1 位 R0 保留位,4 位 DLC 共 6 位组成。
IDE位表示数据帧是标准数据帧还是扩展数组帧,标准格式固定为显示0,扩展格式固定为隐性1
R0 保留位,固定为显示 0。
DLC 位表示数据字段的数据字节数(数据段的长度)。

(4)数据字段
可以承载 0 到 64 位数据。

  (5) CRC 校验字段
CRC 校验字段由 15 位校验位和 1 位 CRC 界定字符组成,前 15 位用于 CRC 校验。CRC 界定符必须为隐性 1。

(6)ACK 字段
ACK 字段由确定间隙位和确认界定符组成,确认界定符必须是隐性 1。

5.3.1 扩展数据帧格式

当标准格式的 11 位 ID 位不够用时,就需要扩展 ID 位 ,这时就产生了扩展数据帧。

扩展数据帧在保留前面 11 位 ID 的基础上,额外增加 18 位 ID,能提供更多的标识选择,以满足更复杂的通信需求。同时,扩展数据帧还需要考虑对标准数据帧的兼容,这样可以保证在不同的应用场景和设备之间,通信能够正常进行。如下图所示。

SRR 位:替代原来的 RTR 位,没有使用,必须是隐性电平 1

5.3 遥控帧

遥控帧用于接收设备主动请求数据。发送方通过广播的形式发送数据,数据帧中通过 ID 区分不同功能的数据帧,如果发送方没有广播这个数据,接收方可以广播发送一个遥控帧,有接收方想要的数据的发送方就会广播这个数据出来。接收方就可以接收到这个数据了。

数据帧去掉数据段就是遥控帧(在有的资料中,遥控帧也要远程帧)。所以遥控帧也分为俩种(标准遥控帧和扩展遥控帧),都包含 6 个部分,分别是帧起始,仲裁(字段)场,控制(字段)场,CRC(字段)场,应答(字段)场,帧结尾。如图所示。

5.4 错误帧

在发送或者接收时,总线上的设备发生错误的时候,可以通过发送错误帧的方式告知其他节点发生了错误。
错误帧由两个部分组成,分别是错误标志和错误界定符
错误标志:
主动错误标志:6 个连续显性位
被动错误标志:6 个连续隐性位
错误界定符:8 个连续隐性位

5.5 过载帧

当某个接收节点没有做好接收下一帧数据的准备时,接收方将发送过载帧通知发送节点。
节点最多可产生两条连续的过载帧来延迟一下次发送。
过载标志的构成与主动错误标志的构成相同,过载界定符的构成与错误界定符的构成相同。

5.6 帧间隔

帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、 遥控帧、错误帧、过载帧)分开。

过载帧和错误帧前不能插入帧间隔。

(1) 间隔

3 个位的隐性位。

(2) 总线空闲

隐性电平,无长度限制(0亦可)。 本状态下,可视为总线空闲,要发送的单元可开始访问总线。

(3) 延迟传送(发送暂时停止)

8 个位的隐性位。 只在处于被动错误状态的单元刚发送一个消息后的帧间隔中包含的段。

5.7 位填充

位填充是为防止突发错误而设定的功能。当同样的电平持续5位时则添加一个位的反型数据。

因为错误帧的错误标志是由六位连续的显隐帧组成,当发送连续的数据时就很可能会被误判为错误帧,所以需要位填充来规避这种情况。

填充范围:从帧起始到 CRC 字段。
填充规则:在相同极性的 5 个连续位之后使用位填充。填充位与其前面的位极性相反。

第一种填充情况:

发送110000011
实际发送1100000111
实际接收1100000111
移除填充位110000011

第二种填充情况:

发送0111111
实际发送01111101
实际接收01111101
移除填充位0111111

第三种填充情况:

发送1000001111
实际发送100000111110
实际接收100000111110
移除填充位1000001111

(1) 发送单元的工作

在发送数据帧和遥控帧时,SOF~CRC段间的数据,相同电平如果持续5位,在下一个位(第6个位)则 要插入1位与前5位反型的电平。

(2) 接收单元的工作

在接收数据帧和遥控帧时,SOF~CRC段间的数据,相同电平如果持续5位,需要删除下一个位(第6个 位)再接收。如果这个第6个位的电平与前5位相同,将被视为错误并发送错误帧。

5.8 位时间

位时间就是指一个(二进制)位在总线传输所需要的时间,一个位时间分为 4 段,这些段又
由称为 Time Quantum (以下称为 Tq) 的最小时间单位构成

波特率 =  1 / 位时间

位时间的作用:CAN 是异步通讯,没有时钟信号线,连接在同一个总线网络中的各个节点会使用约定好的波特率进行通讯。在 CAN 还会使用同步的方式对抗干扰、降低误差,保证对总线电平信号进行正确的采样,确保通讯正常。

各段的作用如表所示:

同步可通过调整以下三个段的时间去调整采样点的位置。

5.9 硬同步和再同步

1. 硬同步

接收单元在总线空闲状态检测出帧起始时进行的同步调整。 在检测出边沿的地方不考虑SJW的值而认为是SS段。

2. 再同步

在接收过程中检测出总线上的电平变化时进行的同步调整。

每当检测出边沿时,根据SJW值通过加长PBS1段,或缩短PBS2段,以调整同步。但如果发生了超出SJW 值的误差时,最大调整量不能超过SJW值。

3. 调整同步规则

(1) 1 个位中只进行一次同步调整。

(2) 只有当上次采样点的总线值和边沿后的总线值不同时,该边沿才能用于调整同步。

(3) 在总线空闲且存在隐性电平到显性电平的边沿时,则一定要进行硬件同步。

(4) 在总线非空闲时检测到的隐性电平到显性电平的边沿如果满足条件(1)和(2),将进行再同步。但还要满足下面条件。

(5) 发送单元观测到自身输出的显性电平有延迟时不进行再同步。

(6) 发送单元在帧起始到仲裁段有多个单元同时发送的情况下,对延迟边沿不进行再同步。

5.10 仲裁

can 总线上可以挂载多个通信结点,但是总线只有一条,同一时刻只能传输一个数据。那如何保证总线上的数据可以有序高效的传输呢。

主要通过以下方法:

  1. 非破坏性仲裁:显性优先,即显性优先级大于隐性优先级(线与机制:只有所有节点都发送隐性 1 时,总线才为 1,只要有一个节点发送显性 0,则总线就是显性 0)
  2. 载波侦听:总线上各个节点在发送数据前要侦听总线的状态,只有在总线是空闲状态时,才允许发送。
  3. 回读:节点在发送数据时要不停的检测要发送的数据。通过非破坏性仲裁判断是否与其他节点的数据发生冲突。

在总线空闲态,最先开始发送消息的单元获得发送权。

多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送。

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

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

相关文章

【北京迅为】iTOP-RK3568开发板OpenHarmony系统南向驱动开发UART接口运作机制

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

【嵌入式学习】时钟 - 边缘触发锁存器

目录 ## 时钟 ## 带边缘触发的寄存器 ## 优化内存走线 ## 画16位的内存 ## 时钟 波特率:一分钟说几个字 clock统一计算机内部的节奏,clock频率越高cpu速度越快 触发:电压的突变;下降沿:高变低;上升沿…

Linux C/C++编程——线程

线程是允许应用程序并发执行多个任务的一种机制,线程参与系统调度。 系统调度的最小单元是线程、而并非进程。 线程包含在进程之中,是进程中的实际运行单位。一个线程指的是进程中一个单一顺序的控制流(或者说是执行路线、执行流)…

CAN通信转TCP/IP通信协议解析

背景:最近项目开发受限于开发版只有一路CAN口和多个CAN通信对象的帧ID一样,考虑采用转换模块将CAN通信转成TCP/IP通信,间接实现获取CAN报文数据的目的。 1. 转换模块协议 首先想到的是采购周立功他家的多路CAN通信转TCP/IP通信模块&#xf…

vue:组件的使用

Vue:组件的使用 1、什么是组件 1.1、传统方式开发的应用 一个网页通常包括三部分:结构(HTML)、样式(CSS)、交互(JavaScript)。在传统开发模式下,随着项目规模的增大&a…

强大的AI网站推荐(第一集)—— Devv AI

网站:Devv AI 号称:最懂程序员的新一代 AI 搜索引擎 博主评价:我的大学所有的代码都是使用它,极大地提升了我的学习和开发效率。 推荐指数:🌟🌟🌟🌟🌟&#x…

gradle-8.13

gradle-8.13 稍微看了下,基于Maven改造的 https://gradle.org/install/https://github.com/gradle/gradle-distributions/releaseshttps://github.com/gradle/gradle-distributions/releases/download/v8.13.0/gradle-8.13-all.zip https://github.com/gradle/gra…

网络安全——SpringBoot配置文件明文加密

XTHS:第一步、XTHS:第二步、XTHS:第三步、XTHS:第四步 !就可以实现了。(但是前提,你要先对你的文本进行加密,然后按照ENC(加密文本),放到配置文件中) 一、前言…

wsl2配置xv6全解(包括22.04Jammy)

文章目录 获取xv6源代码Ubuntu20.04 Version安装指令成功测试参考MIT2021年官方文档 24.04 Version安装指令成功测试参考MIT2024年官方文档 Ubuntu 22.04没有官方文档? 配置大体流程1. 卸载原本qemu(如果之前安装了)2. clone qemu官方源代码&…

【机器学习-分类算法】

比如将一张图片按尺寸识别分类为横向或者纵向两类就是二分类问题 设x轴为图像的宽、y轴为图像的高,那么把训练数据展现在图上就是这样的: 若增加更多的数据集有: 如果只用一条线将图中白色的点和黑色的点分开,那么: 分类的目的就是找到这条线,就可以根据点在线…

java项目之基于ssm的疫苗预约系统(源码+文档)

项目简介 疫苗预约系统实现了以下功能: 用户信息管理 负责管理系统用户的信息。 疫苗信息管理 负责管理疫苗的相关信息。 疫苗类型管理 负责管理不同种类疫苗的信息。 疫苗留言管理 负责管理用户关于疫苗的留言和反馈。 公告信息管理 负责发布和管理与疫苗相关…

游戏引擎学习第171天

回顾并计划今天的内容 昨天,我们在处理一项任务时暂停了,当时的目标非常清晰,但由于时间限制,我们将其分成了两个部分。我们首先完成了运行时部分,而今天要处理的是资产打包部分。这项任务涉及改进字体系统&#xff0…

跨平台RTSP高性能实时播放器实现思路

跨平台RTSP高性能实时播放器实现思路 目标:局域网100ms以内超低延迟 一、引言 现有播放器(如VLC)在RTSP实时播放场景中面临高延迟(通常数秒)和资源占用大的问题。本文提出一种跨平台解决方案,通过网络层…

Deepseek+飞书实现简历分析建议+面试题

步骤一:创建多维表格 点击云文档点击主页点击新建创建多维表格 步骤二:创建列 首先将多余的列进行删除 创建简历内容列,类型使用文本,目的是将简历内容复制进来 创建AI列:简历分析、简历建议、面试题 点击确定后&…

Linux基础开发工具--gdb的使用

目录 安装准备: 1. 背景 2. 开始使用 3. 做一个Linux第一个小程序-进度条 安装准备: 对于gdb的学习使用,为了方便大家学习,我建议大家先安装一个cgdb进行学习,这样方便观察操作与学习gdb。 用以下…

leetcode热题100道——两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。 示例 1…

某公司制造业研发供应链生产数字化蓝图规划P140(140页PPT)(文末有下载方式)

详细资料请看本解读文章的最后内容。 资料解读:某公司制造业研发供应链生产数字化蓝图规划 在当今制造业数字化转型的浪潮中,企业信息化建设成为提升竞争力的关键。本资料围绕 XX 公司的信息化建设展开,涵盖业务战略、信息化路线图、各领域系…

【总结篇】java多线程,新建线程有几种写法,以及每种写法的优劣势

java多线程 新建线程有几种写法,以及每种写法的优劣势 [1/5]java多线程 新建线程有几种写法–继承Thread类以及他的优劣势[2/5]java多线程-新建线程有几种写法–实现Runnable接口以及他的优劣势[3/5]java多线程 新建线程有几种写法–实现Callable接口结合FutureTask使用以及他的…

GB9706.1-2020附件J绝缘路径参考

下图为GB9706.1-2020绝缘路径示例图,附件J。 MOOP:对操作者的防护措施 MOPP:对患者的防护措施 1、保护接地外壳,网电源及次级电路与外壳之间。 网电源-外壳:1MOOP 次级电路-外壳:1MOOP 2、未保护接地外壳&…

基于springboot的教务系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 这些年随着Internet的迅速发展,我们国家和世界都已经进入了互联网大数据时代,计算机网络已经成为了整个社会以及经济发展的巨大动能,各个高校的教务工作成为了学校管理事务的重要目标和任务,因此运用互联网技术来提高教务的…