胡诌一番

大多数书籍一上来就是什么计算机OSI模型,什么CAN模型对比OSI模型。各种协议摆出来一大堆,让人摸不着头脑,这种东西说实在没什么用,底层链路层协议全部通过硬件实现了,你仅仅需要了解然后学会配置(驱动硬件)即可,没必要花大篇幅去学习一大堆鬼东西。重点应该放在上层协议之上(例如应用层协议)。这些观点可以适用于TCP/IP协议栈的学习。
对于CAN主要理解以下两点:
1、CAN2.0-A和CAN2.0-B标准协议也就是所谓的链路层协议,这些都是通过硬件实现,咱们就大概了解协议,然后学会配置STM32或其他设备相应的寄存器来实现CAN标准协议(驱动程序)。
2、CAN应用层协议,这个才是重点,软件实现。应用层协议其实可以自己定义,但是为了和其他公司的产品兼容,咱们就必须使用一种国际上定义的标准应用层协议。这里有很多,我们就学习使用比较多的CANOpen协议。

CAN2.0标准协议及STM32硬件配置

逻辑电平

CAN有两根线,CANH和CANL,硬件通过识别这两根线上的电平来确定总线数值是显性数值”0”,还是隐形数值”1”。如何识别及电平关系不需要明白,硬件给你处理。但是这里必须清楚一点就是显性和隐形同时发送,最后总线数值为显性数值0。

CAN总线帧格式

数据就是通过这种格式按位发送出去。

总线上总共有以下5种不同类型的帧。

帧类型 帧用途
数据帧 节点传送和接收数据的帧
远程帧 用于接收节点向具有相同ID的发送节点请求数据的帧
错误帧 当检测到错误向其他节点通知错误的帧
过载帧 接收节点通知其他节点自己还没准备好接收帧
帧间隔 用于将数据帧和远程帧与前面的帧分离开

数据帧(重点)

  • 帧开始:标志数据帧和远程帧的开始,有一个单独的显性位(0)组成。一个节点只有在空闲时,才允许发送数据。所有节点必须同步总线跳变沿。
  • 仲裁场:标准格式和扩展格式。包括识别符和远程发送请求位(RTR)。识别符长度是11位,发送顺序是ID10-ID0。最高的7位(ID10-ID4)必须不能全为隐形(1)。RTR位,数据帧为显性,远程帧为隐形。这里的显和隐实际对应数据的0和1,送到CAN控制器之后自动将0和1转换成对应的显性电平和隐形电平。
  • 控制场:6个位组成,包含数据长度代码和两个将来作为扩展用的保留位,所有保留位必须位显性。数据长度代码指示数据场中字节数量,因为4位,所以允许发送数据0-8字节
  • 数据场:实际的数据字段。
  • CRC场:包括CRC序列和CRC界定符。这里具体怎么计算不需要清楚,因为硬件实现了,仅仅知道这就是校验码而已,用于在接收端校验接收的数据是否正确。
  • 应答场:2bit,应答间隙和应答界定符。发送方发送两个隐性位。这个不需要管
  • 帧结束:每一个数据帧都有结束标识序列。由7个隐性位。
  • 上述最重要的信息就是数据字节最长是8。

远程帧

错误帧

错误帧由两个不同的场组成,硬件实现和软件无关。

过载帧

暂时不考虑,这硬件实现。

帧间隔

暂时不考虑,硬件实现。

仲裁场两种格式


标准格式:11位标识符,其余和前面一样
扩展格式:11位基本ID,18位扩展ID。基本ID定义扩展帧基本优先权。SRR为替代远程请求位,是隐性位。了解即可,不必追究。

总线仲裁过程(重点)

CAN总线上节点没有主从之分,所有节点级别都一样,可以发送也可以接收。只要总线空闲,发送节点就可以发送数据,发送节点不会指定由哪个一个节点接收,而是由接收节点自己过滤选择是否接收含有该标识符ID的数据,就像收音机一样,广播台发出信号都可以被听众收到,但是听众可以选择自己喜欢的台。

  • 回读:节点发送数据的同时,同时也再读取数据,并与自己发送数据对比。

  • 线与:如果同时有几个节点往CAN总线上传递信息,采取线与机制,也就是说除非所有的节点都发送1,总线上才会是1,只要有一个节点发送0,总线上就是0。如果一个节点A发送了1,而其他节点发送了0,那么总线上是0,节点A通过回读就会发现总线上的电平与自己发送的不一致,从而采取相应的措施(退出仲裁,报错等)。需要注意的是1和0由CAN_H和CAN_L两条线差分电压得来,并不是一条线传递1, 另一条线传递0。

  • 仲裁:总线空闲,最先开始发送消息的节点获得发送权,当多个节点同时发送数据,那么需要仲裁,通过线与和回读功能比较数据的标识符(从仲裁段第一位开始仲裁),标识符小的获得仲裁,标识符大的推出仲裁,转变为接收,并且不会在总线再次空闲前发送报文,也就是说当总线空闲时候,推出仲裁的帧才重新发送数据。

  • 数据帧和远程帧优先级:假如一个发送节点发送了远程帧请求A发送数据并且同时A节点也正在发送数据,那么二者标识符相同,需要仲裁。RTR为显性位的数据帧具有优先权,可以继续发送。

  • 标准格式和扩展格式优先级:从仲裁位开始仲裁,标准格式RTR位显性,牛逼,具有优先权可以继续发送。

报文重发与位填充

这里说了很多,但是都是硬件已经帮助你完成了,这里可以不用了解。直接忽略过去。。。。。

STM32配置CAN

