CAN总线协议的帧组成

帧用途
数据帧 用于发送单元向接收单元传送数据的帧。
遥控帧 用于接收单元向具有相同ID的发送单元请求数据的帧。
错误帧 用于当检测出错误时向其它单元通知错误的帧。
过载帧 用于接收单元通知其尚未做好接收准备的帧。
帧间隔 用于将数据帧及遥控帧与前面的帧分离开来的帧。

数据帧

数据帧用于在总线上进行数据传输,其结构根据标准帧(也称作基础帧、11位标识符帧)和扩展帧(29位标识符帧)有所不同。下面是这两种类型数据帧的基本组成:

标准数据帧 (11位ID)

  1. 起始位(SOF): 表示数据帧的开始。
  2. 仲裁段:
    • 11位标识符(Identifier): 用于确定消息的优先级。
    • 远程发送请求(RTR)位:数据帧中该位为显性电平,表示这是一个数据帧而不是远程帧。
  3. 控制段:
    • IDE位:指示是否使用标准或扩展格式(对于标准帧此位为显性)。
    • r0保留位。
    • 数据长度码(DLC): 表示数据字段中的字节数量(0-8字节)。
  4. 数据段: 包含要发送的数据,最多8个字节。
  5. CRC段: 循环冗余校验序列,用于错误检测。
  6. ACK段: 确认位和分隔符,确认有节点成功接收了该消息。
  7. 结束帧(EFF): 表示数据帧的结束。

扩展数据帧 (29位ID)

与标准数据帧相比,扩展数据帧多了SRR位和18位额外的标识符,使得整个标识符达到29位长:

  1. 起始位(SOF): 同标准帧。
  2. 仲裁段:
    • 11位标识符。
    • 替代远程请求(SRR)位:总是隐性的,在扩展帧中代替RTR位。
    • IDE位:在扩展帧中是隐性的,表明这是扩展格式。
    • 18位额外的标识符部分。
    • RTR位:位于扩展标识符之后。
  3. 其余部分(控制段、数据段、CRC段、ACK段、EFF)与标准数据帧相同。

这些组成部分共同确保了CAN网络能够高效且可靠地进行通信。


遥控帧

遥控帧(Remote Frame)用于请求特定ID的数据帧。与数据帧相似,遥控帧也分为标准格式(11位标识符)和扩展格式(29位标识符)。但是,遥控帧并不包含数据段,其主要用途是向网络中的其他节点请求发送具有相同标识符的数据帧。以下是遥控帧的基本组成结构:

标准遥控帧 (11位ID)

  1. 起始位(SOF): 表示遥控帧的开始。
  2. 仲裁段:
    • 11位标识符(Identifier): 用来匹配目标数据帧的标识符。
    • 远程发送请求(RTR)位:在遥控帧中该位为隐性电平,以区别于数据帧。
  3. 控制段:
    • IDE位:指示是否使用标准或扩展格式(对于标准遥控帧此位为显性)。
    • r0保留位。
    • 数据长度码(DLC): 虽然遥控帧不携带数据,但仍需指定DLC来匹配所请求的数据帧的数据长度。
  4. CRC段: 循环冗余校验序列,用于错误检测。
  5. ACK段: 确认位和分隔符,确认有节点成功接收了该消息。
  6. 结束帧(EFF): 表示遥控帧的结束。

扩展遥控帧 (29位ID)

与标准遥控帧相比,扩展遥控帧增加了SRR位和额外的18位标识符,使得整个标识符达到29位长:

  1. 起始位(SOF): 同标准遥控帧。
  2. 仲裁段:
    • 11位标识符。
    • 替代远程请求(SRR)位:总是隐性的,在这里没有实际功能,主要是为了保持与扩展数据帧的一致性。
    • IDE位:在扩展遥控帧中是隐性的,表明这是扩展格式。
    • 18位额外的标识符部分。
    • RTR位:位于扩展标识符之后,并且同样设置为隐性以表示这是一个遥控帧。
  3. 其余部分(控制段、CRC段、ACK段、EFF)与标准遥控帧相同。

遥控帧通过这种机制让网络上的节点能够主动请求信息,而不是等待数据帧自发地被广播。这对于需要即时响应或特定数据的应用非常有用。


错误帧

错误帧用于通知网络上的所有节点发生了传输错误。当任何节点检测到总线上的消息存在错误时,它会发送一个错误帧来中断当前的传输,并促使其他节点也识别出该错误。错误帧由两个不同的字段组成,旨在打破正常的消息流并确保网络上所有的节点都能察觉到错误的发生。

