CAN总线学习笔记–数据帧与遥控帧

​ 最近在学习can总线协议,想写一些关于接触can总线的想法,文章会参考部分正点原子的资料,但是会使用自己在notability里面做笔记时画的图来代替can手册中的图片。(文中的红色代表显性电平,绿色代表隐性,黄色代表不一定)

​ 第一次写博客,写的不好大家见谅。

一、帧类型

CAN总线的通讯协议中有5种类型的帧

今天主要学习的是数据帧和遥控帧。

数据帧

​ 数据帧是协议中用来发送数据的帧,在是整个协议的核心帧


​ 如上图所示是数据帧的组成总览,can总线的数据帧有2中格式,扩展格式和标准格式的主要差别在于仲裁段和控制段。

数据帧主要由7个段组成:

​ 1.帧起始 2.仲裁段 3.控制段 4.数据段 5.CRC段 6.ACK段 7.帧结束

下面我们来逐一分析

帧起始

​ 在CAN总线没有信息发送和接受的时候,总线上表现为隐性电平。那么,器件是怎么知道数据段的开始呢?

​ 在CAN总线的协议中,用一个**显性电平(SOF)**来表示数据帧的起始。当别的期间读到总线上有一个显性电平时,就知道一个帧要开始啦。

仲裁段

​ 仲裁段跟在帧起始之后,里面包含着ID信息。仲裁段中包含的信息是CAN总线的灵魂,CAN总线作为一个没有地址信息的总线协议,仲裁段中的ID信息就承担着代替地址信息的使命。

由图中所示,仲裁段有两种类型

标准格式

​ 在标准格式中,前11位表示ID信息,最后一位是RTR位,是数据帧与遥控帧的主要区别。在数据帧中,RTR位一定为显性。

​ 前11位的ID信息位按道理来说有2048(211)**种组成的可能,但是CAN总线规定了**高7位**不能劝为隐性电平,那么这样,在标准格式中,只有**(211-2^4)=2032种ID的组成可能。

​ 其中的RTR位,在数据帧中一定为显性电平,在遥控帧中一定为隐性电平,这决定了数据帧在和遥控帧争总线的时候,数据帧的优先级要高于遥控帧的优先级。

扩展格式

​ 其实扩展格式和标准格式的主要功能并没有差别,但是扩展格式包含了29位的ID信息

​ 在11位标准帧发送完毕后,扩展格式的仲裁段会发两个连续的隐性电平,来告诉别的器件这是扩展格式。同时,相比较标准格式的数据帧来说,标准格式的RTR位是显性电平,扩展格式的SRR位是隐性电平,这也意味着在扩展格式的数据帧和标准格式的数据帧争抢总线的时候,标准格式的数据帧拥有更高的优先级。

​ 在发完两个隐性电平之后,会急剧发送扩展的18位ID,同样,扩展格式29位ID的高七位不能全为隐性电平,那么,扩展格式下有**(218-24)*(211-24)=532644096**种ID组合。

对比

​ 总的来说,扩展格式能携带的ID种类很多,比标准格式大了很多个数量级,但是优先级不如标准格式。

ps.不知道各位小伙伴在看仲裁帧的时候有没有感觉奇怪,为什么高7位就不能全为隐性电平呢,继续看下去,看到最后就会知道答案了,这里先卖个关子。

控制段

​ 控制段的主要作用是表示数据段中有几个字节的数据

​ 控制段主要由六位组成,前两位是保留为,在发送时一定为隐性电平

​ 后四位是数据长度码,用来表示数据段的数据字节数。有意思的是,数据段最多只有8个字节的数据,但是控制段留了4位给数据长度码,这就意味着DLC为9-15时是没有意义的,但是接收方对DLC=9~15的数据并不会认为这是错误的

DLC0~DLC3数值对应的数据长度如下图

数据段

数据段是包含数据信息的段落,他的长度不定,在0~64位之间。

