转载自:http://blog.ednchina.com/chenzhijun/275759/message.aspx
报文传输帧类型:
报文传输由以下4 个不同的帧类型所表示和控制:
- 数据帧:数据帧携带数据从发送器至接收器。
- 远程帧:总线单元发出远程帧,请求发送具有同一识别符的数据帧。
- 错误帧:任何单元检测到一总线错误就发出错误帧。
- 过载帧:过载帧用以在先行的和后续的数据帧(或远程帧)之间提供一附加延时。数据帧(或远程帧)通过帧间空间与前述的各帧分开。
数据帧
数据帧由7 个不同的部分组成:
帧起始、仲裁、控制、数据、CRC 、应答、帧结尾。数据可以为0。
帧起始
它标志数据帧和远程帧的起始,由一个单独的“显性”位组成。只在总线空闲(参见“总线空闲”)时,才允许站开始发送(信号)。所有的站必须同步首先开始发送信息的站的帧起始前沿(参见“硬同步”)。
仲裁场
标准格式帧与扩展格式帧的仲裁场格式不同。
- 标准格式里,仲裁场由11 位识别符和RTR 位组成。识别符位由ID-28…ID-18。
- 扩展格式里,仲裁场包括29 位识别符、SRR 位、IDE 位、RTR 位。其识别符由ID-28... ID-0。为了区别标准格式和扩展格式,前版本CAN 规范1.0-1.2 的保留位r1 现表示为IDE Bit。
识别符
识别符—标准格式
识别符的长度为11 位,相当于扩展格式的基本ID(Base ID)。这些位按ID-28 到ID-18 的顺序发送。最低位是ID-18。7 个最高位(ID-28 - ID-22)必须不能全是“隐性”。
识别符—扩展格式
和标准格式形成对比,扩展格式由29 位组成。其格式包含两个部分:11 位基本ID、18 位扩展ID。
基本ID:基本ID 包括11 位。它按ID-28 到ID-18 的顺序发送。它相当于标准识别符的格式。基本ID定义扩展帧的基本优先权。
扩展ID:扩展ID 包括18 位。它按ID-17 到ID-0 顺序发送。
标准帧里,识别符其后是RTR 位。
RTR 位(标准格式以及扩展格式)
RTR 的全称为“远程发送请求位(Remote Transmission Request BIT)”。
RTR 位在数据帧里必须为“显性”,而在远程帧里必须为“隐性”
扩展格式里,基本ID 首先发送,其次是IDE 位和SRR 位。扩展ID 的发送位与SRR 位之后。
SRR 位(扩展格式)
SRR 的全称是“替代远程请求位(Substitute Remote Request BIT)”。
SRR 是一隐性位。它在扩展格式的标准帧RTR 位位置,因此代替标准帧的RTR 位。因此,标准帧与扩展帧的冲突是通过标准帧优先于扩展帧这一途径得以解决的,扩展帧的基本ID(参见以下的“扩展识别符”)如同标准帧的识别符。
IDE 位(扩展格式)
IDE 的全称是“识别符扩展位(Identifier Extension Bit)”
IDE 位属于:
- 扩展格式的仲裁场
- 标准格式的控制场
标准格式里的IDE 位为“显性”,而扩展格式里的IDE 位为“隐性”。
控制场(标准格式以及扩展格式)
控制场由6 个位组成。标准格式的控制场格式和扩展格式的不同。标准格式里的帧包括数据长度代码、IDE 位(为显性位,见上文)、及保留位r0。扩展格式里的帧包括数据长度代码和两个保留位:r1 和r0。其保留位必须发送为显性,但是接收器认可“显性”和“隐性”位的组合。
数据长度代码(标准格式以及扩展格式)
数据长度代码指示了数据场里的字节数量。数据长度代码为4 个位,它在控制场里发送。
数据长度代码中数据字节数的编码
缩写: d—“显性”
r—“隐性”
数据场(标准格式以及扩展格式)
数据场由数据帧里的发送数据组成。它可以为0~8 个字节,每字节包含了8 个位,首先发送MSB。
CRC 场(标准格式以及扩展格式)
CRC 场包括CRC 序列(CRC SEQUENCE),其后是CRC 界定符(CRC DELIMITER)。
CRC 序列(标准格式以及扩展格式)
由循环冗余码求得的帧检查序列最适用于位数低于127 位〈BCH 码〉的帧。为进行CRC 计算,被除的多项式系数由无填充位流给定,组成这些位流的成分是:帧起始、仲裁场、控制场、数据场(假如有),而15 个最低位的系数是0。将此多项式被下面的多项式发生器除(其系数以2 为模):
X 15 + X 14 + X 10 + X 8 + X 7 + X 4 + X 3 + 1
这个多项式除法的余数就是发送到总线上的CRC SEQUENCE(CRC 序列)。为了实现这个功能,可以使用15 位的位移寄存器—CRC_RG(14:0)。如果NXTBIT 指示位流的下一位,那么从帧的起始到数据场末尾都由没有填充的位顺序给定。
CRC 序列(CRC SEQUENCE)的计算如下:
CRC_RG = 0; // 初始化移位寄存器
REPEAT
CRCNXT = NXTBIT EXOR CRC_RG(14);
CRC_RG(14:1) = CRC_RG(13:0); // 寄存器左移一位
CRC_RG(0) = 0;
IF CRCNXT THEN
CRC_RG(14:0) = CRC_RG(14:0) EXOR (4599hex);
ENDIF
UNTIL (CRC 序列起始或有一错误条件)
在传送/接收数据场的最后一位以后,CRC_RG 包含有CRC 顺序。
CRC 界定符(标准格式以及扩展格式)CRC 序列之后是CRC 界定符,它包含一个单独的“隐性”位 。
应答场(标准格式以及扩展格式)
应答场长度为2 个位,包含应答间隙(ACK SLOT)和应答界定符(ACK DELIMITER)。在ACK 场(应答场)里,发送站发送两个“隐性”位。
当接收器正确地接收到有效的报文,接收器就会在应答间隙(ACK SLOT)期(发送ACK 信号)向发送器发送一“显性”位以示应答。
应答界定符
应答界定符是应答场的第二个位,并且是一个必须为“隐性”的位。因此,应答间隙(ACK SLOT)被两个“隐性”的位所包围,也就是CRC 界定符(CRC DELIMITER)和应答界定符(ACK DELIMITER)。
帧结尾(标准格式以及扩展格式)
每一个数据帧和远程帧均由一标志序列定界。这个标志序列由7 个“隐性”的位组成。
文章评论(0条评论)
登录后参与讨论