CAN总线(Controller Area Network Bus)控制器局域网总线(二)
6、错误帧
- 总线上所有设备都会监督总线的数据,一旦发现“位错误”或“填充错误”或“CRC错误”或“格式错误”或“应答错误” ,这些设备便会发出错误帧来破坏数据,同时终止当前的发送设备。
7、过载帧
- 当接收方收到大量数据而无法处理时,其可以发出过载帧,延缓发送方的数据发送,以平衡总线负载,避免数据丢失。
8、帧间隔
- 将数据帧和遥控帧与前面的帧分离开。
9、位填充
- 第一列数据,正常连续数据正常后面补位填充位。
- 第二列数据,位填充数据与后续数组组成连续5个相同电平后,需要随后再补一个位填充电平。
- 第三列数据,数据若是有连续多个同样电平信号,例如10个,此时需要每五个补一个位填充。
- 位填充适用于数据包(数据帧和遥控帧)中,总线空闲长时间出现的隐性逻辑1不适用。CAN总线连续出现11个隐性逻辑1时,被认为是空闲状态。
10、波形实例
- 数据的开头显性逻辑0代表SOF起始帧,结尾处的七位连续隐性逻辑代表结束帧EOF。
- 报文ID是高位先行,是从高位到低位的,正常的读取即可,所以读取时需从左往右。
- 数据段是高位先行的,是高位到低位,正常的读取即可,读取时从左往右。
- 黄色部分是位填充,连续五个同样的电平后的一位数据就是位填充,读波形时需要忽略掉。如果连续超过五个的同样电平说明,发生了错误帧或过载帧。
①标准数据帧,报文ID为0x555,数据长度1字节,数据内容为0xAA。
②标准数据帧,报文ID为0x666,数据长度2字节,数据内容为0x12,0x34。
③扩展数据帧,报文ID为0x0789ABCD,数据长度1字节,数据内容为0x56。
④标准遥控帧,报文ID为0x088,数据长度1字节,无数据内容。
11、接收方数据采样
- CAN总线没有时钟线,总线上的所有设备通过约定波特率的方式确定每一个数据位的时长。
- 发送方以约定的位时长每隔固定时间输出一个数据位。
- 接收方以约定的位时长每隔固定时间采样总线的电平,输入一个数据位。
- 理想状态下,接收方能依次采样到发送方发出的每个数据位,且采样点位于数据位中心附近。
12、接收方采样数据遇到的问题
①接收方以约定的位时长进行采样,但是采样点没有对齐数据位中心附近。
②接收方刚开始采样正确,但是时钟有误差,随着误差积累,采样点逐渐偏离。
(12)位时序
- 为了灵活调整每个采样点的位置,使采样点对齐数据位中心附近,CAN总线对每一个数据位的时长进行了更细的划分,分为同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2),每个段又由若干个最小时间单位(Tq)构成。
13、硬同步
- 每个设备都有一个位时序计时周期,当某个设备(发送方)率先发送报文,其他所有设备(接收方)收到SOF的下降沿(显性逻辑0)时,接收方会将自己的位时序计时周期拨到SS段的位置,与发送方的位时序计时周期保持同步
- 硬同步只在帧的第一个下降沿(SOF下降沿)有效
经过硬同步后,若发送方和接收方的时钟没有误差,则后续所有数据位的采样点必然都会对齐数据位中心附近
14、再同步
若发送方或接收方的时钟有误差,随着误差积累,数据位边沿逐渐偏离SS段,则此时接收方根据再同步补偿宽度值(SJW)通过加长PBS1段(接收方时钟快,发送方时钟慢),或缩短PBS2段(接收方时钟慢,发送发时钟快),以调整同步。SJW=1~4Tq。
- 再同步可以发生在第一个下降沿之后的每个数据位跳变边沿。
15、波特率的计算
波特率:每秒传输多少个bit。
波特率 = 1 / 一个数据位的时长 = 1 / (TSS + TPTS + TPBS1 + TPBS2)
例如:
SS = 1Tq,PTS = 3Tq,PBS1 = 3Tq,PBS2 = 3Tq
Tq = 0.5us
波特率 = 1 / (0.5us + 1.5us + 1.5us + 1.5us) = 200kbps
16、多设备同时发送遇到的问题
CAN总线只有一对差分信号线,同一时间只能有一个设备操作总线发送数据,若多个设备同时有发送需求,该如何分配总线资源?
解决问题的思路:制定资源分配规则,依次满足多个设备的发送需求,确保同一时间只有一个设备操作总线。
17、资源分配规则
①先占先得。
若当前已经有设备正在操作总线发送数据帧/遥控帧,则其他任何设备不能再同时发送数据帧/遥控帧(可以发送错误帧/过载帧破坏当前数据)。
任何设备检测到连续11个隐性电平,即认为总线空闲,只有在总线空闲时,设备才能发送数据帧/遥控帧。
一旦有设备正在发送数据帧/遥控帧,总线就会变为活跃状态,必然不会出现连续11个隐性电平,其他设备自然也不会破坏当前发送。
若总线活跃状态其他设备有发送需求,则需要等待总线变为空闲,才能执行发送需求。
②非破坏性仲裁。
若多个设备的发送需求同时到来或因等待而同时到来,则CAN总线协议会根据ID号(仲裁段)(仲裁段的数据进行判断==报文ID+RTR)进行非破坏性仲裁,ID号小的(优先级高)取到总线控制权,ID号大的(优先级低)仲裁失利后将转入接收状态,等待下一次总线空闲时再尝试发送。
实现非破坏性仲裁需要两个要求:
线与特性:总线上任何一个设备发送显性电平0时,总线就会呈现显性电平0状态,只有当所有设备都发送隐性电平1时,总线才呈现隐性电平1状态,即:0 & X & X = 0,1 & 1 & 1 = 1。
回读机制:每个设备发出一个数据位后,都会读回总线当前的电平状态,以确认自己发出的电平是否被真实地发送出去了,根据线与特性,发出0读回必然是0,发出1读回不一定是1。
③非破坏性仲裁过程
数据位从前到后依次比较,出现差异且数据位为1的设备仲裁失利。标红方格之前单元1和单元2的数返回值均相同,但在标红方格处:单元1发出的是1却返回的是0,所以就代表此时总线仲裁将数据的发送权转交给了其他发送器。单元1需要继续等待。单元2,每次发送数据位时,返回的数据电平值都和发送的一致,说明此时并未失去发送数据权力,即继续下一位数据发送。
报文ID越小,所出现的电平1的频率越小,即优先级越高(返回值)。
④数据帧和遥控帧的优先级
数据帧和遥控帧ID号一样时,数据帧的优先级高于遥控帧。理由就在于发送完数据后,读取总线上电平的反馈值并进行比较,数据帧设置的电平状态是显性逻辑0,而遥控帧设置的电平值设置的电平状态是隐性逻辑1,返回值0的优先级高,即数据帧优先级高的原因。
⑤标准格式和扩展格式的优先级
标准格式11位ID号和扩展格式29位ID号的高11位一样时,标准格式的优先级高于扩展格式(SRR必须始终为1,以保证此要求)
如果此时是相同报文ID的标准遥控帧和扩展数据帧进行仲裁时,因为扩展数据帧的报文ID比较多,且两者前11+1位完全相同所以直到标准遥控帧结束仲裁段时都没有分出优先级,但是此时扩展数据帧的仲裁段并没有结束。第十三位,标准遥控帧的位是IDE数值为0表示标准格式。而扩展数据帧的第十三位是也是IDE数值为1表示扩展格式。直到此时才分出优先级,标准遥控帧胜出,取得仲裁权,继续发送数据。
18、错误处理
错误共有5种: 位错误、填充错误、CRC错误、格式错误、应答错误。
主动错误状态的设备正常参与通信并在检测到错误时发出主动错误帧。
被动错误状态的设备正常参与通信但检测到错误时只能发出被动错误帧。
总线关闭状态的设备不能参与通信。
每个设备内部管理一个TEC和REC,根据TEC和REC的值确定自己的状态。
19、错误波形演示
①设备处于主动错误状态,发送标准数据帧,正常传输。
ACK界定符+7位EOF结束帧+3位帧间隔==11位隐性逻辑1,表示总线处于空闲状态。
②设备处于主动错误状态,发送标准数据帧,检测到ACK错误。在ACK应答帧结束后发出连续6位的显性逻辑0,表示错误标志。
8位错误界定符+3位帧间隔==11位隐性逻辑1,表示总线处于空闲状态。
③设备处于被动错误状态,发送标准数据帧,检测到ACK错误。
注意:本文章内容均来源于网络,如有异议请联系本作者