STM32F1之CAN报文传输

news2024/12/17 19:40:02

目录

报文传输

1.  帧类型

1.1 数据帧

1.1.1  帧起始

1.1.2  仲裁场

1.1.3  控制场

1.1.4  数据场

1.1.5  CRC 场

1.1.6  应答场

1.1.7  帧结尾

1.2 远程帧

1.3 错误帧

1.4 过载帧

1.5 帧间空间(INTERFRAME SPACING)

2.  发送器/接收器的定义

2.1  发送器(TRANSMITTER)

2.2  接收器(RECEIVER)


报文传输

1.  帧类型

报文传输由以下 4 个不同的帧类型所表示和控制:

-数据帧:数据帧携带数据从发送器至接收器。

-远程帧:总线单元发出远程帧,请求发送具有同一识别符的数据帧。

-错误帧:任何单元检测到一总线错误就发出错误帧。

-过载帧:过载帧用以在先行的和后续的数据帧(或远程帧)之间提供一附加的延时。

数据帧(或远程帧)通过帧间空间与前述的各帧分开。

1.1 数据帧

数据帧由 7 个不同的位场组成:

帧起始、仲裁场、控制场、数据场、CRC 场、应答场、帧结尾。数据场的长度可以为 0。

1.1.1  帧起始

        它标志数据帧和远程帧的起始,由一个单独的“显性”位组成。

        只在总线空闲(参见“总线空闲”)时,才允许站开始发送(信号)。所有的站必须同步于首先开始发送信息的站的帧起始前沿(参见“硬同步”)。

1.1.2  仲裁场

        仲裁场包括识别符和远程发送请求位(RTR)。

        识别符:识别符的长度为 11 位。这些位的发送顺序是从 ID-10 到 ID-0。最低位是 ID-0。最高的 7 位(ID-10 到 ID-4)必须不能全是“隐性”。

        RTR 位:该位在数据帧里必须为“显性”,而在远程帧里必须为“隐性”。

1.1.3  控制场

        控制场由 6 个位组成,包括数据长度代码和两个将来作为扩展用的保留位。所发送的保留位必须为“显性”。接收器接收所有由“显性”和“隐性”组合在一起的位。

        数据长度代码:数据长度代码指示了数据场中字节数量。数据长度代码为 4 个位,在控制场里被发送。

数据长度代码中数据字节数的编码(DATA LENGTH CODE):

缩写:  d—“显性”

             r—“隐性”

        数据帧:允许的数据字节数:{0,1,....,7,8}。其他的数值不允许使用。

1.1.4  数据场

        数据场由数据帧中的发送数据组成。它可以为 0~8 个字节,每字节包含了 8 个位,首先发送 MSB。

1.1.5  CRC

        CRC 场包括 CRC 序列(CRC SEQUENCE),其后是 CRC 界定符(CRC DELIMITER)。

        CRC 序列:由循环冗余码求得的帧检查序列最适用于位数低于 127 位〈BCH 码〉的帧。为进行 CRC计算,被除的多项式系数由无填充位流给定,组成这些位流的成分是:帧起始、仲裁场、控制场、数据场(假如有),而 15 个最低位的系数是 0。将此多项式被下面的多项式发生器除(其系数以 2 为模):

X 15 + X 14 + X 10 + X 8 + X 7 + X 4 + X 3 + 1

        这个多项式除法的余数就是发送到总线上的 CRC 序列(CRC SEQUENCE)。为了实现这个功能,可以使用 15 位的位移寄存器 CRC_RG(14:0)。如果用 NXTBIT 标记指示位流的下一位,它由从帧的起始到数据场末尾都由无填充的位序列给定。

CRC 序列(CRC SEQUENCE)的计算如下:

CRC_RG = 0; // 初始化移位寄存器
REPEAT;
CRCNXT = NXTBIT EXOR CRC_RG(14); 
CRC_RG(14:1) = CRC_RG(13:0); // 寄存器左移 1 位 
CRC_RG(0) = 0; 
IF CRCNXT THEN 
CRC_RG(14:0) = CRC_RG(14:0) EXOR (4599hex); 
ENDIF 
UNTIL (CRC 序列开始或存在一个错误条件)

        在传送/接收数据场的最后一位以后,CRC_RG 包含有 CRC 序列。CRC 序列之后是 CRC 界定符,它包含一个单独的“隐性”位 。

