目录

1. CAN 协议的基本概念

2. CAN 协议及标准规格

2.1 ISO 标准化的 CAN 协议

2.2 ISO11898 和 ISO11519-2 的不同点

3. CAN协议

3.1 帧的种类

3.2 数据帧

3.3 遥控帧

3.4 错误帧

3.5 过载帧

4. CAN协议帧的其他要点

4.1 帧间隔

4.2 优先级的决定

4.2.1  数据帧和遥控帧的优先级

4.2.2 标准格式和扩展格式的优先级

4.3 位填充

4.4 错误的种类

4.5 位时序

5. 总结


1. CAN 协议的基本概念

        CAN 协议如表 所示涵盖了 ISO 规定的 OSI(Open Systems Interconnection 开放式系统间互联)基本参照模型中的传输层、数据链路层及物理层。
        CAN 协议中关于 ISO/OSI 基本参照模型中的传输层、数据链路层及物理层,具体有哪些定义如图 所示。

2. CAN 协议及标准规格

2.1 ISO 标准化的 CAN 协议

        CAN 协议经 ISO 标准化后有 ISO11898 标准和 ISO11519-2 标准两种。ISO11898 和 ISO11519-2 标准对于数据 链路层的定义相同,但物理层不同。
(1) 关于 ISO11898
        ISO11898 是通信速度为 125kbps-1Mbps 的 CAN 高速通信标准。 目前,ISO11898 追加新规约后,成为 ISO11898-1 新标准。
(2) 关于 ISO11519
        ISO11519 是通信速度为 125kbps 以下的 CAN 低速通信标准。ISO11519-2 是 ISO11519-1 追加新规约后的版本。
下图表示 CAN 协议和 ISO11898 及 ISO11519-2 标准的范围。

2.2 ISO11898 和 ISO11519-2 的不同点

(1) 物理层的不同点
        如下图所示,ISO11898 和 ISO11519-2 在 CAN 协议中物理层的标准有所不同。CAN 协议的物理层如下图所 示,定义了三个子层,ISO11898 和 ISO11519-2 在物理层中的 PMA 层和 MDI 层有所不同。

在物理层(PMA 层、MDI 层),ISO11898 和 ISO11519-2 的主要不同点如下表所示:

3. CAN协议

3.1 帧的种类

通信是通过以下 5 种类型的帧进行的。
  • 数据帧
  • 遥控帧
  • 错误帧
  • 过载帧
  • 帧间隔
        另外,数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有 11 个位的标识符(Identifier: 以下称 ID), 扩展格式有 29 个位的 ID。
各种帧的用途如下表所示,各种帧的构成如下图所示。

3.2 数据帧

数据帧由 7 个段构成。
数据帧的构成如上图所示。
(1) 帧起始(标准、扩展格式相同)
        表示数据帧开始的段。1个位的显性位。

【注】显性电平和隐性电平:

  • 总线上的电平有显性电平和隐性电平两种。
  • 总线上执行逻辑上的线“与”时,显性电平的逻辑值为“0”,隐性电平为“1”。
  • “显性”具有“优先”的意味,只要有一个单元输出显性电平,总线上即为显性电平。并且,“隐性”具有“包容”的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平。(显性电平比隐性电平更强。)
(2) 仲裁段(标准格式和扩展格式构成有所不同)
        表示该帧优先级的段。
  • 标准格式的 ID 有 11 个位。从 ID28 到 ID18 被依次发送。禁止高 7 位都为隐性。 (禁止设定:ID=1111111XXXX)
  • 扩展格式的 ID 有 29 个位。基本 ID 从 ID28 到 ID18,扩展 ID 由 ID17 到 ID0 表示。基本 ID 和 标准格式的 ID 相同。禁止高 7 位都为隐性。(禁止设定:基本 ID=1111111XXXX)
(3) 控制段
        表示数据的字节数及保留位的段。控制段由 6 个位构成,表示数据段的字节数。标准格式和扩展格式的构成有所不同。
【注】:
*1 保留位(r0、r1)
保留位必须全部以显性电平发送。但接收方可以接收显性、隐性及其任意组合的电平。
*2 数据长度码(DLC)
数据长度码与数据的字节数的对应关系如表 8 所示。
数据的字节数必须为 0~8 字节。但接收方对 DLC = 9~15 的情况并不视为错误。