错误帧组成

  1. 错误标志叠加(Error Flag Superposition):

    • 由6个连续的显性位组成(对于高速CAN)。这是违反了CAN协议中的位填充规则(每5个相同电平的位之后必须跟一个相反电平的位),因此可以有效地打断正在传输的数据帧或遥控帧。
    • 当多个节点同时检测到错误并尝试发送它们自己的错误标志时,这些标志会在总线上叠加,可能会导致超过6个显性位出现。这是因为每个节点都试图通过发送自身的错误标志来中断通信,结果可能产生更长的显性位序列。
  2. 错误界定符(Error Delimiter):

    • 包含8个隐性位,作为缓冲区,帮助区分错误标志和后续可能开始的新消息。
    • 这部分允许总线恢复平静状态,为接下来的信息传输做好准备。

工作原理

  • 当某个节点检测到错误(例如位错误、填充错误、ACK错误等),它会立即开始发送错误标志,从而破坏当前的位流。
  • 其他监听的节点也会检测到这个不寻常的位模式(即连续的显性位),并理解这是一个错误信号。
  • 在错误标志后跟随的错误界定符确保了网络有一个清晰的间隔来恢复正常操作,防止新旧信息之间的混淆。

通过这种方式,CAN协议能够快速响应并纠正传输过程中的错误,确保数据的准确性和可靠性。此外,这种机制还支持分布式错误处理,使得网络中的每一个节点都能够参与到维护通信质量的过程中。


过载帧

过载帧用于通知网络上的其他节点当前节点暂时无法处理更多的消息,即表示接收方负载过重。过载帧主要用于防止接收方因数据量过大而发生溢出或丢失信息的情况。过载帧的结构与错误帧相似,但其用途和触发条件不同。

过载帧组成

过载帧由两个主要部分组成:

  1. 过载标志(Overload Flag):

    • 类似于错误标志,过载标志也是由6个连续的显性位组成。
    • 这种序列违反了CAN协议中的位填充规则(每5个相同电平的位之后必须跟一个相反电平的位),因此可以有效地打断正在传输的数据帧或遥控帧。
    • 如果多个节点同时检测到过载情况并尝试发送它们自己的过载标志时,这些标志会在总线上叠加,可能会导致超过6个显性位出现。
  2. 过载界定符(Overload Delimiter):

    • 包含8个隐性位,作为缓冲区,帮助区分过载标志和后续可能开始的新消息。
    • 这部分允许总线恢复平静状态,为接下来的信息传输做好准备。

触发条件

过载帧通常在以下两种情况下被发送:

  • 第一类过载条件:接收方在处理完前一帧后,没有足够的时间来处理即将到来的新帧。这种情况下,接收方需要一些额外的时间来完成当前的操作。
  • 第二类过载条件:当一个节点检测到一个错误,并且该错误是在它已经开始了对一个帧的接收之后发现的。但是,在现代实现中,这种情况很少见,因为大多数情况下,错误会通过错误帧来处理。

工作原理

  • 当某个节点遇到上述任一过载条件时,它将发送过载标志以中断当前的传输。
  • 其他监听的节点也会检测到这个不寻常的位模式(即连续的显性位),并理解这是一个过载信号。
  • 在过载标志后跟随的过载界定符确保了网络有一个清晰的间隔来恢复正常操作,防止新旧信息之间的混淆。

通过这种方式,CAN协议能够灵活应对网络中各个节点的不同处理能力,避免由于处理速度不匹配导致的数据丢失或其他通信问题。这增强了CAN网络的稳定性和可靠性。


帧间隔

帧间隔用于分隔不同的数据帧、遥控帧或错误帧,确保网络通信的有序进行。帧间隔的存在有助于避免消息之间的混淆,并为接收节点提供时间来处理接收到的信息。帧间隔主要由三个部分组成:间歇场(Intermission)、总线空闲(Bus Idle)和等待空闲(Suspension),但通常讨论时主要关注的是间歇场部分。以下是详细说明:

帧间隔的组成

  1. 间歇场 (Intermission):

    • 间歇场是帧间隔的核心组成部分,它由3个隐性位组成。
    • 它的作用是在两个连续的数据帧、遥控帧或错误帧之间提供一个短暂的间隔,允许网络上的各个节点准备接收下一个可能到来的消息。
    • 在标准CAN(ISO 11898-2)中,这个间隔对于保持网络同步至关重要。
  2. 总线空闲 (Bus Idle):

    • 总线空闲并不是严格意义上的帧间隔的一部分,但它是一个重要的概念,指的是网络上没有任何活动的状态。
    • 在总线空闲期间,任何节点都可以开始传输新的消息。
    • 这个状态没有固定的时间长度,可以持续任意长的时间,直到有节点发起新的传输为止。
  3. 等待空闲 (Suspension, 仅适用于扩展帧格式):

    • 等待空闲是指发送节点在发送完一帧后需要等待一段时间才能发送下一帧的情况。
    • 在实际应用中,这个概念较少被单独提及,因为现代实现中更注重间歇场的应用。
    • 对于某些特定配置或者高级应用场景,可能会涉及到此机制以确保网络稳定性和数据传输的正确性。