1.1.6  应答场

        应答场长度为 2 个位,包含应答间隙(ACK SLOT)和应答界定符(ACK DELIMITER)。在应答场里,发送站发送两个“隐性”位。当接收器正确地接收到有效的报文,接收器就会在应答间隙(ACK SLOT)期间(发送 ACK 信号)向发送器发送一“显性”的位以示应答。

        应答间隙:所有接收到匹配 CRC 序列(CRC SEQUENCE)的站会在应答间隙(ACK SLOT)期间用一“显性”的位写入发送器的“隐性”位来作出回答。

        ACK 界定符:ACK 界定符是 ACK 场的第二个位,并且是一个必须为“隐性”的位。因此,应答间隙(ACK SLOT)被两个“隐性”的位所包围,也就是 CRC 界定符(CRC DELIMITER)和 ACK 界定符(ACK DELIMITER)。

1.1.7  帧结尾

        每一个数据帧和远程帧均由一标志序列界定。这个标志序列由 7 个“隐性”位组成。

1.2 远程帧

        通过发送远程帧,作为某数据接收器的站通过其资源节点对不同的数据传送进行初始化设置。

远程帧由 6 个不同的位场组成:

帧起始、仲裁场、控制场、CRC 场、应答场、帧末尾。

        与数据帧相反,远程帧的 RTR 位是“隐性”的。它没有数据场,数据长度代码的数值是不受制约的(可以标注为容许范围里 0...8 的任何数值)。此数值是相应于数据帧的数据长度代码。

        RTR 位的极性表示了所发送的帧是一数据帧(RTR 位“显性”)还是一远程帧(RTR“隐性”)。

1.3 错误帧

        错误帧由两个不同的场组成。第一个场用作为不同站提供的错误标志(ERROR FLAG)的叠加。第二个场是错误界定符。

        为了能正确地终止错误帧,一“错误被动”的节点要求总线至少有长度为 3 个位时间的总线空闲(如果“错误被动”的接收器有本地错误的话)。因此,总线的载荷不应为 100%。

        有两种形式的错误标志,主动错误标志(Active error flag)和被动错误标志(Passive error flag)。主动错误标志由 6 个连续的“显性”位组成。被动错误标志由 6 个连续的“隐性”的位组成,除非被其他节点的“显性”位重写。

        检测到错误条件的“错误主动”的站通过发送主动错误标志,以指示错误。错误标志的形式破坏了从帧起始到 CRC 界定符的位填充规则(参见“编码”),或者破坏了应答场或帧末尾场的固定形式。所有其他的站由此检测到错误条件并与此同时开始发送错误标志。因此,“显性”位(此“显性”位可以在总线上监视)的序列导致一个结果,这个结果就是把各个单独站发送的不同的错误标志叠加在一起。这个顺序的总长度最小为 6 个位,最大为 12 个位。

        检测到错误条件的“错误被动”的站试图通过发送被动错误标志,以指示错误。“错误被动”的站等待 6 个相同极性的连续位(这 6 个位处于被动错误标志的开始)。当这 6 个相同的位被检测到时,被动错误标志的发送就完成了。

        错误界定符包括 8 个“隐性”的位。

        错误标志传送了以后,每一站就发送“隐性”的位并一直监视总线直到检测出一个“隐性”的位为止。然后就开始发送 7 位以上的“隐性”位。

1.4 过载帧

        过载帧包括两个位场:过载标志和过载界定符。

有两种过载条件都会导致过载标志的传送:

1. 接收器的内部条件(此接收器对于下一数据帧或远程帧需要有一延时)。

2. 间歇场期间检测到一“显性”位。

        由过载条件 1 而引发的过载帧只允许起始于所期望的间歇场的第一个位时间开始。而由过载条件 2 引发的过载帧应起始于所检测到“显性”位之后的位。

通常为了延时下一个数据帧或远程帧,两个过载帧都会产生。

过载标志

过载标志由 6 个“显性”的位组成。过载标志的所有形式和主动错误标志的一样。过载标志的形式破坏了间歇场的固定形式。因此,所有其他的站都检测到一过载条件并与此同时发出过载标志。(万一有的节点在间歇的第 3 个位期间于本地检测到“显性”位,则其他的节点将不能正确地解释过载标志,而是将这 6 个“显性”位中的第一个位解释为帧的起始。这第 6 个“显性”的位破坏了产生错误条件的位填充的规则。)

过载界定符

过载界定符包括 8 个“隐性”的位。

过载界定符的形式和错误界定符的形式一样。过载标志被传送后,站就一直监视总线直到检测到一个从“显性”位到“隐性”位的发送(过渡形式)。此时,总线上的每一个站完成了过载标志的发送,并开始同时发送 7 个以上的“隐性”位。