CAN协议规定了好几种帧类型,但是对于我们应用来说,只有数据帧和远程帧可以通过软件编程来控制。(其他几种帧都是由CAN控制器硬件实现的,我们也管不了)。而数据帧和远程帧最大的区别在于:远程帧没有数据域。数据帧分为标准数据帧和扩展数据帧,它们之间最大的区别在于:仲裁场的不同。
这里直接参考《STM32 CAN发送和接收过滤详解》。

参考文献:

《手把手教你学CAN总线》
《CAN_BusSpecificationV2.0中文版》
《STM32CAN发送和接收过滤详解》
这里数据链路层就这个样子了。。。。。不需要再进一步深入了。。。。。。

CAN之数据链路层协议相关推荐

  1. 实用知识点梳理:香农定理、IP地址划分、基带信号、数据链路层协议、RSTP与IPoverATM

    香农定理 香浓第二定理公式:C=B∙log⁡2(1+S/N)C=B\bullet \log_{2}(1+S/N)C=B∙log2​(1+S/N) 其中,CCC表示信道的最大数据传输率:BBB表示信道带 ...

  2. 数据链路层协议的功能不包括( )

    数据链路层协议的功能不包括( D ) A. 定义数据格式 B. 提供结点之间的可靠传输 C. 控制对物理传输介质的访问 D. 为终端结点屏蔽物理传输的细节 A. 数据链路层的主要功能包括组帧,组帧即定 ...

  3. 网络层协议和数据链路层协议

    1. IP 协议 IP指网际互连协议,Internet Protocol的缩写,是TCP/IP体系中的网络层协议.IP位于TCP/IP模型的网络层(相当于OSI模型的网络层),它可以向传输层提供各种协 ...

  4. WSN 数据链路层协议 SMAC,TMAC…TRAMA...BMAC ,XMAC, ZMAC

    WSN 数据链路层协议 SMAC,TMAC-TRAMA...BMAC ,XMAC, ZMAC 竞争型MAC SMAC TMAC 分配型MAC TRAMA 混合型MAC协议 BMAC .XMAC ZMA ...

  5. 数据链路层协议_课后分享链路层第十二周

    1.内容回顾:协议的工作过程 理解协议层次结构模型,抓住两种视图:横向视图和纵向视图.数据链路层协议为上层提供编址.标识.差错检测的服务. 复习协议的封装原理,是对上节课的封装和分层知识的全面巩固. ...

  6. 计算机数据链路层协议之HDLC和PPP协议

    一.HDLC协议 高级数据链路控制(High-levelData Link Control, HDLC)协议是ISO制定的面向比特(记住PPP协议是面向字节的)的数据链路层协议,它和PPP协议是数据链 ...

  7. 数据链路层协议(Ethernet、IEEE802.3、PPP、HDLC)

    ​​​​​数据链路层协议 首先Ethernet.IEEE802.3.PPP和HDLC都是数据链路层的协议,只不过后面三个不常用而已,数据链路层最常用的协议是Ethernet以太网协议. Etherne ...

  8. 数据链路层协议之点对点协议 PPP

    文章目录 点对点协议 PPP 1.PPP 协议应满足的需求 2.PPP 协议不需要的功能 3.PPP 协议的组成 4.PPP 协议的帧格式 5.透明传输问题 零比特填充 字符填充 不提供使用序号和确认 ...

  9. 计算机网络 数据链路层 协议知识点总结

    计算机网络  性能指标 速率:速率就是数据传输(数据是指0和1)的速率,比如你用迅雷下载,1兆每秒,来衡量目前数据传输的快慢.它是计算机网络中最重要的一个性能指标. 速率就是发送数据的速度. 带宽:在 ...

  10. 数据链路层协议的三个基本问题

    一.封装成帧 封装成帧就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧. 接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束. 分组交换的一个重要 ...

最新文章

  1. raid0、1、5、10创建
  2. dataframe for 循环 数据格式 python_Python中的for循环
  3. 全国通用计算机一级考试模板,共享WPS中符合国人习惯的好模板
  4. Java 内部类示例
  5. mockjs针对value生成随机数值(随机字符串,数值,日期,url,图片地址,email,ip等)
  6. Wndows下Apache+php+Mysql环境的搭建及其涉及的知识
  7. java判断总共天数_java 判断两个时间相差的天数
  8. mcrp 对接软件换
  9. GCF(1)---How to modify PICS according to FGI bits UE reported
  10. 爬取小说《重生之狂暴火法》 1~140章
  11. Elpscrk:功能强大的智能字典生成器
  12. 如何配置android的adb环境变量,windows系统下配置adb环境变量的方法步骤
  13. pdf文件如何转换成word?
  14. vue实现手机验证码登录
  15. ecshop 添加php标签,ecshop模板调用标签大全
  16. sam格式的结构和意义_SAM文件是什么
  17. 一句话知道handler有啥ruan用
  18. 要不是这个沙雕网站,我这辈子都见不到这么多沙雕网站!
  19. viz::viz3d报错_我可以在Excel中获得该Viz吗?
  20. linux vim 命令无效,Linux vim 命令 command not found vim 命令详解 vim 命令未找到 vim 命令安装 - CommandNotFound ⚡️ 坑否...

热门文章

  1. idea配置Git以及操作
  2. 史上最简单的SpringCloud教程 | 第三篇: 服务消费者(Feign)(Finchley版本)
  3. 弘辽科技:现在怎么做淘宝赚钱?有什么办法或者方案用淘宝赚钱?
  4. 用Python读写文件的方法
  5. EXSI7.0U3安装DSM7
  6. 小马哥---高仿三星W2017 主板Y966 6735芯片 刷机机型外观图 多图赏析鉴别
  7. 新法规下,化妆品生产厂商如何构建化妆品ERP系统?
  8. 各编程语言相互调用示例,代码简单,生成的软件体积也很小
  9. 监控摄像头是如何追踪的?
  10. VUE3+TS 引入JQuery