值得注意的是,数据段的传输不同于其他段的传输,数据段是由MSB最高位开始的

CRC段

​ CRC段是CAN总线实现纠错的一个非常重要的段。具体CRC的原理就不在此赘述了,要讲清楚可能要再开一个专栏了。

​ 简单的来说,CRC段会根据前面的数据段(帧起始、仲裁段、控制段、数据段)的数值来计算生成CRC顺序。在此计算方式下,相同的被计算数值会输出相同的数值,当接收方接受到CRC段后,会计算CRC顺序和前面的数据段是否吻合,如果不吻合就会报错。是一个非常有效的纠错机制。

​ CRC段的组成是由15位的CRC顺序和1位的CRC界定符构成的。CRC界定符一定为隐性电平

​ 对CRC界定符的意义,我认为是留给接收方计算CRC顺序与之前的数据段能否吻合的一个机制。

ACK段

​ ACK是通信协议中非常常见的一种回应方式。通俗来讲,就是发送方问:“听到了吗?”,然后接收方回答:”我听到啦!”。如果发送方询问之后接收方没有回答,那么就是有可能在传输过程中出现了错误。

​ 对于CAN总线通信协议来说,ACK段有2位,分别是ACK槽和ACK界定符。发送方会在连续发送两个隐性电平,而接收方会在ACK槽的地方发送一个显性电平以示受到。

​ 这个CAN总线数据手册中的解释相对比较模糊不好理解,我看了别的论坛上用示波器抓到的通信信号来看,具体的ack过程是这样的

看到这里可能有小伙伴要问了,CAN总线不是可以一对多发送的吗,如果有一个出错,其他都是对的,那么出错的隐性电平就会被其他的显性电平覆盖。关于这个问题,会在后面的错误帧部分讲到,敬请期待啦~

帧结束

​ 就像电视剧中军人的通信一样,最后要说一句“over”,发送机也要告诉接收机我说完了,于是这边是帧结束段的作用了

帧结束由七个隐性电平组成。

看到了这里是不是想到了什么呢? 就是之前为什么仲裁段的高7位不能全为隐性的原因。

数据帧总结

对于数据帧来说,仲裁段中的ID可供接收方筛选,控制段中的DLC来表明自己携带了多少字节的数据,CRC段用来纠错

遥控帧

​ CAN总线协议中的器件不单单能发送数据,也可以向别的设备请求数据。

​ 遥控帧的大体结构和数据帧非常相似,两点最大的不同就是,遥控帧的RTR为隐性遥控帧没有数据段

​ 对于遥控帧来说,仲裁段中的ID就是被请求数据的ID,控制段中的DLC代表着请求的数据的字节数。

​ 下面是数据帧和遥控帧的对比

总结

​ 这次数据帧和遥控帧的学习笔记就做到这里啦,我是第一次写blog。我在看数据手册的时候经常会觉得“他说的我都看得懂,但是连起来我就是不知道他在干什么”。所以我在写blog的时候想尽量多的写出自己的理解,同时用notability的笔记来直观的表现。限于本人技术,有讲错的地方请大家在评论区指正,有别的建议或者不懂的也可以在评论区告诉我呀~

谢谢观看