(4) 数据段(标准、扩展格式相同)
        数据的内容,可发送 0~8 个字节的数据,从 MSB(最高位)开始输出。
(5) CRC 段(标准/扩展格式相同)
        检查帧的传输错误的段。15 个位的 CRC 顺序和1个位的 CRC 界定符(用于分隔的位)构成。

【注】:CRC 顺序是根据多项式生成的 CRC 值,CRC 的计算范围包括帧起始、仲裁段、控制段、数据段。 接收方以同样的算法计算 CRC 值并进行比较,不一致时会通报错误。

(6) ACK 段

表示确认正常接收的段。ACK 槽(ACK Slot)和 ACK 界定符 2 个位构成。

【注】:
*1 发送单元的 ACK 段
发送单元在 ACK 段发送 2 个位的隐性位。
*2 接收单元的 ACK 段
接收到正确消息的单元在 ACK 槽(ACK Slot)发送显性位,通知发送单元正常接收结束。这称作“发
送 ACK”或者“返回 ACK”。
(7) 帧结束
        表示数据帧结束的段。7 个位的隐性位构成。

3.3 遥控帧

接收单元向发送单元请求发送数据所用的帧。遥控帧由 6 个段组成。遥控帧没有数据帧的数据段。
遥控帧的构成如下图所示。

  • •数据帧和遥控帧的不同

遥控帧的 RTR 位为隐性位,没有数据段。

        没有数据段的数据帧和遥控帧可通过 RTR 位区别开来。
  • 遥控帧没有数据段,数据长度码该如何表示?
        遥控帧的数据长度码以所请求数据帧的数据长度码表示。
  • 没有数据段的数据帧有何用途?
        例如,可用于各单元的定期连接确认/应答、或仲裁段本身带有实质性信息的情况下。
下面对帧的构成进行说明。

3.4 错误帧

        用于在接收和发送消息时检测出错误通知错误的帧。错误帧由错误标志和错误界定符构成。
错误帧的构成如下图所示。
(1) 错误标志
错误标志包括主动错误标志和被动错误标志两种。
主动错误标志:6 个位的显性位。
被动错误标志:6 个位的隐性位。
(2) 错误界定符
错误界定符由 8 个位的隐性位构成。

3.5 过载帧

        过载帧是用于接收单元通知其尚未完成接收准备的帧。过载帧由过载标志和过载界定符构成。 过载帧的构成如下图所示。
(1) 过载标志
6 个位的显性位。
过载标志的构成与主动错误标志的构成相同。
(2) 过载界定符
8 个位的隐性位。
过载界定符的构成与错误界定符的构成相同。

4. CAN协议帧的其他要点

4.1 帧间隔

        帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、 遥控帧、错误帧、过载帧)分开。
过载帧和错误帧前不能插入帧间隔。
帧间隔的构成如下图所示。
(1) 间隔
        3 个位的隐性位。
(2) 总线空闲
        隐性电平,无长度限制(0 亦可)。
        本状态下,可视为总线空闲,要发送的单元可开始访问总线。
(3) 延迟传送(发送暂时停止)
        8 个位的隐性位。
        只在处于被动错误状态的单元刚发送一个消息后的帧间隔中包含的段。

4.2 优先级的决定

在总线空闲态,最先开始发送消息的单元获得发送权。
多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继 续发送。
仲裁的过程如下图所示。

4.2.1  数据帧和遥控帧的优先级

具有相同 ID 的数据帧和遥控帧在总线上竞争时,仲裁段的最后一位(RTR)为显性位的数据帧具有优先权, 可继续发送。
数据帧和遥控帧的仲裁过程如下图所示。

4.2.2 标准格式和扩展格式的优先级

标准格式 ID 与具有相同 ID 的遥控帧或者扩展格式的数据帧在总线上竞争时,标准格式的 RTR 位为显性位 的具有优先权,可继续发送。
标准格式和扩展格式的仲裁过程如下图所示。

