一、结构分层
1.物理层
物理层其定义了信号实际的发送方式、位时序、位的编码方式以及同步机制;
但can的通信速度、采样点、驱动器与总线的电气特性、连接器的形态需要自行定义。
2.数据链路层
数据链路层将物理层收到的信号组织成有意义的消息,并提供传送错误控制的控制流程。
物理层可分为MAC子层和LLC子层,MAC子层属于CAN协议的核心部分。
LLC:为远程数据请求及数据传输提供服务,确定哪些报文需要被验收以及恢复管理和过载通知。
MAC:主要传送报文的规则,包括帧结构、仲裁、错误检测和故障界定等。
3物理层
物理层可分为MAC子层和LLC子层,MAC子层属于CAN协议的核心部分。
LLC:为远程数据请求及数据传输提供服务,确定哪些报文需要被验收以及恢复管理和过载通知。
MAC:主要传送报文的规则,包括帧结构、仲裁、错误检测和故障界定等。
4.传输层
传输层定义了当发送错误和仲裁失败时会再次尝试。
二、CAN总线的电平信号与报文
1.电平信号
CAN总线有CAN_H与CAN_L两根线;
显性信号(0):当CAN_H为3.5V,CAN_L为1.5V,差值为2V时,会发送一个显性信号;
隐形信号(1):当CAN_H与CAN_L均为2.5V,差值为0V时,会发送一个隐形信号;
2.报文的帧类型
数据帧:将数据从发送器传输到接收器。
远程帧:请求发送具有同一标识符的数据。
错误帧:任何单元检测到总线错误就发出错误帧。
过载帧:在相邻数据帧或远程帧之间提供附加的延时。
补充:数据帧和远程帧可以使用标准帧及扩展帧2种格式。
3.报文的帧结构
以上图为例,从左边第1位开始,帧间隔之后分别为:
帧起始(1位):表示一个的开始,始终为显性信号;
仲裁段(标准帧为11位标识符,扩展帧为29位标识符):
标识符可以实现仲裁功能,且可以设置该帧的优先级;
RTR:远程发送请求为,表示这一帧的类型,显性信号0为数据帧,隐形信号1为远程帧;
控制段:
前两位为保留位,r1,r0,必须为显性信号;
DLC:由0到8的数字构成(超过8会视为8,不会报错),在数据帧中,表示数据段所包含的数据大小(单位为字节),在远程帧中,表示所要请求的数据长度;
数据段:
由0~8字节的数据组成,遵循高位先行的原则;
CRC校验段:
15位的CRC校验位,将帧起始到数据段进行校验;
CRC段界定符为1位隐形信号;
应答段;
1位ACK槽,一般为隐形信号,只有当接收端收到信号且通过校验时,接收端会在ACK槽发送一个显性信号,也可以作为发送端判断数据是否发送成功的标志;
应答段界定符,为应答段的第二位必须为1位隐形信号;
帧结尾:
表示一帧的结束,始终为7位隐形信号;
4.错误帧
错误帧用于在接收和发送消息检测到错误时向网络通知错误,该帧由错误标志和错误界定符构成
错误标志包括主动错误标志和被动错误标志两种
------主动错误标志(Active Error):6位显性位
------被动错误标志(Passive Error):6位隐性位
错误界定符由8位隐性位构成
5.过载帧
过载帧用于下一个数据帧或远程帧需要一定的延时,过载帧由过载标志和过载界定符构成。
过载标志由6位显性位构成
过载界定符由8位隐性位构成
6.仲裁机制
显性位具有"优先"意味,只要有一个单元输出显性电平,总线上即为显性电平。
隐性位具有"包容"意味,只有所有单元都输出隐性电平,总线上才为隐性电平。
标识符越小,优先级越高。
三、错误类型
1.位错误
单元在发送位的同时也对总线进行监视。如果所发送的位值与所监视的位值不相符合,则在此位时间里检测到一个位错误。
2.填充错误
在应当使用位填充法进行编码的报文场中,出现了第6个连续相同的位电平时,将检测到一个填充错误。
3.CRC错误
CRC序列包括了发送器计算的CRC结果。接收器计算CRC的方法与发送器相同。如果计算结果与接收到CRC序列的结果不相符,则检测到一个CRC错误。
4.格式错误
如果一个固定格式的位场含有1个或多个非法位,则检测到一个格式错误。
5.应答错误
只要在应答间隙期间所监视的位不为显性,发送器就会检测到一个应答错误。
四、错误处理机制
先通过5类检测识别错误,依靠收发双计数器量化错误,再按计数器的值触发主动/被动/总线关闭三级响应,保障通信可靠。
补充:
主动错误是可以正常参与总线通信的状态,并在检测到错误时发出"主动错误"标志。
被动错误单元即使检测到错误,而其他处于主动错误的单元如果没发现错误,整个总线也被认为是没有错误的。
被动错误单元检测出错误时,输出被动错误标志。
被动错误状态单元在发送结束后不能马上再次开始发送。在开始下次发送前,在间隔帧期间内必须插入"延迟传送"(8位隐性位)。