CAN总线学习笔记--数据帧与遥控帧相关推荐

  1. CAN总线学习笔记(2)- CAN协议数据帧与遥控帧

    本文转载自:https://blog.csdn.net/weixin_40528417/article/details/79534483 依照瑞萨公司的<CAN入门书>的组织思路来学习CA ...

  2. 【转】CAN总线学习笔记(2)- CAN协议数据帧与遥控帧

    https://blog.csdn.net/weixin_40528417/article/details/79534483 依照瑞萨公司的<CAN入门书>的组织思路来学习CAN通信的相关 ...

  3. CAN总线学习笔记 | CAN基础知识介绍

    一.CAN协议 1.1 CAN协议简介 CAN 是控制器局域网络 (Controller Area Network) 的简称,它是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发的,并最终成为 ...

  4. CAN通信讲解(2)——数据帧和遥控帧

    本文注意参考了<CAN入门书>,源于此书图片不再特殊标注 目录 2.1 帧的种类 2.2 数据帧和遥控帧 2.3 仲裁过程 2.4 各段详解 2.5 小结 数据帧和遥控帧格式类似,放在一起 ...

  5. 【计算机网络学习笔记06】以太网帧结构、HDLC协议

    [计算机网络学习笔记06]以太网帧结构.HDLC协议 一.以太网帧结构 1.1 两种帧格式 1)Ethernet_II帧格式 2)IEEE802.3帧格式 1.2 帧的3种发送方式 1)单播: 帧从单 ...

  6. 51单片机学习笔记-15 红外遥控

    15 红外遥控 [toc] 注:笔记主要参考B站江科大自化协教学视频"51单片机入门教程-2020版 程序全程纯手打 从零开始入门". 注:工程及代码文件放在了本人的Github仓 ...

  7. CAN总线学习笔记(5)- CAN通信的位定时与同步

    依照瑞萨公司的<CAN入门书>的组织思路来学习CAN通信的相关知识,并结合网上相关资料以及学习过程中的领悟整理成笔记.好记性不如烂笔头,加油! 1 位定时 1.1 比特率和波特率 1) . ...

  8. 28335的CAN总线学习笔记

    在调试28335的CAN的发送时出现的问题: 1.接口用错导致一直失败: 2.注意28335的CAN总线波特率计算,如下所述: ECanaShadow.CANBTC.bit.BRPREG = 9; E ...

  9. 38211协议学习笔记(2)-帧结构和物理资源

    一.基础 二.Numerologies 三.帧结构 3.1 帧和子帧 上行和下行传输帧持续时间位Tf =10ms,每个帧有10个子帧组成,Tsf=1ms:每个子帧中的OFDM数是: 每个帧被平均分成两 ...

最新文章

  1. 如何实现网站文件动静分离
  2. selenium webdriver(python)_selenium、webdriver及浏览器的关系及对应版本安装
  3. MySQL索引知识点
  4. wordpress 运行_如何为您的教室设置和运行WordPress
  5. 如何区分Babel中的stage-0,stage-1,stage-2以及stage-3(转)
  6. java对象结构 对象头 Markword
  7. 畅通工程(hdu1863)并查集
  8. 实习 | 京东金融个人风险管理中心(地点:北京)
  9. 智能家居无线组网技术,WiFi芯片模组连接应用,物联网无线技术发展
  10. 手机查看IGES,STP,STEP文件APP推荐-Glovius
  11. Spark大数据平台
  12. 360随身WiFi取消登录与欢迎界面
  13. mxnet symbol 解析
  14. 一个简单的连续变焦红外镜头的从零开始的设计过程(zemax)(二)进一步优化,公差分析
  15. 目前收益比较好的广告联盟和广告方式
  16. 谷歌404页面html,简洁404页面HTML好看的404错误页源码
  17. 医学图像——医学坐标体系
  18. 1x2 MIMO和2x2 MIMO 代表的意思?
  19. 联想Miix5安装Linux后WIFI设备无法识别问题
  20. 安装SAS增强型编辑器资源和步骤

热门文章

  1. 使用双重深度q学习发现非常规的厄运策略
  2. MacOS 安装 Homebrew
  3. linux ntp时钟服务器地址_Linux 下同步时间,另附 NTP 服务器地址
  4. React主流开源UI库分析(附优质管理端模板)
  5. qmake:配置qmake
  6. 程序员千万别找同行做女朋友,因为一吵架代码就会被删除,痛苦啊
  7. python argparse_python argparse使用
  8. PIM sparse mode
  9. RocksDB 简介
  10. PyEcharts学习笔记整理,基于B站千锋教育