CAN协议教程Word格式.docx
- 文档编号:22100905
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:27
- 大小:114.79KB
CAN协议教程Word格式.docx
《CAN协议教程Word格式.docx》由会员分享,可在线阅读,更多相关《CAN协议教程Word格式.docx(27页珍藏版)》请在冰豆网上搜索。
对于CAN2.0A,一个11位的标识符和一个支配数据帧的RTR位。
对于CAN2.0B,一个29位的标识符(这个标识符还包含两个隐性位:
SRR和IDE)和RTR位。
数据字段。
包含0到8字节数据。
CRC字段。
包含一个基于报文大部分数据计算得到的15位校验和。
校验和用于错误检测。
确认位。
任何能够正确接收报文的CAN控制器都会在每条报文的末尾发送一个确认位。
传输器检查确认位是否存在,如果没有检测到确认位,会重传报文。
注1:
请注意,总线上存在确认位不表示任何目标地址已经收到报文。
唯一表示的是,总线上的一个或多个节点已经正确收到报文。
注2:
仲裁字段中的标识符不一定标识报文的内容(尽管其名字会让人如此认为)。
CAN2.0A(“标准CAN”)数据帧
CAN2.0B(“扩展CAN”)数据帧
“大家好,有没有人能够生成标签为X的数据?
远程帧与数据帧十分相似,但是有两个重要的区别:
它被显式标记为远程帧(仲裁字段中的RTR位为隐性),并且
它没有数据字段。
远程帧的设计目的是提出要求传输相应的数据帧。
例如,如果节点A传输一个仲裁字段设置为234的远程帧,那么节点B(如果已经正确初始化)可能通过一个仲裁字段也设置为234的数据帧进行响应。
远程帧可以用来实现一种类型的请求-响应类型的总线通信管理。
但是,远程帧在实践中很少使用。
还有一点值得注意的是,CAN标准没有规定这里说明的行为。
大部分CAN控制器都可以进行编程,从而自动响应远程帧或通知本地CPU。
远程帧有一个注意事项:
数据长度代码必须设置成期望的响应报文的长度。
否则仲裁将无法工作。
有时会声称响应远程帧的节点会在识别标识符后立即开始传输,从而“填充”空的远程帧。
但是事实并非如此。
远程帧(2.0A类型):
“大家好(大声),让我们重新试一下”
简单地说,错误帧是一种违背CAN报文帧规则的特殊报文。
它在一个节点检测到故障时被传送,将导致所有其它节点也检测到故障,所以其它节点也将发送错误帧。
然后传输器将自动尝试重传报文。
有一种复杂的错误计数器方案,可以确保节点无法通过重复传输错误帧来破坏总线通信。
错误帧包含一个错误标志。
这个错误标志是6位长的相同值(因此违背位填充规则)和一个错误分隔符(8个隐性位)。
错误分隔符提供一些空间,以便总线上其它节点在检测到第一个错误标志时可以发送它们的错误标志。
错误帧图示如下:
“我是非常繁忙的小型82526,您可以稍等片刻吗?
这里,我们仅仅出于知识完整性目的而提及过载帧。
在格式方面,过载帧与错误帧非常相似。
它由过于繁忙的节点传输。
过载帧并不常用,因为当今的CAN控制器会非常智能化地避免使用过载帧。
事实上,会生成过载帧的唯一一种控制器是现在已经过时的82526。
标准CAN和扩展CAN
最初,CAN标准把仲裁字段中标识符的长度定义为11位。
后来,客户需求迫使扩展此标准。
新格式通常称为扩展CAN,标识符不允许少于29位。
为了区分这两种帧类型,在控制字段中使用了一个保留位。
标准的正式名称是
2.0A,仅支持11位标识符
2.0B,支持完整的29位标识符(也可以混合使用11位标识符)的扩展版本。
2.0B节点可以是
“2.0B主动型”,也就是说,它可以发送和接收扩展帧,或者
“2.0B被动型”,也就是说,它将默默抛弃接收到的扩展帧(但是请参考下述内容)
1.x表示初始规范及其修订版。
如今的新型CAN控制器通常是2.0B类型。
1.x或2.0A类型的控制器如果接收到29个仲裁位的报文会很麻烦。
2.0B被动型控制器容许这些报文,如果它们正确的话会进行确认,然后抛弃这些报文。
2.0B主动型控制器既可传送也可接收这些报文。
实现2.0B和2.0A(和1.x)的控制器相互兼容,只要实现2.0B的控制器不发送扩展帧,可以在同一个总线上使用它们!
有时候有人会鼓吹标准CAN“优于”扩展CAN(因为扩展CAN报文中包含更多管理位)。
这种说法未必正确。
如果您使用仲裁字段来传送数据,那么扩展CAN真正占用的管理位可能比标准CAN少。
基本CAN和完整CAN
术语“基本CAN”和“完整CAN”源自CAN的初创年代。
历史上曾经有Intel82526CAN控制器,它为程序员提供DPRAM风格的接口。
然后出现了Philips82C200CAN控制器,它使用面向FIFO(队列)的编程模型和有限制的过滤能力。
为了区分这两种编程模型,人们出于某些原因把Intel的模型称为“完整CAN”,把Philips的模型称为“基本CAN”。
如今,大多数CAN控制器同时支持这两种编程模型,所以没有理由继续使用术语“基本CAN”和“完整CAN”。
事实上,这些术语可能会令人迷惑,应当尽量避免。
当然,“完整CAN”控制器可以和“基本CAN”进行通信,反之也可。
不存在任何兼容性问题。
总线仲裁和报文优先级
报文仲裁(两个或多个CAN控制器协商确定谁使用总线的过程)对于数据传送中真正可用的带宽非常重要。
任何CAN控制器都可能在检测到空闲总线时开始传送数据。
这可能会导致两个或多个控制器(几乎)同时开始传送报文。
通过下列方法解决这种冲突。
传送节点在发送报文时监视总线。
如果节点在自身发送隐性位时检测到显性位,它将立即退出仲裁过程并转变成接收方。
仲裁针对整个仲裁字段进行,当该字段已经被发送时,总线上恰好只剩一个传送节点。
这个节点就像什么都没发生那样继续传送。
其它潜在的传送节点将在总线下次空闲时尝试重传它们的报文。
仲裁过程不会消耗时间。
这种位操作方式仲裁成功的重要条件是没有两个节点传送相同的仲裁字段。
这个规则有一个例外:
如果报文不包含任何数据,那么任何节点都可能传送该报文。
因为总线采用连续逻辑与运算,并且显性位是逻辑0,所以结果是包含数值最低仲裁字段的报文将赢得仲裁。
问:
如果一个节点是总线上的唯一节点并且试图进行传送,会发生什么情况?
答:
当然,节点将赢得仲裁并顺利地进行报文传送。
但是,当进行确认的时候,没有任何节点将在ACK期间发送显性位,所以传送节点将检测到ACK错误,发送一个错误标志,将传送错误计数器加8并开始重传。
这将发生16次。
然后传送节点将进入错误被动状态。
通过错误限制算法中的一个特殊值,如果节点为错误被动并且错误是一个ACK错误,传送错误计数器不再增加。
所以节点将一直继续传送,至少一直到有人确认报文。
报文寻址和标识
再次提醒,CAN报文中没有任何显式的地址。
每个CAN控制器都会检查总线上的所有通信,并使用硬件过滤器和软件的组合来确定是否对该报文感兴趣。
事实上,CAN中没有报文地址的概念。
报文的内容由存在于报文中某处的标识符进行标识。
CAN报文被称为“内容寻址”的报文。
常规的报文地址类似于“这是发给节点X的报文”。
而内容寻址的报文类似于“这是包含标签为X的数据的报文”。
这两个概念之间的区别很小但是非常重要。
根据标准,仲裁字段的内容用来确定总线上报文的优先级。
所有CAN控制器还将在硬件过滤过程中使用整个(一些控制器将只使用一部分)仲裁字段作为主键。
标准没有规定仲裁字段必须用作报文标识符。
但是,不管怎样,这是一种常见情况。
标识符值注意事项
我们说过,标识符可以是11位(CAN2.0A)或29位(CAN2.0B)。
这不完全正确。
出于与某种老式CAN控制器(猜猜是哪种)兼容的原因,标识符不得把7个最高有效位都设置为1。
所以,对于11位标识符,只剩下0到2031,29位标识符可以使用532676608个不同的值。
注意,所有其它CAN控制器都接受“非法”标识符,所以现代CAN系统标识符2032到2047可以自由使用。
三,CAN物理层
CAN总线使用不归零(NRZ)的位填充。
有两种不同的信号状态:
显性位(逻辑0)和隐性位(逻辑1)。
这些信号状态对应于所用物理层(有几种不同的物理层)的某种电气水平。
不同的物理层
物理层定义总线上的电气水平和信号方案、缆线阻抗和类似的方面。
有几种不同的物理层:
∙最常见的类型由CAN标准定义,是ISO11898-2的一部分,是一种双线平衡信号方案。
有时也称为“高速CAN”。
∙同一个ISO标准的另一部分(ISO11898-3)为低总线速度定义了另一种双线平衡信号方案。
它具有容错能力,所以即使一条总线线缆断开或对地短路或连接到后备电池,信号都可以继续发出。
有时也称为“低速CAN”。
∙SAEJ2411定义一种单线缆(当然,加上接地)物理层。
主要用在汽车中–例如GM-LAN。
∙还有几种专有的物理层。
∙在没有CAN驱动程序的早期,使用RS485的修改。
∙对于那些对报文细节感兴趣的用户,可进入第6页观看一些示波图。
不同的物理层不能互通,这是一个规则。
一些组合可能在情况良好时可以工作或看上去可以工作。
例如,在相同总线上同时使用“高速”和“低速”收发器有时可以工作。
大量CAN收发器芯片产自Philips;
其它厂商包括Bosch、Infineon、Siliconix和Unitrode。
一种常见的收发器类型是82C250,它实现ISO11898定义的物理层。
82C251是一种改进的版本。
“低速CAN”的一种常见收发器是产自Philips的TJA1054。
最大总线速度
按照标准,CAN总线的最大速度是1Mbit/s。
然而,一些CAN控制器能够处理比1Mbit/s更快的速度,可以在特殊应用场合中使用。
低速CAN(ISO11898-3,参见上文)最快可以达到125kbit/s。
单线缆CAN在标准模式中可以达到大约50kbit/s。
如果使用特殊的高速模式(例如用于ECU编程),可以达到大约100kbit/s。
最小总线速度
注意,一些总线收发器不允许低于特定的比特率。
例如,使用82C250或82C251时,低于10kbit/s不会有问题。
但是,如果使用TJA1050,则不能低于大约50kbit/s。
请查阅数据表。
最大线缆长度
如果速度为1Mbit/s,可以使用的最大线缆长度大约为40米(130英尺)。
这是因为仲裁方案需要信号的峰值可以到达最远的节点并且在位采样之前再次返回。
换言之,线缆长度受光速限制。
曾有人提出提高光速,但是因为这会产生时空交错而被驳回。
其它的最大线缆长度是(这些是近似值)–
∙100米(330英尺),比特率为500kbit/s
∙200米(650英尺),比特率为250kbit/s
∙500米(1600英尺),比特率为125kbit/s
∙6千米(20000英尺),比特率为10kbit/s
如果使用光隔离器来提供电气隔离,那么最大总线长度会相应地减小。
提示:
使用快速光隔离器并观察通过设备的延迟(不要采用指定的最大比特率)。
总线端接
ISO11898CAN总线必须进行端接。
通过在总线各端点使用120欧姆的电阻达到这个要求。
端接可以达到两个目的:
1.消除总线终端处的信号反射。
2.确保总线获得正确的直流电电平。
不管速度快慢,ISO11898CAN总线始终都必须进行端接。
我将重复这一点:
对于实验性工作,一个端接器可能就已足够。
如果没有连接任何端接器,但是您的CAN总线仍然能够正常工作,那么您只是比较幸运而已。
注意,其它物理层(例如“低速CAN”、单线缆CAN和其它物理层)不一定需要进行端接。
但是您的常用高速ISO11898CAN总线总是需要至少一个端接器。
请参考这篇文章获取关于CAN总线端接的更多信息。
线缆
ISO11898规定线缆阻抗名义上应该是120欧姆,但是允许[108..132]欧姆区间的任何阻抗。
现今市场上满足这种要求的线缆并不多。
允许的阻抗区间将来很有可能会扩大。
ISO11898针对屏蔽或非屏蔽的双绞线而定义。
单线缆标准SAEJ2411的相关工作正在进行之中。
CAN连接器
对于CAN总线连接器,根本没有任何标准!
通常,每种高层协议都会定义一种或一些首选的连接器类型。
常见的类型包括
∙9针DSUB(由iCiA建议)。
∙5针迷你C和/或小型C连接器(DeviceNet和SDS使用)。
∙6针德驰连接器(由CANHUG建议用于移动液压场合)。
∙参见第7页中一些不同的连接器布局。
四,CAN示波器图片
这是一幅来自最普通的ISO11898CAN总线(以1Mbit/s的比特率运行)的图片。
收发器是82C251。
也就是说,物理层是由ISO11898指定的类型。
测量在CAN_H(CAN高位)和GND(接地)之间进行。
注意,静态和隐性总线电压在2.5V左右。
传送显性位时,电压升高到3.5V左右。
以下是同一个总线,但是测量在CAN_L(CAN低位)和GND(接地)之间进行:
这是另一个以125kbit/s比特率发送的报文。
报文的(11位)标识符是300(十六进制值为12c)。
如果仔细察看,您应该能够识别报文中前面的位。
这是一幅更复杂的图片。
它显示与上面例子相同的报文。
仍然是11位标识符300,比特率仍然是125kbit/s,但是CAN总线上没有端接。
CAN线缆是短距离的普通带状线缆。
那么,发生了什么情况?
这里,比特率是125kbit/s,所以一个位的时间是8微秒。
1.首先,传送器发送一个起始位。
这是一个逻辑’0′,也就是一个显性电平。
2.然后传送标识符。
十进制300的十六进制值是12c,或者二进制表示是00100101100。
前两个0会顺利传送。
这解释了图片中看到的24微秒的显性电平。
3.然后应该传送一个’1′。
但是因为总线没有端接,所以斜率不是预期的结果。
传送节点现在将认为它在总线上看到的是’0′。
4.因为这种情况发生在仲裁阶段,所以传送器将停止传送–它认为有其它节点正在传送。
总线现在将变为隐性状态(因为实际上没有任何节点在传送)。
5.在6个隐性位之后,传送器和接收器都将检测到数据错误,然后开始进行错误处理。
这时,已经经过了80微秒(一个起始位、两个’0′、一个误解的位和六个隐性位,总共10个位,等于80微秒)。
6.检测到数据错误的所有节点现在将开始传送一个错误帧。
这种情况下,因为在捕获到上方图片之前产生了许多错误,错误帧为被动型,所以传送器是错误被动型。
被动型错误帧和主动型错误帧相似,但是使用隐性电平进行传送,所以在总线上不可见。
7.被动型错误帧持续6位的时间。
8.然后,所有节点等待一个8个隐性位的时长(称为错误分隔符)。
9.然后,所有节点等待一个3个隐性位的时长(称为间歇)。
10.对以上时间求和,结果是1+6+6+8+3=24个隐性位=192微秒(参考图片)
教训:
始终端接CAN总线!
反射不一定有害,但是损坏的边缘形状将破坏通信。
这里是同一个CAN总线在另一个时间刻度中的情况:
CAN总线大约2分米(8英寸)长。
信号的下冲和振铃均可见,但是在这种情况中无关紧要。
这次,平缓的上升斜率是问题所在。
这里是相同的设置,但是这次传送器和接收器都是错误主动型:
发生了什么情况?
1.如上图所示,传送了三个’0′(花费24微秒),接下去的位被误解,所以传送器认为它已经失去仲裁。
2.传送器等待6位,然后检测到一个数据错误。
误解的位和这6个位花费56微秒。
3.传送器和接收器现在开始传送错误帧。
它是6个显性位(48微秒)。
4.传送错误帧的节点现在等待8个隐性位。
但是,因为上升斜率不对,第一个位被误解。
节点将认为这是另一个节点在传送错误帧,所以将忽略它。
5.当总线回到隐性电平时,所有节点等待8位。
6.然后是3个隐性位的间歇。
7.3+9=12个位=96微秒(如图中所示)。
8.然后,传送器重新尝试并得到相同的结果。
一段时间以后,传送器进入错误被动型状态,并将如前所述那样运行。
这里是另一幅图片。
这种设置中,CAN总线上只有一个节点。
该节点试图传送一条报文,但是没有其它节点在侦听。
那么,会发生什么情况?
1.首先,传送器发送整个报文。
2.传送器期望ACK位槽中填充一个显性电平。
但是,因为没有其它节点在侦听,没有任何ACK到达,所以传送器检测到一个确认错误。
3.然后传送器传送一个被动型错误标志(上图中,尝试发送了几秒钟,所以不再是错误主动型,而是被动型)。
4.被动型错误标志后面跟随一个错误分隔符和间歇。
5.因为这个节点尝试发送一个报文但是操作失败,它必须再等待8位才能开始新的传送。
这种情况在CAN规范中称为“挂起传送”。
6.传送节点还必须将其传送错误计数加8。
但是,这是CAN规范中的特殊情况,只有当传送器是错误主动型时才会发生。
当传送器进入错误被动型时,它不会增加其传送器错误计数(这种情况中),而是会不断重试传送。
所以,上图表示,一条报文被传送,然后短暂停顿(时间为错误标志、错误分隔符、间歇和挂起传送的总和)。
然后报文被不断重传……
五,CAN连接器
9针DSUB
CiA推荐使用这种连接器布局,是事实上的工业标准。
1.–保留位
2.CAN_L(CAN低位)CAN_L总线线路(显性低位)
3.CAN_GND(CAN接地)CAN接地
4.–保留位
5.CAN_SHLD(CAN屏蔽)可选CAN屏蔽
6.GND(接地)可选CAN接地
7.CAN_H(CAN高位)CAN_H总线线路(显性高位)
8.–保留位(错误行)
9.CAN_V+(CAN电源)可选电源
KVASER用户:
请注意,文档“LAPcan硬件指南”中阐述了如何在KVASERDRVcan驱动器线缆上使用这些引脚,可以在此下载该文档。
如果提供电源,电压范围应该为+7至+13V,额定电流为100mA。
模块提供一个公接头,内部必须连接引脚3和6。
引脚编号适用于接头侧视图的公接头或焊接侧视图的母接头。
为了方便记住引脚编号,可留意CAN_LOW的引脚号小,而CAN_HIGH的引脚号大。
5针迷你C型接头
DeviceNet和SDS都使用这种接头,并且这两种协议碰巧兼容。
引脚功能DeviceNet颜色
1信号输出无颜色
2V+红色
3V-黑色
4CAN_H白色
5CAN_L蓝色
模块带有公接头。
输入电压为24V+-1%。
注意:
在DeviceNet规范版本1.x中,图9.13中母接头的编号顺序错误。
规范2.0及后续版本的编号顺序正确。
6针德驰DT04-6P
CANHUG建议用在移动液压应用场合中。
模块端为公接头,总线端为母接头。
对于输入电压,目前没有建议的值。
引脚功能建议的线缆颜色
1电源负极黑色
2CAN_H白色
3可选–信号接地黄色
4可选–启动灰色
5电源正极红色
6CAN_L蓝色
六,CAN位计时
位的布局
出于计时目的,CAN总线上的每个位都划分成至少4个时间成分。
时间成分逻辑上划分成四个组或节–
∙同步节
∙传播节
∙阶段节1
∙阶段节2
这里是一个CAN数据位的图片:
同步节始终是一个时间成分长,用于时钟同步。
总线上的数据改变时,此处期望一个位边界。
传播节用来补偿总线线路中的延迟。
如有必要,阶段节可以缩短(阶段节1)或延长(阶段节2),以保持时钟同步。
在阶段节1和阶段节2之间的边界上对总线电平进行采样。
大部分CAN控制器还提供选项可以在一个位期间进行三次采样。
这种情况中,在采样点之前的两个时间成分的边界上进行采样,结果取决于大数判决译码(至少82527这样)。
时钟同步
为了调整片上总线时钟,CAN控制器可能会缩短会延长位的长度(时间成分的整数倍)。
这些位时间调整的最大值称为同步跳变宽度(SJW)。
硬同步在起始位从隐性到显性转换时产生。
位时间从该边界重新开始。
重新同步在报文的同步节中不发生位边界时产生。
一个阶段节被缩短或延长(缩短值或延长值取决于信号中的阶段错误)。
可以使用的最大值由同步跳变宽度参数决定。
位计时寄存器计算
大部分CAN控制器允许程序员使用下列参数设置位计时:
∙时钟的预分频器值
∙采样点之前的时间成分数量
∙采样点之后的时间成分数量
∙同步跳变宽度(SJW)中的时间成分数量
通常为这个目的提供两个寄存器:
btr0和btr1。
但是,不同控制器之间略有差异,所以请仔细阅读您的数据清单。
在82c200和SJA1000上(均产自NXP–nee飞利浦),寄存器布局如下:
7
6
5
4
3
2
1
btr0
SJW1
SJW0
BRP5
BRP4
BRP3
BRP2
BRP1
BRP0
btr1
SAM
TSEG22
TSEG21
TSEG20
TSEG13
TSEG12
TSEG11
TSEG10
∙BRP0..BRP5设置时钟预分频器值
∙SJW0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CAN 协议 教程