一、CAN介绍
-
总线值:总线线性只,同时有“显性”和“隐形”,显示为显性,显性逻辑0,差分。
-
睡眠模式和唤醒:唤醒时,虽然传输层要等待一段时间使系统振荡器稳定,然后还要等待一段时间直到与总线活动同步(通过检查 11 个连续的“隐性”位),但在总线驱动器被重新设置为“总线在线”之前,内部运行已重新开始。为了唤醒系统上正处于睡眠模式的其他节点,可以使用一特殊的唤醒报文,此报文具有专门的、最低等级的识别符。( rrr rrrd rrrr; r =‘’隐性’ d= ‘显性’)
-
错误检测( Error Detection):
为了检测错误,必须采取以下措施:
- 监视(发送器对发送位的电平与被监控的总线电平进行比较)
- 循环冗余检查
- 位填充
- 报文格式检查 -
错误检测的执行( Performance of Error Detection):
错误检测的机制要具有以下的属性:
- 检测到所有的全局错误
- 检测到发送器所有的局部错误
- 可以检测到一报文里多达 5 个任意分布的错误
- 检测到一报文里长度低于 15(位)的突发性错误
- 检测到一报文里任一奇数个的错误
对于没有被检测到的错误报文,其残余的错误可能性概率低于:报文错误率* 4.7 * 10 –11。 -
错误标定和恢复时间( Error Sinalling and Recovery Time) :
任何检测到错误的节点会标志出已损坏的报文。此报文会失效并将自动地开始重新传送。如果不再出
现新错误的话,从检测到错误到下一报文的传送开始为止,恢复时间最多为 29 个位的时间。
二、报文格式
1.数据帧和遥控帧
帧起始、仲裁场、控制场、数据场、 CRC 场、应答场、帧结尾。数据场的长度可以为 0。
-
帧起始:数据帧和远程帧的起始,单独的“显性”位组成。
-
仲裁场:识别符和远程发送请求位( RTR),识别符11位,最高到最低发送,ID-10到ID-0,高七位不能全是隐性。
RTR 位:该位在数据帧里必须为“显性”,而在远程帧里必须为“隐性”。
-
控制场:6 个位组成, 包括数据长度代码和两个将来作为扩展用的保留位。 所发送的保留位必须为“显性”。接收器接收所有由“显性”和“隐性”组合在一起的位 。数据帧的范围0-8个字节。
-
数据场由数据帧中的发送数据组成。它可以为 0~8 个字节,每字节包含了 8 个位,首先发送 MSB 。
-
CRC场:包括序列和界定符,序列是位流(帧起始、仲裁场、控制场、数据场 )在多项式发生器,界定符是单独“隐性位”
-
应答场:两个“隐性”位,发送ACK将第一个变成“显性”。
-
帧结尾:7个“隐性”位
2.错误帧
有以下 5 种不同的错误类型(这 5 种错误不会相互排斥)
-
位错误
站单元在发送位的同时也对总线进行监视。如果所发送的位值与所监视的位值不相符合,则在此位时间里检测到一个位错误( BIT ERROR)。但是在仲裁场( ARBITRATION FIELD)的填充位流期间或 ACK间隙( ACK SLOT)发送一“隐性”位的情况是例外的—— 此时,当监视到一“显性”位时,不会发出位
错误( BIT ERROR)。当发送器发送一个被动错误标志但检测到“显性”位时,也不视为位错误。 -
填充错误
如果在使用位填充法进行编码的信息中,出现了第 6 个连续相同的位电平时,将检测到一个填充错误。 -
CRC 错误
CRC 序列包括发送器的 CRC 计算结果。接收器计算 CRC 的方法与发送器相同。如果计算结果与接收到 CRC 序列的结果不相符,则检测到一个 CRC 错误( CRC ERROR) -
形式错误
当一个固定形式的位场含有 1 个或多个非法位,则检测到一个形式错误( FORM ERROR)。 -
应答错误
只要在 ACK 间隙( ACK SLOT)期间所监视的位不为“显性”,则发送器会检测到一个应答错误( ACKNOWLEDGMENT ERROR)。 -
(1)主动错误
主动错误标志由 6 个连续的“显性”位组成。错误界限是由8个“隐性”位组成。
当发送错误计数器值等于或超过 128 时,或当接收错误计数器值等于或超过 128 时,节点为“错误被动”。让节点成为“错误被动”的错误条件致使节点发出主动错误标志。
(2)被动错误
被动错误标志由 6 个连续的“隐性”的位组成,除非被其他节点的“显性”位重写。错误界限是由8个“隐性”位组成。
(3)总线关闭
当发送错误计数器值大于或等于 256 时,节点为“总线关闭”
3.过载帧
过载帧包括两个位场:过载标志(6 个“显性”)和过载界定符 (8 个“隐性” )
有两种过载条件都会导致过载标志的传送:
1. 接收器的内部条件(此接收器对于下一数据帧或远程帧需要有一延时)。
2. 间歇场期间检测到一“显性”位
4.帧间隔
数据帧(或远程帧)与其前面帧的隔离是通过帧间空间实现的,无论其前面的帧为何类型(数据帧、远程帧、错误帧、过载帧)。所不同的是,过载帧与错误帧之前没有帧间空间,多个过载帧之间也不是由帧间空间隔离的。
间歇
间歇包括 3 个“隐性”的位。
间歇期间,所有的站均不允许传送数据帧或远程帧,唯一要做的是标示一个过载条件。
总线空闲
总线空闲的(时间)长度是任意的。只要总线被认定为空闲,任何等待发送信息的站就会访问总线。
在发送其他信息期间,有报文被挂起,对于这样的报文,其传送起始于间歇之后的第一个位。