1. CAN总线的启源
    CAN 是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需要,1986 年德国电气商博世公司开发出面向汽车的CAN 通信协议。此后,CAN 通过ISO11898 及ISO11519 进行了标准化,现在在欧洲已是汽车网络的标准协议。它的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持。最高1Mbps(距离小于40M),最远可达10KM(速率低于5Kbps)。

  2. CAN总线的构成
    CAN总线由CAN_H和CAN_L两根数据双绞线组成,同时,两个数据线之间接120Ω的电阻(电缆的特性阻抗120Ω,为了模拟无限远的传输线路),每个个设备分别和CAN_H和CAN_L相连,挂载到CAN总线上进行通信。
    CAN总线使用差分电平的方式进行数据交互,当没有数据发送时,两条线的电平一样都为2.5V,称为静电平,也就是隐性电平。当有信号发送时,CAN_H的电平升高1V,即3.5V,CAN_L的电平降低1V,即1.5V。
    按照定义的:

    CAN_H-CAN_L < 0.5V 时候为隐性的,逻辑信号表现为"逻辑1"- 高电平。

    CAN_H-CAN_L > 0.9V 时候为显性的,逻辑信号表现为"逻辑0"- 低电平。

    CAN总线空闲定义,连续11位的隐形电平,节点发送数前需要先判断总线是否空闲,其他情况都认定为总线忙,有其他节点在发送数据,CAN的帧间隙是连续三个以上的隐形电平。

  3. CAN总线的数据交互流程
    当总线处于空闲状态时,CAN总线上挂载的节点开始发送自身的数据,每发送一位则会读取一次总线的电平和自身发送的电平比较是否一致,若一致则继续发送,不一致则结束发送转换为接收模式,这个过程就是总线仲裁,总线仲裁用于总线空闲时,多个节点统同一时间开始发送数据。高优先级的节点优先低优先级节点发送数据,高优先级发送完成后低优先级在总线空闲情况下方可占用总线发送数据,若低优先级已经在发送数据,高优先级不能打断低优先级,只能在总线空闲时,才能使用总线。
    总线上不同的节点具有不同的优先级标识符,要保证标识符唯一性,优先级标识符在数据的仲裁段中展示,具体实现原理看数据格式。

    发送数据过程:
    接收数据过程:

  4. CAN总线的数据格式
    在总线中传送的报文,每帧由7部分组成。CAN协议支持两种报文格式,其唯一的不同是标识符(ID)长度不同,标准格式为11位,扩展格式为29位。
    在标准格式中,报文的起始位称为帧起始(SOF),然后是由11位标识符和远程发送请求位(RTR)组成的仲裁场。RTR位标明是数据帧还是请求帧,在请求帧中没有数据字节。
    控制场包括标识符扩展位(IDE),指出是标准格式还是扩展格式。它还包括一个保留位 (ro),为将来扩展使用。它的最后四个位用来指明数据场中数据的长度(DLC)。数据场范围为0~8个字节,其后有一个检测数据错误的循环冗余检查(CRC)。
    应答场(ACK)包括应答位和应答分隔符。发送站发送的这两位均为隐性电平(逻辑1),这时正确接收报文的接收站发送主控电平(逻辑0)覆盖它。用这种方法,发送站可以保证网络中至少有一个站能正确接收到报文。
    报文的尾部由帧结束标出。在相邻的两条报文间有一很短的间隔位,如果这时没有站进行总线存取,总线将处于空闲状态
    完整数据结构帧
    CAN总线传输的是CAN帧,CAN的通信帧分成五种,分别为数据帧、远程帧、错误帧、过载帧和帧间隔。
    数据帧是由:帧起始,仲裁断,控制端,数据段,CRC段,ACK段和帧结束构成,其中根据仲裁段ID码长度的不同,分为标准帧(CAN2.0A)和扩展帧(CAN2.0B)。

    帧起始:
    帧起始由一个显性位(低电平)组成,其他接收节点同步于该帧起始位。
    帧结束:
    帧结束由七个连续隐形位组成。
    仲裁段:

    仲裁段由标准帧由11位构成,扩展帧由29位组成,设置ID时禁止设置高七位连续为隐形电平(禁止设置ID=1111111xxxx)。
    当仲裁帧阶段检测到总线电平和自身发送电平不一致,则直接退出总线竞争,显性电平优先级高于隐形电平优先级,帧ID值越小,优先级越高。若在其他段触线电平不一致,则产生错误事件(帧ACK时间段或被动错误标志传输器件除外)。对于同为扩展格式数据帧、标准格式远程帧和扩展格式远程帧的情况同理。
    RTR 位用于标识是否是遥控帧(0,数据帧; 1,遥控帧), IDE 位为标识符选择位(0,使用标准标识符; 1,使用扩展标识符), SRR 位为代替远程请求位,为隐性位,它代替了标准帧中的 RTR 位。
    控制段:
    控制段由6个位构成,代表数据段的字节数。

    数据段:
    一个数据帧的数据量为0-8个字节,数据量少,使得实时性较高,被干扰的概率小,抗干扰能力强。

    CRC段:
    使用CRC校验进行数据检错,CRC校验值存放于CRC段

    ACK段:
    当一个接收节点接收的帧起始到CRC段之间的内容没发生错误时,它将在ACK段发送一个显性电平

    其他四种帧详细格式参考文末博客。
    远程帧:用于向其他节点请求数据。
    错误帧:任何单元检测到总线错误发出错误帧。
    过载帧:用于先行和后续的数据帧或者远程帧之间提供附加延时,保证接收端能够来得及处理前面收到的数据,包括过载标志和过载界定符。
    帧间隔:用于将数据帧或远程帧和他们之前的帧分开,但过载帧错误帧前面不会插入帧间隔。

  5. CAN总线的常规问题
    待补充。
    参考博客:
    1.https://blog.csdn.net/liuligui5200/article/details/79030676
    2.https://blog.csdn.net/qq_31710263/article/details/97015748
    3.https://www.dzsc.com/data/2009-1-12/75711.html