4.3 位填充

        位填充是为防止突发错误而设定的功能。当同样的电平持续 5 位时则添加一个位的反型数据。 位填充的构成如下图所示。
(1) 发送单元的工作
        在发送数据帧和遥控帧时,SOF~CRC 段间的数据,相同电平如果持续 5 位,在下一个位(第 6 个位)则 要插入 1 位与前 5 位反型的电平。
(2) 接收单元的工作
        在接收数据帧和遥控帧时,SOF~CRC 段间的数据,相同电平如果持续 5 位,需要删除下一个位(第 6 个 位)再接收。如果这个第 6 个位的电平与前 5 位相同,将被视为错误并发送错误帧。

4.4 错误的种类

错误共有 5 种。多种错误可能同时发生。
  • 位错误
  • 填充错误
  • CRC 错误
  • 格式错误
  • ACK 错误
错误的种类、错误的内容、错误检测帧和检测单元如下表所示。

(1) 位错误
        位错误由向总线上输出数据帧、遥控帧、错误帧、过载帧的单元和输出 ACK 的单元、输出错误的单元来
检测。
        在仲裁段输出隐性电平,但检测出显性电平时,将被视为仲裁失利,而不是位错误。
        在仲裁段作为填充位输出隐性电平时,但检测出显性电平时,将不视为位错误,而是填充错误。
        发送单元在 ACK 段输出隐性电平,但检测到显性电平时,将被判断为其它单元的 ACK 应答,而非位错误。
        输出被动错误标志(6 个位隐性位)但检测出显性电平时,将遵从错误标志的结束条件,等待检测出连续相同 6 个位的值(显性或隐性),并不视为位错误。
(2) 格式错误
即使接收单元检测出 EOF(7 个位的隐性位)的最后一位(第 8 个位)为显性电平,也不视为格式错误。
        即使接收单元检测出数据长度码(DLC)中 9∼15 的值时,也不视为格式错误。

4.5 位时序

由发送单元在非同步的情况下发送的每秒钟的位数称为位速率。一个位可分为 4 段。
  • 同步段(SS)
  • 传播时间段(PTS)
  • 相位缓冲段 1(PBS1)
  • 相位缓冲段 2(PBS2)
这些段又由可称为 Time Quantum(以下称为 Tq)的最小时间单位构成。
1 位分为 4 个段,每个段又由若干个 Tq 构成,这称为位时序。
1 位由多少个 Tq 构成、每个段又由多少个 Tq 构成等,可以任意设定位时序。通过设定位时序,多个单元可同时采样,也可任意设定采样点。
各段的作用和 Tq 数如下表所示。1 个位的构成如下图所示。

【注】:所谓采样点是读取总线电平,并将读到的电平作为位值的点。位置在 PBS1 结束处。

5. 总结

目前CAN总线中使用最广泛的正是CAN 2.0 A/B协议,上述协议正是如此,也称作传统CAN(Classic CAN)。其中CAN 2.0A协议仅支持标帧格式,而CAN 2.0B协议支持标准帧格式(Stand Frame,11位标识符)和扩展帧格式(Extend Frame,29位标识符),CAN 2.0B协议的存在只是为了解决标识符不够用的情况(标识符也称作CAN ID,位于数据帧或遥控帧的仲裁场),所以CAN 2.0B和CAN 2.0A一样每个数据帧最多传输8个字节的数据。标准帧和扩展帧可以在同一条CAN总线上传输。仅支持CAN 2.0A的设备会丢弃接收到的扩展数据帧/扩展遥控帧(因为控制场的保留位不符合语法),但是不会报错。

