电子商务网站建设利益分析,网站制作公司前十排名,网页设计专业开设院校,北京到安阳多少公里路【系列专栏】#xff1a;博主结合工作实践输出的#xff0c;解决实际问题的专栏#xff0c;朋友们看过来#xff01; 《QT开发实战》 《嵌入式通用开发实战》 《从0到1学习嵌入式Linux开发》 《Android开发实战》 《实用硬件方案设计》 长期持续带来更多案例与技术文章分享…【系列专栏】博主结合工作实践输出的解决实际问题的专栏朋友们看过来 《QT开发实战》 《嵌入式通用开发实战》 《从0到1学习嵌入式Linux开发》 《Android开发实战》 《实用硬件方案设计》 长期持续带来更多案例与技术文章分享
欢迎商业项目咨询10年软硬全栈内功助力解决您的尊贵需求。
原文链接https://blog.csdn.net/w464960660/article/details/129127589
——————————————————————————————————
目录
0 引言
1 CAN是什么
2 CAN的电气属性
3 CAN通信协议
3.1 数据帧
3.2 遥控帧
3.3 错误帧
3.4 过载帧
3.5 帧间隔
4 CAN通信速率
5 总结 0 引言 CAN是一种应用广泛的现场总线由于其高可靠性多应用于工业自动化、船舶、汽车、医疗和工业设备等方面如汽车上大量的传感器与模块都是通过CAN总线连接起来的。 本次博文根据瑞萨的《CAN入门书》对CAN协议进行一个梳理总结包括其概念、电气属性、协议、速率等意在对CAN有一个基础性的认知详细协议等可参见原书。
1 CAN是什么 CAN是Controller Area Network的英文缩写也就是控制局域网络其最早由德国BOSCH开发目前已经是国际标准(ISO 11898)是当前应用最广泛的现场总线之一。BOSCH博世主要是做汽车电子的因此CAN一开始主要是为汽车电子开发的目前已经是汽车网络的标准协议。当然经过几十年的发展CAN协议的高性能和可靠性已经得到了业界的认可目前除了汽车电子外也广泛应用于工业自动化、医疗、工业和船舶等领域。 以汽车电子为例汽车上的电子设备很多空调、车门、发动机、大量传感器等这些设备就是通过CAN总线连接形成一个网络如下图所示 图中的各个单元通过CAN总线连接每个单元都是独立的节点同一个CAN网络中单元的通信速度一致不同网络间速度可以不同。
CAN的主要特点如下 1多主控制总线空闲时所有单元都可以发送消息当两个以上单元同时开始发送消息时根据标识符ID并非发送的目的地址决定优先级对各消息ID的每个位进行逐个仲裁比较。仲裁获胜被判定为优先级最高的单元可继续发送消息仲裁失利的单元则立刻停止发送而进行接收。2系统的柔软性与总线相连的单元没有类似于“地址”的信息因此在总线上增加单元时连接在总线上的其它单元的软硬件及应用层都不需要改变。3通信速度快距离远最高 1Mbps距离40M最远达10KM速率5Kbps。4具有错误检测、错误通知和错误恢复功能所有单元都可以检测错误检测出错误的单元会立即通知其他所有单元。正在发送消息的单元一旦检测出错误会强制结束当前的发送然后不断反复地重新发送此消息直到成功为止。5故障封闭功能CAN可以判断出错误的类型是总线上暂时的数据错误如外部噪声等还是持续的数据错误如单元内部故障、驱动器故障、断线等若为后者可将引起此故障的单元从总线上隔离出去。6连接节点多CAN 总线是可同时连接多个单元的总线可连接的单元总数理论上没有限制但实际上受总线上的时间延迟及电气负载的限制。降低通信速度可连接的单元数增加提高通信速度单元数减少。2 CAN的电气属性 CAN总线使用两根线来连接各个单元CAN_H、CAN_LCAN控制器通过判断这两根线上的电位差来得到总线电平分为显性电平和隐性电平两种。显性电平表示逻辑“0”此时CAN_H电平比CAN_L 高分别为 3.5V 和 1.5V电位差为 2V。隐形电平表示逻辑“1”此时 CAN_H 和 CAN_L 电压都为 2.5V 左右电位差为 0V。 当CAN 总线上没有节点传输数据即总线空闲时总线电平一直处于隐性。 CAN 节点单元连接到CAN总线时 CAN_H 接CAN_H、CAN_L 接 CAN_LCAN 总线两端要各接一个 120Ω的端接电阻用于匹配总线阻抗吸收信号反射及回拨提高数据通信的抗干扰能力以及可靠性。CAN2.0传输速度可达 1Mbps/S最新的 CAN-FD 最高速度可达 5Mbps/S甚至更高传输速度和总线距离有关总线距离越短传输速度越快。 3 CAN通信协议 通过CAN总线传输数据是需要按照一定协议进行CAN 协议提供了 5 种帧格式来传输数据数据帧、遥控帧、错误帧、过载帧和间隔帧用途如下 3.1 数据帧
数据帧由7段组成 1帧起始表示数据帧开始的段2仲裁段表示该帧优先级的段3控制段表示数据的字节数及保留位的段4数据段数据的内容一帧可发送 0~8 个字节的数据5CRC段检查帧的传输错误的段6ACK 段表示确认正常接收的段7帧结束表示数据帧结束的段。以上是数据帧标准格式和扩展格式两种帧结构图中 D 表示显性电平 0、 R 表示隐性电平 1 D/R 表示显性或隐性也就是 0 或 1。
1帧起始 标准格式和扩展格式都是由一1位的显性电平 0 来表示帧起始。
2仲裁段 仲裁段表示帧优先级标准格式和扩展格式的仲裁段不同从上图可见标准格式的 ID 为 11 位发送顺序是从 ID10 到 ID0最高 7 位 ID10~ID4 不能全为隐性(1)也就是禁止0X1111111XXXXX这样的 ID。扩展格式的 ID 为 29 位基本 ID 从 ID28 到 ID18扩展 ID 由 ID17 到 ID0基本ID 与标准格式一样禁止最高 7 位都为隐性。
3控制段 控制段由 6 个位构成表示数据段的字节数标准格式和扩展格式的控制段略有不同r1 和 r0 为保留位保留位必须以显性电平发送。 DLC 为数据长度高位在前 DLC 段有效值范围为 0~8。
4数据段 数据段也就是帧的有效数据标准格式和扩展格式相同可以包含 0~8 个字节的数据从最高位(MSB)开始发送。
5CRC段 CRC段保存CRC校准值用于检查帧传输错误标准格式和扩展格式相同。CRC 段由 15 位的 CRC 值与 1 位的 CRC 界定符组成。 CRC 值的计算范围包括帧起始、仲裁段、控制段、数据段接收方以同样的算法进行计算然后用计算得到的 CRC 值与此CRC段进行比较如果不一致的话就会报错。
6ACK段 ACK 段用来确认接收是否正常标准格式和扩展格式相同ACK 段由 ACK 槽(ACK Slot)和 ACK 界定符两部分组成。 发送单元的 ACK发送 2 个隐性位而接收到正确消息的单元在 ACK 槽ACK Slot发送显性位通知发送单元正常接收结束这个过程叫发送 ACK/返回 ACK。发送 ACK 的是所有接收单元中接收到正常消息的单元 所谓正常消息是指不含填充错误、格式错误、 CRC 错误的消息这些接收单元既不处于总线关闭态也不处于休眠态的所有接收单元中。
7帧结束 帧结束段标准格式和扩展格式相同帧结束段很简单由 7 位隐性位构成。
3.2 遥控帧
接收单元向发送单元请求数据的时候用遥控帧遥控帧由6个段组成
1帧起始表示数据帧开始的段 2仲裁段表示该帧优先级的段 3控制段表示数据的字节数及保留位的段 4CRC段检查帧的传输错误的段 5ACK 段表示确认正常接收的段 6帧结束表示数据帧结束的段。 遥控帧结构基本和数据帧一样最主要的区别就是遥控帧没有数据段。遥控帧的 RTR 位为隐性的数据帧的 RTR 位为显性因此可以通过 RTR 位来区分遥控帧和没有数据的数据帧。遥控帧没有数据因此 DLC 表示的是所请求的数据帧数据长度遥控帧的其他段参考数据帧不再赘述。
3.3 错误帧 当接收或发送消息出错的时候使用错误帧来通知错误帧由错误标志和错误界定符两部分组成 错误标志有主动错误标志和被动错误标志两种主动错误标志是 6 个显性位被动错误标志是 6 个隐性位错误界定符由 8 个隐性位组成。
3.4 过载帧 接收单元尚未完成接收准备的话就会发送过载帧过载帧由过载标志和过载界定符构成 过载标志由 6 个显性位组成与主动错误标志相同过载界定符由 8 个隐性位组成与错误帧中的错误界定符构成相同。
3.5 帧间隔 帧间隔用于分隔数据帧和遥控帧数据帧和遥控帧可以通过插入帧间隔来将本帧与前面的任何帧隔开过载帧和错误帧前不能插入帧间隔。 间隔由 3 个隐性位构成总线空闲为隐性电平长度没有限制本状态下表示总线空闲发送单元可以访问总线。延迟发送由 8 个隐性位构成处于被动错误状态的单元发送一个消息后的帧间隔中才会有延迟发送。
4 CAN通信速率 CAN总线以帧的形式发送数据到总线上的就是“0”和“1”这样的二进制数据这里就涉及到了通信速率即每秒钟发送多少位数据CAN2.0 最高速度为1Mbps/S。对于CAN总线一个位分为 4 段 1同步段(SS)2传播时间段(PTS)3相位缓冲段 1(PBS1)4相位缓冲段 2(PBS2)这些段由 Tq(Time Quantum)组成Tq 是 CAN 总线的最小时间单位。帧由位构成一个位 由 4 个段构成每个段又由若干个Tq 组成这个就是位时序。 1 位由多少个 Tq 构成、每个段又由多少个 Tq 构成等可以任意设定位时序。通过设定位时序多个单元可同时采样也可任意设定采样点。 各段的作用和 Tq 数 1个位的构成示意图 上图中采样点是指读取总线电平并将读到的电平作为位值的点。位置在 PBS1结束处。根据这个位时序我们就可以计算 CAN 通信的波特率了。 前面提到的 CAN 协议具有仲裁功能下面我们来看看是如何实现的。在总线空闲态最先开始发送消息的单元获得发送权。当多个单元同时开始发送时各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送。实现过程 单元 1 和单元 2 同时开始向总线发送数据开始部分他们的数据格式是一样的故无法区分优先级直到 T 时刻单元 1 输出隐性电平而单元 2 输出显性电平此时单元 1 仲裁失利立刻转入接收状态工作不再与单元 2 竞争而单元 2 则顺利获得总线使用权继续发送自己的数据。这就实现了仲裁让连续发送显性电平多的单元获得总线使用权。
5 总结 本次博文根据瑞萨的《CAN入门书》对CAN协议进行一个梳理总结包括其概念、电气属性、协议、速率等意在对CAN有一个基础性的认知详细协议等可参见原书。 作于202302211810已归档
———————————————————————————————————
本文为博主原创文章未经博主允许不得转载
若本文对您有帮助轻抬您发财的小手关注/评论/点赞/收藏就是对我最大的支持
祝君升职加薪鹏程万里