CAN总线的学习总结相关推荐

  1. 片上总线Wishbone 学习—— 转载请注明出处:http://blog.csdn.net/ce123

    片上总线Wishbone 学习(零)前言 声明:版权所有,欢迎转载! 转载请注明出处:http://blog.csdn.net/ce123 为了更加升入的理解片上系统,比如S3C2440等,今天开始学 ...

  2. 片上总线Wishbone 学习(二)Wishbone总线标准介绍

    片上总线Wishbone 学习(二)Wishbone总线标准介绍 Wishbone总线产生.发展 市场是推动技术前进的主要动力,人们对各种电子产品不断的更新,更好,更完美的追求刺激了技术的不断升级和创 ...

  3. 片上总线Wishbone 学习(四)接口信号定义

    片上总线Wishbone 学习(四)接口信号定义 所有的Wishbone接口信号都是高电平有效,设计成高电平有效的主要原因是由于低电平有效信号的书写问题,不同的设计者表达低电平有效信号的方式不同,拿最 ...

  4. 片上总线Wishbone 学习(三)Wishbone互联的类型

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 片上总线Wishb ...

  5. 片上总线Wishbone 学习(一)片上总线综述

    转自http://blog.csdn.net/ce123_zhouwei/article/details/6926425 片上总线Wishbone 学习(一)片上总线综述 1 引言 传统的IC设计方法 ...

  6. 片上总线Wishbone 学习(十二)总线周期之块写操作

    转自http://blog.csdn.net/ce123_zhouwei/article/details/6964008 片上总线Wishbone 学习(十二)总线周期之块写操作 异步周期结束方式 块 ...

  7. 片上总线Wishbone 学习(七)总线周期之握手协议

    转自http://blog.csdn.net/ce123_zhouwei/article/details/6933756 片上总线Wishbone 学习(七)总线周期之握手协议 由于在整个总线周期,C ...

  8. 片上总线Wishbone 学习(十)总线周期之单写读操作

    转自http://blog.csdn.net/ce123_zhouwei/article/details/6933926 片上总线Wishbone 学习(十)总线周期之单写读操作 异步周期结束方式 单 ...

  9. 片上总线Wishbone 学习(九)总线周期之单次读操作

    片上总线Wishbone 学习(九)总线周期之单次读操作 异步周期结束方式 单次读操作每次操作只完成一次读或者写,是最基本的总线操作方式.但是,Wishbone主设备或者从设备也可以不支持单次读/写操 ...

  10. 片上总线协议学习(1)——SiFive的TileLink与ARM系列总线的概述与对比

    link 片上总线协议学习(1)--SiFive的TileLink与ARM系列总线的概述与对比 finally 27 人赞同了该文章 一.背景介绍 随着超大规模集成电路的迅速发展,半导体工业进入深亚微 ...

最新文章

  1. 技术图文:如何在leetcode上进行算法刻意练习?
  2. 使用hibernate自动生成数据库表
  3. 有向图强连通分量的三种算法
  4. 【JavaNIO的深入研究4】内存映射文件I/O,大文件读写操作,Java nio之MappedByteBuffer,高效文件/内存映射...
  5. 大数据分析的5个方面
  6. 用python编制一个的类_常见面试题整理--Python概念篇
  7. java并发排它锁_Java并发编程进阶——锁(解析)
  8. Unicode与UTF-8的区别
  9. 如何在CDN边缘节点执行你的JavaScript?
  10. java tostring格式化日期_java日期格式化SimpleDateFormat的使用详解
  11. PyQt5 打包问题解决 Unable to find “D:\anaconda3\lib\site-packages\PyQt5\Qt\translations\qtwebengine_locale
  12. python 根据时间间隔删除文件夹内修改时间比较早的文件
  13. AI人工智能 / ML机器学习专业词汇集
  14. 菜鸟学Linux 第095篇笔记 MySQL 5.6主从复制
  15. qunee for html5,Qunee for HTML5(二)
  16. Word2010专项试题(1)
  17. linux pt 客户端,下载工具系列——rTorrent (轻量级优秀BT/PT客户端)
  18. excel按条件选择工作表_在Excel工作表中选择“实际使用范围”
  19. 拼多多新店铺上架多少宝贝合适?是越多越好吗?
  20. docker部署es和kibana遇到的坑

热门文章

  1. requests模块练习1
  2. 自建speedtest测速服务器教程,Linux/Windows/群晖
  3. pyspark写法总结
  4. API Gateway介绍
  5. Emacs-057-hippie-expand使用
  6. 嵌入式视频处理考虑(二)
  7. 双卡4G路由器_4G双卡双模路由器_4G双网双待路由器
  8. 流利阅读12.28 Seriously, Prada, what were you thinking? Why the fashion industry keeps bumbling into rac
  9. 环境经济:上市公司环保支出(2000-2020)104城-城投债数据(2000-2020)
  10. python爬取酷狗音乐top500及歌词_爬取酷狗音乐Top500(示例代码)