1.5 帧间空间(INTERFRAME SPACING)

        数据帧(或远程帧)与其前面帧的隔离是通过帧间空间实现的,无论其前面的帧为何类型(数据帧、远程帧、错误帧、过载帧)。所不同的是,过载帧与错误帧之前没有帧间空间,多个过载帧之间也不是由帧间空间隔离的。

帧间空间

        帧间空间包括间歇场、总线空闲的位场。如果“错误被动”的站已作为前一报文的发送器时,则其帧空间除了间歇、总线空闲外,还包括称作挂起传送(SUSPEND TRANSMISSION)的位场。        

        对于不是“错误被动” 的站,或者此站已作为前一报文的接收器,其帧间空间如下图所示:

对于已作为前一报文发送器的“错误被动”的站,其帧间空间如下图所示:

间歇

        间歇包括 3 个“隐性”的位。

        间歇期间,所有的站均不允许传送数据帧或远程帧,唯一要做的是标示一个过载条件。

总线空闲

        总线空闲的(时间)长度是任意的。只要总线被认定为空闲,任何等待发送信息的站就会访问总线。在发送其他信息期间,有报文被挂起,对于这样的报文,其传送起始于间歇之后的第一个位。

        总线上检测到的“显性”的位可被解释为帧的起始。

挂起传送

        “错误被动”的站发送报文后,站就在下一报文开始传送之前或总线空闲之前发出 8 个“隐性”的位跟随在间歇的后面。如果与此同时另一站开始发送报文(由另一站引起),则此站就作为这个报文的接收器。

2.  发送器/接收器的定义

2.1  发送器(TRANSMITTER)

        产生报文的单元被称之为报文的“发送器”。此单元保持作为报文发送器直到总线出现空闲或此单元失去仲裁(ARBITRATION)为止。

2.2  接收器(RECEIVER)

        如果有一单元不作为报文的发送器并且总线也不空闲,则这一单元就被称之为报文的“接收器”。

STM32F1之CAN介绍-CSDN博客

STM32F1之CAN基本概念-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【动态规划】【广度优先】LeetCode2258:逃离火灾

作者推荐 本文涉及的基础知识点 二分查找算法合集 动态规划 二分查找 题目 给你一个下标从 0 开始大小为 m x n 的二维整数数组 grid ,它表示一个网格图。每个格子为下面 3 个值之一: 0 表示草地。 1 表示着火的格子。 2 表示一座墙,你跟…

【C语言】内联函数

一、内联函数 在C语言中,内联函数(Inline function)是一种代码优化技术,它的目的是减少函数调用的开销。内联函数通知编译器在每个函数调用的位置插入函数的实际代码,而不是进行传统的函数调用。这避免了调用函数时的…

球上进攻^^

欢迎来到程序小院 球上进攻 玩法&#xff1a;点击鼠标走动躲避滚动的球球&#xff0c;球球碰到即为游戏结束&#xff0c;看看你能坚持多久&#xff0c;快去玩吧^^。开始游戏https://www.ormcc.com/play/gameStart/214 html <div id"game" class"game" …

【基于Flask、MySQL和Echarts的热门游戏数据可视化平台设计与实现】

基于Flask、MySQL和Echarts的热门游戏数据可视化平台设计与实现 前言数据获取与清洗数据集数据获取数据清洗 数据分析与可视化数据分析功能可视化功能 创新点结语 前言 随着游戏产业的蓬勃发展&#xff0c;了解游戏销售数据对于游戏从业者和游戏爱好者都至关重要。为了更好地分…

(六)五种最新算法(SWO、COA、LSO、GRO、LO)求解无人机路径规划MATLAB

一、五种算法&#xff08;SWO、COA、LSO、GRO、LO&#xff09;简介 1、蜘蛛蜂优化算法SWO 蜘蛛蜂优化算法&#xff08;Spider wasp optimizer&#xff0c;SWO&#xff09;由Mohamed Abdel-Basset等人于2023年提出&#xff0c;该算法模型雌性蜘蛛蜂的狩猎、筑巢和交配行为&…

DataFrame的使用

查看数据类型及属性 # 查看df类型 type(df) # 查看df的shape属性&#xff0c;可以获取DataFrame的行数&#xff0c;列数 df.shape # 查看df的columns属性&#xff0c;获取DataFrame中的列名 df.columns # 查看df的dtypes属性&#xff0c;获取每一列的数据类型 df.dtypes df.i…

模型能力赋能搜索——零样本分类(Zero-Shot Classification)在搜索意图识别上的探索