CAN总线(二)——CAN2.0标准与协议分析相关推荐

  1. CAN2.0和J1939协议的关系

    转发自http://www.cankau.cn/support/help/can-vs-j1939.html 很长时间没搞明白j1939与CAN2.0的关系,这篇文章让我明白了. CAN2.0是一种总 ...

  2. mediasoup 源码分析(二十四)stun 协议分析

    目录 stun介绍 stun 协议分析 属性消息 stun介绍 stun 即:Session Traversal Utilities for NAT.用于NAT穿透的网络协议. 作用: stun协议主 ...

  3. 【转】PBOC3.0和PBOC2.0标准规范异同分析

    2013年2月,中国人民银行发布了<中国金融集成电路(IC)卡规范(V3.0)>(以下简称PBOC3.0),PBOC3.0是在中国人民银行2005年颁布的<中国金融集成电路(IC)卡 ...

  4. 中国移动飞信协议分析

    登录 POST /nav/getsystemconfig.aspx HTTP/1.1 User-Agent: IIC2.0/PC 2.2.0230 Content-Type: application/ ...

  5. 飞信的协议分析(转)

      飞信的协议分析 转自:http://hi.baidu.com/nathan2007/blog/category/%B7%C9%D0%C5%D0%AD%D2%E9%B7%D6%CE%F6 作者:na ...

  6. QQ协议分析之TCPF包数据分析

    2019独角兽企业重金招聘Python工程师标准>>> QQ协议分析之TCPF包数据分析 博客分类: 抓包 说明: 本文档说明的是解密以后的TCPF数据包的字段内容.有关如何解密,请 ...

  7. Wireshark协议分析从入门到精通(免费版)-陈鑫杰-专题视频课程

    Wireshark协议分析从入门到精通(免费版)-5479人已学习 课程介绍         Wireshark是目前全球使用广泛的开源抓包软件(前身为Ethereal),是一个通用化的网络数据嗅探器 ...

  8. CAN总线(三)——CAN FD协议及其与CAN2.0的异同

    目录 1. CANFD的来历 2.  CANFD与CAN的协议异同 3. CANFD帧结构解析 3.1 帧起始 3.2.仲裁域 3.3 控制域 3.4 数据域 3.5 CRC 3.6 ACK 3.7 ...

  9. CAN 总线 之四 BOSCH CAN2.0 Part A

    前言   随着越来越多的应用程序接受和引入串行通信,这就要求对特定应用程序的通信功能分配消息标识符以进行标准化.如果将原来由 11 个标识符位定义的地址范围扩大,则可以更方便地使用 CAN 实现这些应 ...

最新文章

  1. 进程与线程的一个简单解释
  2. 使用mysql_MySQL 的安装与使用(一)
  3. 60进制时间计算器_不止加减乘除,Windows 自带计算器还有这些隐藏技巧
  4. C语言判断一个数是否是回文数Palindrome算法(附完整源码)
  5. Transact-SQL 示例 - 如何在拼接的动态sql内调用外部变量
  6. mysql存储过程into_MySQL存储过程中使用SELECT …INTO语句为变量赋值
  7. java和python混合编程_浅谈C++与Java混合编程
  8. kali下生成web端后门
  9. android wp主题,WP桌面:win10系统的最佳替代安卓应用
  10. Spark源码系列(一)spark-submit提交作业过程
  11. 关于使用VS.Net2003调试器出现的问题及相关解决方法[转]
  12. 虚幻引擎(UE4) UMG实例
  13. 惊艳!用 Python 送女神们别样的礼物!
  14. IDEA 创建工作空间 (空项目) 项目组
  15. 【C语言】案例四十八 综合案例——天生棋局(围棋棋盘)
  16. 做短视频的几个小技巧,助你吸粉引流
  17. [机缘参悟-12]:“易经“、“儒“、“释“、“道“、“法”、“墨”、“兵”的基本原理与核心思想
  18. Warning: To load an ES module, set “type“: “module“ in the package.json or use the .mjs extensi
  19. 38. OP-TEE中secure stroage------安全文件数据格式和操作过程
  20. Review | 科学禁食时代的来临

热门文章

  1. 【LiteOS】小白进阶之 LiteOS 基础详解
  2. Python3.X下安装Scrapy (转自鱼c论坛作者lumber2388779)
  3. C++中switch字符串Cstring/string map中查找
  4. 2017年阿里Java面试基础题
  5. 全国各省368个地级市河流密度数据(工具变量)
  6. 如何写自己的lib文件并测试
  7. python面试大全 萧井陌_Python就该这么学?!
  8. 为什么 ofo 彻底凉了?
  9. Python的线程17 Condition类,田径赛场上的主裁判
  10. TOJ 3471.Happy XiaoXiao Guo