CAN(控制器局域网络)拓扑结构和传输协议
一 综述
1基本概念
比特率 = 1/比特时间;
2总线数据传输方法
基于字符的传输(异步传输),在较低比特率采用;
- TICB:内部字符间断时间,每个字符之间的时间间隔;
- TIFB:内部数据帧间断时间,数据信息的最后一个字符与下一个数据信息的第一个字符之间的时间间隔。 这两个值由协议中的最大值和最小值给定。
基于比特流的传输(同步传输),一般在较高的比特率时采用。
二 CAN总线拓扑
- 一种面向比特流的线性总线,广播,确定最大的比特率为1Mbit/s。采用CSMA/CA(载波侦听多路访问冲突避免,控制器可以在任意时间对总线进行访问,如果发生冲突,则由最高优先级的发送端发送消息,低优先级的发送端调整自己的发送策略,这样可以保证优先权较高的数据信息得到确认,优先级可以在数据信息头中进行编码)。总线访问方法及错误识别,只要总线在3位时间内是空闲的,控制器就可以向总线发送消息。
- 要求所有的控制器在比特时间内做出反应,因此总线长度越小,比特率越高。一般来说,总线长度 <= (40~50)m * 1Mbit/s / 比特率;
高速CAN(比特率>=250kbit):使用绞合双绝缘导线
低速CAN(比特率>=125kbit):同样使用双绝缘导线
三 CAN数据链路层
3.1 报文标识符
- 用来标志目标。总线上的控制器接收数据信息后会根据报文标识符来决定是否对该报文数据进行进一步的处理。
- 识别该报文的优先权,低位数有高的优先权。意为,当两个控制器同时向总线传输数据时,比较这两个控制器报文的报文标识符,从第一个不一致的bit位开始,该bit位为0的报文的优先级高,该控制器获得传输权。
3.2 控制位
数据帧中可以传送0-8个有效字节的数据,具体的数据长度表示在控制位中。
远程数据帧是比较特殊的数据帧格式,它有普通的报文标识,但是没有有效数据。通过发送远程数据帧,需要数据的节点可以请求另一节点发送相应的数据帧。数据帧和远程帧具有相同的标识符。
3.3 TTCAN
CAN为事件触发机制,TTCAN为时间触发机制。
CAN只能保证优先级最高的消息被及时送达,为了使低优先级的消息也能被及时处理,加入了时间触发机制,形成了TTCAN(类似于TDMS)。TTCAN是CAN的高层协议,适用于对安全性要求较高的场合。
四 CAN传输层
4.1 ISO-TP传输
4.1.1 传输报文结构
- 从应用层的角度来说,地址信息AI和实际的数据信息SDU时不同的。因此,在ISO-TP传输中,地址信息被复制到CAN标识符中,而CAN报文的有效数据信息(0-64bit)的第一位中增加了控制字符PCI,用以说明如何解释有效数据。
单帧
如果所有的应用数据,能通过CAN报文的剩余有效数据位发送,那么使用单帧发送,格式如下图所示。PCI只占用一个字节,高7-4bit置0,低3-0bit用以表明有效数据的字节数。
如果应用数据不能通过单一的CAN报文传送,那么采用分组发送,应用数据被分解成多个CAN数据报文。首先发送首帧,首帧中有2个字节的PCI,第一个字节的高4bit被设置为0001,后面12bit用以标识有效数据的总长度,注意是有效数据而不是应用数据的长度。随后发送连续帧直到所有应用数据被发完,连续帧的PCI占一个字节,高4位被设置为0010,低4位是***SN(应用数据按升序排序,首帧序号为0,第一个连续帧号为1等等,将其值模16得到SN值)。
4.1.2 传输流程
对单帧报文而言,发送端自发发送,数据链路层自己承担错误传输和重复传输,因此传输层没有确认机制,不对连续报文之间的最小间距进行说明。
对分组报文而言,其传输流程如下图所示。
1)发送端发送首帧,然后等待接收端的流量控制帧FC。
2)FC中告诉发送端本次能接受的发送端的连续帧数目BS(1-255)和发送端发送每一帧必须停留的最小时间ST。
3)发送端发送BS个大小的连续帧,然后等待下一个FC进行新的流量控制。重复这个过程,直到所有应用数据被发送完。
注意:
1)如果FC中的BS值为0,那么发送端可以发送任意数量的连续帧而不用再等待新的FC;FS==1h时,发送方需要等待;FS==2h时,接收端告知发送端,已经发生了溢出。
2)发送端等待FC和接收端等待下一个连续帧的时间里,发送端将会执行超时监视(默认为1),如果发生了错误或超时,就会告知本身的应用层而不通知对方。
4.2 TP2.0传输——面向连接的协议
因为TP2.0是面向连接的协议,因此两个CAN总线成员之间要通信,首先要建立专有连接,然后传输数据,最后在数据传输完成后释放连接。
每一个控制器都有明确的逻辑地址,被分配到相关的CAN标识符,可用于连接的建立和其他的广播服务,用开发ID表示:开放ID = 基本ID + 设备逻辑地址。
4.2.1 广播报文
1)用开放ID作为报文标识符;且有效数据只占用7字节,第8个字节不传输;
2)有效数据的第一个字节用于发送目标控制器的逻辑地址;第二个字节是操作码,表示报文的类型,广播请求是被设置为0x23,广播响应时被设置为0x24;第三个字节是服务字节SID,表明选择应用层所定义的服务及其参数;第六七个字节被设置为0x0000,表明接收端等待应答。
4.2.2 连接建立过程
4.2.2.1连接建立过程中的报文格式
1)TX ID和RX ID都是能用于11bit的CAN标识符;
2)CAN标识符的低8位被送到第3或第5个字节,高3bit被送到第4或第6字节的后半部分;
3)第4或第6个字节的高4bit用来指示CAN标识符是否有效,0x0表明有效,0x1表明无效;
4)第2个字节为操作码,0xC0表示信道建立请求,0xD0表示肯定应答,0xD6-0xD8表示否定响应;
5)连接建立完成后,其他数据报文可以用这两个信道地址进行数据传输。
注意:这里的图和这个描述好像有点不一致,暂时不能确定哪个为真。
4.2.2.2 协商新信道参数:发送端发送带连接参数的连接建立请求报文
1)字节1是操作码,0xA0表示请求,0xA1表示应答;
2)字节2是数据块大小,即在必须通过ACK数据报文确认接收以前,应该前后接收到的CAN数据报文数目;
3)字节3-6是各种超时参数。各个参数意义如下:T1是最后一个块数据报文的CAN数据报文和通过ACK数据报文有关的确认之间的时间;T3是两个连续的CAN数据报文之间必要的时间。T2和T4是扩展,一般为0xFF。
4.2.2.3 数据传输信道
数据传输按块进行,每一块由一个或多个(数目在信道建立时用连接建立报文协商)相互连续的CAN报文组成,接收端必须对每个接收块进行确认,发送端只有收到ACK帧才能发送下一个数据块。数据报文格式如下:
1)发送端的每个报文,第一个字节是传输控制字节TPCI,确认请求/AR = 0表示发送方在等待下一个ACK帧来确认,报文结束标志EOM=1表示当前发送的是最后一个数据块的报文;4个字节的SN编号是对帧的编号,不能超过16。
2)接收端的每个报文,只有TPCI,RS表示接受状态位,和其后的SN相关,SN是确认数据帧加1的***。RS为1表示接收端已经做好了接收下一个数据块的准备,为0则阻止报文的继续传输。
3)如果RS为0,那么在T1时间内,接收端必须进一步的发送ACK帧,如果RS还是0,就重新启动T1,如果还是没有ACK帧,发送端就重复发送最后的数据块,经过一定次数的这种实验,发送端终端传输,关闭信道。
4)如果接收端要结束数据传输,接收端就发送一个BREAK帧,发送端用EOM=1来应答,从最后一个ACK后,数据传输就被拒绝了,发送端会重新开始传输,在一定次数的不成功后,发送端就中断传输,关闭信道。
5)当传输层中有多个CAN报文时,其优先级从高到低依次为:连接建立响应,连接测试,Break帧,ACK帧,数据帧,连接建立请求,断开。
4.2.2.4连接撤销:通过断开连接数据报文进行,需要接收端确认
4.3 TP1.6传输
TP1.6是TP2.0的前身,两者基本类似,不同之处在于,TP1.6没有广播报文(操作码0x23和0x24),没有用于连接测试的报文(0xA3),没有用于终端数据传输的报文(0xA4);
4.3.1 连接信道建立
4.3.2 数据传输
数据传输的报文格式同TP2.0(数据传输信道)一致,但TP1.6要求在每一次断开数据块之前,改变数据流向。对于连接已经建立好的两个控制器,发送端在发完数据后,设置数据块的最后报文EOM=1,此时发送端变为接收端,反过来也一样。每次数据流改变方向,***SN被置为0;
TP1.6能区分出确认报文的慢速和快速流向的改变。在快速数据变化方向及进行新的数据传输时,先发送确认报文ACK;在慢速数据变化方向上,不用发ACK,新的发送直接开始传输数据。
4.4 SAE J1939/21
4.4.1 报文格式
SAE传输的报文结构关键点在于那29bit的CAN标识符。最高3bit是报文优先级编码,后面是18bit的参数组号PGN,再是最低8bit的发送端逻辑地址(源地址)。其中,参数组号PGN中,关键是后面两个字节中的PDU格式PF,它将PDU区分为面向连接和面向消息两种类别。关于PF的格式如下,其中PDU1是面向连接的,报文目标是控制器,PDU2是面向消息的,识别应用层上的有效数据。
4.4.2 分组数据传输(没看懂)