什么是Zero-Shot Classification https://huggingface.co/tasks/zero-shot-classification hugging face上的零样本分类模型 facebook/bart-large-mnli https://huggingface.co/facebook/bart-large-mnli 当然这是一个英文模型&#xff0c;我们要去用一些多语言的模型。 可以在…

Android 样式小结

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、使用3.1 创建并应用样式3.2 创建并…

Azure Machine Learning - 使用 Azure OpenAI 服务生成图像

在浏览器/Python中使用 Azure OpenAI 生成图像&#xff0c;图像生成 API 根据文本提示创建图像。 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕&#xff0c;复旦机器人智能实验室成员&#x…

点击el-tree小三角后去除点击后的高亮背景样式,el-tree样式修改

<div class"videoTree" v-loading"loadingTree" element-loading-text"加载中..." element-loading-spinner"el-icon-loading" element-loading-background"rgba(0, 0, 0, 0.8)" > <el-tree :default-expand-all&q…

可视化监控云平台/智能监控平台EasyCVR国标设备开启音频没有声音是什么原因?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。GB28181视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存…

Nacos源码解读09——配置中心配置信息创建修改怎么处理的

存储配置 从整体上Nacos服务端的配置存储分为三层&#xff1a; 内存&#xff1a;Nacos每个节点都在内存里缓存了配置&#xff0c;但是只包含配置的md5&#xff08;缓存配置文件太多了&#xff09;&#xff0c;所以内存级别的配置只能用于比较配置是否发生了变更&#xff0c;只用…

基于SSM实现的公文管理系统

一、技术架构 前端&#xff1a;jsp | jquery | bootstrap 后端&#xff1a;spring | springmvc | mybatis 环境&#xff1a;jdk1.8 | mysql | maven 二、代码及数据库 三、功能介绍 01. 登录页 02. 首页 03. 系统管理-角色管理 04. 系统管理-功能管理 05. 系统管理-用…

[数据启示录 02] 堆栈

堆栈&#xff08;stack&#xff09;是一种基于后进先出&#xff08;LIFO&#xff0c;Last In First Out&#xff09;原则的数据结构。它模拟了现实生活中的堆栈&#xff0c;类似于一摞盘子或一堆书。 堆栈有两个基本操作&#xff1a;入栈&#xff08;push&#xff09;和出栈&a…

前端面试——CSS面经(持续更新)

1. CSS选择器及其优先级 !important > 行内样式 > id选择器 > 类/伪类/属性选择器 > 标签/伪元素选择器 > 子/后台选择器 > *通配符 2. 重排和重绘是什么&#xff1f;浏览器的渲染机制是什么&#xff1f; 重排(回流)&#xff1a;当增加或删除dom节点&…

SLAM算法与工程实践——SLAM基本库的安装与使用(4):Sophus库

SLAM算法与工程实践系列文章 下面是SLAM算法与工程实践系列文章的总链接&#xff0c;本人发表这个系列的文章链接均收录于此 SLAM算法与工程实践系列文章链接 下面是专栏地址&#xff1a; SLAM算法与工程实践系列专栏 文章目录 SLAM算法与工程实践系列文章SLAM算法与工程实践…

数据结构之交换排序

目录 交换排序 冒泡排序 冒泡排序的时间复杂度 快速排序 快速排序单趟排序的时间复杂度 快速排序的时间复杂度 快速排序的优化 优化1&#xff1a;三数取中法 优化2&#xff1a;小区间优化法 交换排序 在日常生活中交换排序的使用场景是很多的&#xff0c;比如在学校做…

第76讲:MySQL数据库中常用的命令行工具的基本使用

文章目录 1.mysql客户端命令工具2.mysqladmin管理数据库的客户端工具3.mysqlbinlog查看数据库中的二进制日志4.mysqlshow统计数据库中的信息5.mysqldump数据库备份工具6.mysqllimport还原备份的数据7.source命令还原SQL类型的备份文件 MySQL数据库提供了很多的命令行工具&#…

Linux系统---简易伙伴系统

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、题目要求 1.采用C语言实现 2.伙伴系统采用free_area[11]数组来组织。要求伙伴内存最小为一个页面&#xff0c;页面大小为4KB…

2023年电工(初级)证模拟考试题库及电工(初级)理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年电工&#xff08;初级&#xff09;证模拟考试题库及电工&#xff08;初级&#xff09;理论考试试题是由安全生产模拟考试一点通提供&#xff0c;电工&#xff08;初级&#xff09;证模拟考试题库是根据电工&…