工作原理

  • 在发送完一个数据帧、遥控帧或错误帧之后,发送节点会发出间歇场,通知其他节点当前帧已经结束。
  • 接收节点利用这段时间来处理接收到的信息并准备接收下一个可能到来的消息。
  • 如果在一个间歇场结束后,没有新的消息立即开始传输,则网络进入总线空闲状态,直到有节点开始新的传输。

通过这种机制,CAN协议确保了即使在网络负载较高的情况下,也能维持有效的信息分离和适当的处理时间,从而保证了通信的可靠性和效率。

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

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

相关文章

unity直接安装插件

一共三步 1.窗口->包管理器2. 在弹出的界面里点左上角的加号 依次解读选项为disk 文件夹(zip压缩文件请提前解压)tarball 压缩包(只支持tar压缩包)git URL 网址下载(国内应该得设置代理)by name 指定软件和版本下载 3.以disk为例,进入解压的地方选中package.json接着…

北航计网课程笔记-四、网络层

第四章 网络层 本章重点 1、IP数据报的格式和分片 2、IP地址的表示和分类分配、子网掩码、地址有效性、广播地址 3、子网划分 4、CIDR路由聚合 5、ARP协议和ICMP协议 6、路由表、路由器的工作原理 7、RIP协议和OSPF协议 8、网络层的综合设计和应用 网络层的功能 网络层的主要任…

北航计网课程笔记-六、应用层

第六章 应用层 应用层概述 应用层对应用程序的通信提供服务。应用层的功能:文件传输、访问和管理 电子邮件 虚拟终端 查询服务和远程作业登录应用层的重要协议FTP SMTP、POP3 HTTP DNS网络应用模型 客户/服务器模型C/S客户是服务请求方,服务器是服务提供方 Web、FTP、远程登录…

北航计网课程笔记-七、一些总结

复习到最后想开摆了,也没总结啥,只是一些格式……一些总结MAC帧格式IP数据报格式 IP首部20B~60B IP总长最多65535BTCP报文格式 TCP首部20B~60B 数据部分最多65535-20-20 = 65495BUDP报文格式UDP&TCP伪首部格式HTTP报文格式

北航计网课程笔记-一、概述

写在前面:本笔记根据王道408完成,北航软院不考的内容不在其中。 总之复习期末把王道刷一遍就行了。 个人学习用,如有错误敬请指正。第一章 概述 计算机网络概念 计算机网络的定义:一些互联的、自治的计算机的集合,主体是多台计算机,媒介为通信媒介, 目的是通信与资源共享…

北航计网课程笔记-二、物理层

第二章 物理层 物理层的任务:将原始的比特流从一台机器上传输到另一台机器上。 确定与传输媒体的接口特性:机械、电气、功能、规程通信基础 一些基本概念数据,信号和码元数据是传送信息的实体;信号是数据的电气或电磁表现;码元是数字通信中数字信号的计量单位,1码元可以携…

Winform和MFC的一个区别

前段时间我嫌桌面快捷键太多,我使用C语言用MFC制作了桌面自定义系统(上图左),可是这个系统存在一些问题,比如(下图) 默认情况下它的右上角没有最大化和最小化的按钮,而Winform是有的(下图)。 还有一个问题:在任务栏,点击时MFC不能最小化,而Winform可以;还有一个很…

应用中的 PostgreSQL项目案例

title: 应用中的 PostgreSQL项目案例 date: 2025/2/3 updated: 2025/2/3 author: cmdragon excerpt: 随着大数据和云计算的兴起,企业在数据管理和数据分析方面面临着越来越复杂的挑战。PostgreSQL 作为一个开源关系型数据库,凭借其卓越的扩展性和强大的功能,逐渐成为众多企业…

来自aakennes的新年祝福

来自aakennes的新年祝福组题人: @aakennes \(A\) P888. 字符串会上树 \(AC\)基础字符串。点击查看代码 string s,t="",w=""; map<string,string>f; int main() { // #define Isaac #ifdef Isaacfreopen("in.in","r",stdin);fr…

1.3 决定程序流程的程序计数器

CPU先执行0100 CPU每执行一个指令,程序计数器的值就会自动加1 CPU的控制器就会参照程序计数器的数值,从内存中读取命令并执行。 程序计数器决定着程序的流程

【每日一题】20250203

你是万千星球的星球! 你是沸腾的准则!你是精心保存的潜伏的萌芽!你是核心!【每日一题】我国发射的“天宫一号”和“神州八号”在对接前,”天宫一号”的运行轨道高度为 \(350 \; \mathrm{km}\),“神州八号”的运行轨道高度为 \(343 \; \mathrm{km}\).它们的运行轨道均视为…

题解:P11637 Mod

题解:P11637 Mod 题目传送门 思路 一种比较简单的方法。 根据题意,我们可以发现在若干次操作后 \(a\) 能变成 \(0\) 的情况下,操作次数为 \(p-a\)。因为 \(b\) 的操作次数与 \(a\) 相同,所以 \(b\) 的值为 \(b-(p-a)\)。因为题面中要求 \(b\) 为一个自然数,所以自然就分成…