做网站公司汉狮团队,网站里的活动专题栏怎么做,价格低廉换个说法,大连工业大学研究生CAN总线基础入门 一、CAN简介二、主流通信协议对比三、CAN物理层1、CAN硬件电路2、CAN电平标准3、CAN收发器 – TJA1050#xff08;高速CAN#xff09;4、CAN物理层特性 四、帧格式1、CAN总线帧格式2、数据帧#xff13;、数据帧各部分用途简介#xff14;、数据帧的发展历… CAN总线基础入门 一、CAN简介二、主流通信协议对比三、CAN物理层1、CAN硬件电路2、CAN电平标准3、CAN收发器 – TJA1050高速CAN4、CAN物理层特性 四、帧格式1、CAN总线帧格式2、数据帧、数据帧各部分用途简介、数据帧的发展历史、遥控帧、错误帧7、过载帧8、帧间隔9、位填充10、波形实例 五、位同步1、接收方数据采样2、接收方数据采样遇到的问题3、位时序4、硬同步硬件同步、再同步 六、仲裁1、多设备同时发送遇到的问题2、资源分配规则1 - 先占先得3、资源分配规则2 - 非破坏性仲裁4、非破坏性仲裁过程5、数据帧和遥控帧的优先级6、标准格式和扩展格式的优先级7、扩展数据帧和标准遥控帧的优先级 七、错误处理1、错误类型【回顾】 2、错误状态3、错误计数器4、波形示例基于ACK错误 一、CAN简介 \quad CAN总线Controller Area Network Bus控制器局域网总线 \quad CAN总线是由BOSCH公司开发的一种简洁易用、传输速度快、易扩展、可靠性高的串行通信总线广泛应用于汽车、嵌入式、工业控制等领域 CAN总线特征
两根通信线CAN_H、CAN_L线路少无需共地差分信号通信抗干扰能力强高速CANISO11898125k~1Mbps, 40m低速CANISO1151910k~125kbps, 1km异步无需时钟线通信速率由设备各自约定半双工可挂载多设备多设备同时发送数据时通过仲裁判断先后顺序11位/29位报文ID用于区分消息功能同时决定优先级可配置1~8字节的有效载荷可实现广播式和请求式两种传输方式应答、CRC校验、位填充、位同步、错误处理等特性
二、主流通信协议对比 UART IIC SPI
三、CAN物理层
1、CAN硬件电路 \quad 每个设备通过CAN收发器挂载在CAN总线网络上
CAN控制器引出的TX和RX与CAN收发器相连CAN收发器引出的CAN_H和CAN_L分别与总线的CAN_H和CAN_L相连高速CAN使用闭环网络CAN_H和CAN_L两端添加120Ω的终端电阻低速CAN使用开环网络CAN_H和CAN_L其中一端添加2.2kΩ的终端电阻 CAN收发器的作用实现电平转转换、输出驱动和输入采样 有四个引脚TX、RX、CAN_H、CAN_L 高速CAN有120Ω的终端电阻主要有2个作用 1、防止回波反射 2、在没有设备操作时将2根差分线的电压收紧也就是使其电压一致 2、CAN电平标准
CAN总线采用差分信号即两线电压差VCAN_H、VCAN_L传输数据位
高速CAN规定 电压差为0V时表示逻辑1隐性电平电压差为2V时表示逻辑0显性电平 低速CAN规定 电压差为-1.5V时表示逻辑1隐性电平电压差为3V时表示逻辑0显性电平
3、CAN收发器 – TJA1050高速CAN
芯片内部电路 芯片引脚 VCC5V TX、RX与设备的CAN控制器相连 Vref:参考电平输出 S:选择输入是高速模式或者静默模式 psVref和S可不接 4、CAN物理层特性 四、帧格式
1、CAN总线帧格式
CAN协议规定了以下5种类型的帧 错误帧和过载帧做异常处理 帧间隔等待几位的时间 2、数据帧 数据帧有标准格式和扩展格式两种CAN总线刚制定时只有标准格式扩展格式是后来新增的扩展格式增加了ID位数能承载更多种类的ID。 图例解释 标准格式分析 \quad 在发送数据帧之前总线必须处于空闲状态空闲状态时总线是隐性电平逻辑电平表示为高电平1
SOF帧起始 低电平显示电平0 作用打破总线空闲开始一帧数据并告诉接收方后续若发送隐性1即是发送过去的1。报文ID 1、表示后面数据的功能 2、区分优先级多个设备同时发送时根据仲裁规则ID小的报文优先发送ID大的报文等待下一次总线空闲再重试发送RTR远程请求标志位 用于区分数据帧或遥控帧数据帧为显性0遥控帧为隐性1 报文IDRTR位称为仲裁段 IDEID扩展标志位在没有扩展帧之前是r1保留位 用于区分标准格式还是扩展格式标准格式为显性扩展格式为隐性r0保留位(未用到)DLC数据段长度 发送1个字节0001 为显显显隐 发送8个字节1000 为隐显显显CRC校验算法 对数据位进行CRC算法计算 SOF–Data,得出的校验码赋给CRC校验位接收方接收到数据和校验码后也会调用CRC算法进行计算看看计算的校验码是否一致以判断传输是否有误CRC界定符1位必须是隐性电平ACK槽做应答 \quad 发送方发送完一帧数据后在应答这一位发送方释放总线总线回归默认状态隐性1如果接收方收到数据在ACK槽这一位把总线拉开使总线呈现显性的状态发送方释放总线后在ACK槽会读取总线状态如果发送方读取为显性0说明有接收方正确接收数据若为隐性1 说明发送失败发送方可以配置自动重发也可以什么都不做总之发送方知道发送状态就行。
ACK界定符 *ACK槽设计和ACK界定符CRC界定符的用途*总结发送方发隐性1若接收方存在则接收方要发显性0若不存在无显性0在ACK槽这一位前后操作总线权力有短暂交换前面所有波形只有发送方有权操做总线在ACK槽这一位时变为接收方操作总线为了给权力交接留出时间ACK槽前后留了两个界定符在CRC界定符时发送方必须发隐性1作用1是做分隔作用2是在ACK槽之前发送方必须释放总线发送隐性1为释放总线之后再ACK槽的时间点接收方会拉开总线 ACK槽接收后也需要释放总线所有再ACK界定符时接收方必须及时释放总线交出控制权。 注意事项 1、ACK槽时可以允许多个接受方共同拉开总线因为一个报文消息可以被多个设备同时接收所以多个设备可以同时被拉开可以多个设备同时操作总线输出显性0 2、不是发送方发一段完整波形在接收应答的而是发送方和接收方共同完成一整个波形发送方每发出一位接收方便立刻收到所以整个数据帧还没结束接收方就已经接收完成在ACK槽接收方和发送方短暂交接权力让接收方操作总线产生应答之后发送方的整个数据帧才结束应答是夹在发送过程中的 EOF帧结束 应答结束后发送方发7个隐性1 小结设计一个波形承载数据需要有数据段又需要数据段的字节是可调的就加了DLC用于指定数据段的长度为了区分这个数据的功能需要加上ID号为了实现广播式类似于只写或者是请求式类似于读取用RTR位进行区分为了判断书是否正确传输加上了CRC校验为了判断是否有接收方加了应答设计r0,r1留的保留位为了后续升级使用最后整个波形加上起始和结束就完成了 扩展格式 仲裁是先比较ID后比较RTR所以RTR必须在所有ID位的后面 出现的原因标准格式的ID不够用需要添加并且扩展格式必须要考虑于标准格式的兼容 11位ID与标准格式一致SRR替代RTR位空出来的在仲裁规则中为了保证标准格式的优先级要高于扩展格式虽然SRR位没用但必须给隐性电平IDE扩展格式标志位隐性1 当接收方收到一段波形就会从前往后开始判断收到IDE后若IDE位显性0则后续按照标准格式来解析若IDE为隐性1则后续按照扩展格式来解析在收到IDE之前接收方是不知道哪种格式的 在两个ID中夹了SRR和IDE是为了兼容标准格式ID升级完成后续时序不需要变与标准格式一致。
、数据帧各部分用途简介
SOFStart of Frame帧起始表示后面一段波形为传输的数据位 IDIdentify标识符区分功能同时决定优先级 RTRRemote Transmission Request 远程请求位区分数据帧和遥控帧 IDEIdentifier Extension扩展标志位区分标准格式和扩展格式 SRRSubstitute Remote Request替代RTR协议升级时留下的无意义位 这一位只有扩展格式有为了保证仲裁优先级规则这一位必须给隐性 r0/r1Reserve保留位为后续协议升级留下空间 DLCData Length Code数据长度指示数据段有几个字节 Data数据段的1~8个字节有效数据 CRCCyclic Redundancy Check循环冗余校验校验数据是否正确 ACKAcknowledgement应答位判断数据有没有被接收方接收 CRC/ACK界定符为应答位前后发送方和接收方释放总线留下时间 EOFEnd of Frame 帧结束表示数据位已经传输完毕
、数据帧的发展历史
CAN 1.2时期仅存在标准格式IDE位当时仍为保留位r1
CAN 2.0时期ID不够用出现了扩展格式增加了ID的位数为了区分标准格式与扩展格式协议将标准格式中的r1赋予了新功能—IDE 、遥控帧
遥控帧无数据段RTR为隐性电平1其他部分与数据帧相同
遥控帧的使用场景对于不是持续需要发送数据的情况 如果有设备需要数据时首先请求方会发出一个遥控帧广播遥控帧包含报文ID每个设备都能收到遥控帧如果某个设备有这个ID的数据它就会在通过数据帧广播出来接收方就能及时获取这个数据 。遥控帧的作用和请求流程 \quad 一次完整的请求需要遥控帧和数据帧的配合请求方发出遥控帧遥控帧的ID表示要请求的数据响应请求的一方通过相同ID的数据帧反馈数据当请求和反馈数据同时发生时数据帧拥有更高的优先级。 、错误帧 \quad 总线上所有设备都会监督总线的数据一旦发现“位错误”或“填充错误”或“CRC错误”或“格式错误”或“应答错误” 这些设备便会发出错误帧来破坏数据同时终止当前的发送设备错误帧可以叠加在数据帧上 \quad 设备默认处于主动错误状态处于主动错误状态的设备检测出错误时会连续发个显性位发显性位就是拉开总线总线只要有一个设备拉开了就必然处于显性状态即和相遇时总线总是处于状态这是“线与”特性破坏正常传输的数据其它设备检测到错误标志就会抛弃这个数据若主动错误产生太频繁说明此设备不太可靠设备就会进入被动错误状态处于被动错误的状态检测出错误时会连续发个隐性位发出隐性位就是不去碰总线就不会破坏总线别人发的数据但是会破坏自己发的数据自己的数据有问题自己破坏掉不会影响到别的设备发的数据。
错误帧定义
错误标志位错误界定符个隐性0-6位延长时间错误标志可能会延长0~6位的时间 一个设备发出的错误标志可能会引发其它设备连带产生错误标志多个设备的错误标志叠加起来这个标志位的长度可能就不止6位了 7、过载帧 \quad 当接收方收到大量数据而无法处理时其可以发出过载帧延缓发送方的数据发送以平衡总线负载避免数据丢失。
8、帧间隔
将数据帧和远程帧与前面的帧分离开
3位的帧间隔配合7位的EOF和8位的错误/过载界定符可以实现更复杂的优先级控制策略任何设备检测到连续11个隐性电平即认为总线空闲
9、位填充
数据帧和遥控帧在发送到总线之前要经过位填充的处理
位填充规则发送方每发送5个相同电平后自动追加一个相反电平的填充位接收方检测到填充位时会自动移除填充位恢复原始数据例如 即将发送 [100000110] [10000011110] [0111111111110] 实际发送 [1000001110] [1000001111100] [011111011111010] 实际接收 [1000001110] [1000001111100] [011111011111010] 移除填充后 [100000110] [10000011110] [0111111111110] 注意 位填充插入的数据位要和后续的数据位合并进行新的位填充判定 位填充是发送方的最后一步处理接收方的第一步处理 位填充作用防止数据波形长时间不变化 增加波形的定时信息利于接收方执行“再同步”防止波形长时间无变化导致接收方不能精确掌握数据采样时机将正常数据流与“错误帧”和“过载帧”区分开标志“错误帧”和“过载帧”的特异性保持CAN总线在发送正常数据流时的活跃状态防止被误认为总线空闲 CAN总线规定当总线出现连续11个隐性1后即认为总线空闲 10、波形实例
标准数据帧报文ID为0x555数据长度1字节数据内容为0xAA 标准数据帧报文ID为0x666数据长度2字节数据内容为0x12, 0x34 扩展数据帧报文ID为0x0789ABCD数据长度1字节数据内容为0x56 标准遥控帧报文ID为0x088数据长度1字节无数据内容
五、位同步
1、接收方数据采样 \quad CAN总线没有时钟线总线上的所有设备通过约定波特率的方式确定每一个数据位的时长
发送方以约定的位时长每隔固定时间输出一个数据位接收方以约定的位时长每隔固定时间采样总线的电平输入一个数据位理想状态下接收方能依次采样到发送方发出的每个数据位且采样点位于数据位中心附近
2、接收方数据采样遇到的问题
接收方以约定的位时长进行采样但是采样点没有对齐数据位中心硬同步解决
接收方刚开始采样正确但是时钟有误差随着误差积累采样点逐渐偏离再同步解决
3、位时序
为了灵活调整每个采样点的位置使采样点对齐数据位中心附近CAN总线对每一个数据位的时长进行了更细的划分分为同步段SS、传播时间段PTS、相位缓冲段1PBS1和相位缓冲段2PBS2每个段又由若干个最小时间单位Tq构成Tq时间单位可以在程序中指定,如1tq0.5us 定义位时序是为了便于确定采样点的位置 位时序是为了同步的 SS 1Tq PTS 1~8Tq PBS1 1~8Tq PBS2 2~8Tq 每段取值范围每一位为10tq 可以设定PTSPBS1PBS2为几个tq可以灵活指定采样点是靠前还是靠后在实际项目中 这3个段具体该选几个tq一般会有统一的规定 SS同步段同步过程
如果数据跳变边沿正好出现在SS段那就说明当前设备与波形达成同步如果数据跳变边沿不在SS段那就要调整当前设备的位时序使跳变边沿正好出现在同步段。当有一个波形的数据跳变沿正好在同步段自己定义的位时序就是一位的时间下次数据如果再跳变起始波形肯定会在下一个位时序的同步段如果每次波形跳变沿都在同步段那就说明当前设备的位时序与波形是同步的即我在当前设备定义的一位时间正好与波形一位的时间重合当前设备如果是接收方那它直接在这PBS1和PBS2之间进行采样这个采样点必然是自己想要采样的地方。如果跳变沿出现在SS段之外的地方需要用到硬同步和再同步来调整当前设备的位时序使得跳变沿再次出现在SS段。
PTS传播时间段
PTS用于吸收网络上的物理延迟发送单元的输出延迟总线上信号的传播延迟、接收单元的输入延迟PTS的时间为以上各延迟时间的和的两倍控制器要发信号由于硬件电路的限制这个信号输出到总线总会有一点延迟同理数据输入和数据在总线上传输都会有一点延迟此延迟信号很小但在信号发生变化后最好稍微延迟一点这就是PTS段的作用。 网络的物理延迟指发送单元的输出延迟总线上信号的传播延迟、接收单元的输入延迟 PBS1和PBS2相位缓冲段
作用确定采样点的位置采样点会在PBS1和PBS2中间如果PBS1时间设置长点PBS2时间设置短点此时采样点靠后相反则采样点靠前通过调节PBS1和PBS2段的时长就可以灵活调节采样点的位置。
4、硬同步硬件同步 解决的问题使接收方的第一个采样点与波形的第一位对齐用于一帧波形初始的位置对齐 每个设备都有一个位时序计时周期当某个设备发送方率先发送报文其他所有设备接收方收到SOF的下降沿时接收方会将自己的位时序计时周期拨到SS段的位置与发送方位的时序计时周期保持同步硬同步只在帧的第一个下降沿 SOF下降沿有效经过硬同步后若发送方和接收方的时钟没有误差则后续所有数据位的采样点必然都会对齐数据位中心附近。
接收方内部位时序周期 红线总线上的波形 \quad 当红线由逻辑高电平跳变到逻辑低电平时此时的下降沿是发送方产生SOF的第一个下降沿下降沿时刻肯定是发送方的SS段此时接收方的SS段与波形的下降沿对齐下部分图接收方的SS段与波形的下降沿重合所有接收方均是就可以保证每个设备的位时序周期同步。 如何保证设备的秒表都同步转动 所有设备接收方收到SOF的下降沿时接收方会将自己的位时序计时周期拨到SS段的位置与发送方位的时序计时周期保持同步 例子 \quad 把位时序周期想象成一个秒表每个设备内部都有一个秒表顺时针转动每转一圈就是一个数据位的时间秒表的最佳状态所有设备的秒表都时刻处于同一位置保持同步。 \quad 假设现在所有设备的秒表都是同步转动有一个设备想作为发送方开始一段波形那么发送方会在自己的秒表转到SS段时开始一个新数据位即发送方的每次数据跳变都会等自己的秒表转到SS段时产生接收方内部也有一个秒表并且它的秒表和发送方同步转动所以接收方的秒表每次转到SS段接收方就知道一个新的数据位开始了之后接收方直接在PBS1和PBS2之间进行数据采样即采样点位置是对的。因此只要所有设备内部都有一个秒表并且秒表保持同步转动发送方在自己秒表的SS段跳变数据开始新的1位接收方在自己秒表转到PBS1和PBS2之间时采样数据这样就能保证接收方每次都采样到数据位的中间附近。 、再同步
作用补偿误差
若发送方或接收方的时钟有误差随着误差积累数据位边沿逐渐偏离SS段则此时接收方根据再同步补偿宽度值SJW 通过加长 PBS1 段或缩短PBS2 段以调整同步再同步可以发生在第一个下降沿之后的每个数据位跳变边沿 蓝线表示总线上发送方发出的波形 \quad 当前数据跳变沿出现在SS段之后接收方执行再同步在接收方的PBS1段之后额外加上SJM指定的补偿宽度红色部分在PBS1段延长2Tq下一数据位发送过来时接收方的SS段就会往后移2Tq新的波形跳变沿就会往SS段的方向调整这是是接收方时钟快于发送方。图示上半部分 \quad 接收方时钟快于发送方接收方秒表慢与发送方波形的数据跳变沿提前出现在SS段之前此时接收方把PBS段减少SJW指定的宽度。
总结以普通的数据跳变沿为参考如果接收方时钟快了加长对应的时间图示上半部分如果接收方时钟慢了就减少对应的时间图示下半部分
6、波特率计算 波特率数据位的传输速率 单位bps每秒传输多少个bit 波特率 1 / 一个数据位的时长 1 / (TSS TPTS TPBS1 TPBS2) 例如 SS 1TqPTS 3TqPBS1 3TqPBS2 3Tq Tq 0.5us 波特率 1 / (0.5us 1.5us 1.5us 1.5us) 200kbps 六、仲裁
1、多设备同时发送遇到的问题
CAN总线只有一对差分信号线同一时间只能有一个设备操作总线发送数据若多个设备同时有发送需求该如何分配总线资源
解决问题的思路制定资源分配规则依次满足多个设备的发送需求确保同一时间只有一个设备操作总线 问题 第一种情况在A设备发送中途B设备要开始新的发送–可以使用先占先得 \quad 假设设备A发出上方波形设备B发出下方波形在A设备发送中途B设备要开始新的发送若不做处理总线上实际的波形是二者波形进行“线与”的叠加即只要有一个设备拉开总线总线就呈现显性0状态只有所有的设备都释放总线总线才呈现隐性1状态那按照“线与”特性叠加后显然两个波形都必然产生数据损坏二者的数据都无法发出去所以CAN总线的设计必须要考虑多设备同时发送遇到的资源冲突问题。 第二种情况AB设备同时开始一段波形— 可以使用非破坏性仲裁
2、资源分配规则1 - 先占先得
若当前已经有设备正在操作总线发送数据帧/遥控帧则其他任何设备不能再同时发送数据帧/遥控帧可以发送错误帧/过载帧破坏当前数据
任何设备检测到连续11个隐性电平即认为总线空闲只有在总线空闲时设备才能发送数据帧/遥控帧一旦有设备正在发送数据帧/遥控帧总线就会变为活跃状态必然不会出现连续11个隐性电平其他设备自然也不会破坏当前发送若总线活跃状态其他设备有发送需求则需要等待总线变为空闲才能执行发送需求 11个隐性电平1个ACK界定符7个EOF3个帧间隔 3、资源分配规则2 - 非破坏性仲裁
若多个设备的发送需求同时到来或因等待而同时到来则CAN总线协议会根据ID号仲裁段进行非破坏性仲裁ID号小的优先级高取到总线控制权ID号大的优先级低仲裁失利后将转入接收状态等待下一次总线空闲时再尝试发送
实现非破坏性仲裁需要两个要求 线与特性总线上任何一个设备发送显性电平0时总线就会呈现显性电平0状态只有当所有设备都发送隐性电平1时总线才呈现隐性电平1状态即0 X X 01 1 1 1回读机制每个设备发出一个数据位后都会读回总线当前的电平状态以确认自己发出的电平是否被真实的发送出去了根据线与特性发出0读回必然是0发出1读回不一定是1
4、非破坏性仲裁过程
数据位从前到后依次比较出现差异且数据位为1的设备仲裁失利 几个设备同时发送时的仲裁过程 \quad 当两个设备同时发送波形时如下图单元1和单元2能进行仲裁的数据位包括帧起始位仲裁段IDRTR在ID段两个设备同时发送波形并进行回读发一位回读一位当单元1发送波形到红色部分时单元1发送1隐性电平单元2发送0显性电平根据“线与”特性单元1回读为0单元2回读为0从数据正确性看由于单元1回读的是0与原本发的1不同所以单元1的数据被破坏了无法继续发从设备感知看发出的是1回读却是0单元1 感知到有别的设备存在所以退出而单元2的数据每次发和回读的数据都是一样的感知不到有别的设备存在所以继续。综合以上两个原因单元1应该退出让出总线控制权。再此之后单元2继续发送它的电平依旧是发一位回读一位只有发出的数据和读回的数据一样才会继续发送。在仲裁段一旦出现发出的数据和读回的不一样那就是仲裁失利自己得主动退出。 \quad 总结当多个设备同时发送波形时每个设备仍然执行“发一位回读一位”的流程一旦回读的和自己发的不一样自己就退出又因为每个设备发出消息的仲裁段都必然不同所以在仲裁段数据位从前往后的比较中必然会陆续有设备主动退出并且在仲裁段结束时必然有且只有一个设操作总线之后再执行后续数据位的发送就不会再出现多设备冲突的问题。
为什么ID号小的优先级越高 \quad ID号越小说明在二进制中显性0就越多所以就越有希望占有总线的控制权 位填充会不会影响仲裁? \quad 位填充的作用范围是帧起始、仲裁场、控制场、数据场以及CRC序列所以在仲裁场里会执行位填充在位填充时加入一些相反位会不会号致仲裁优先级的变化如11位ID中全部为0在ID号中根据位填充规则每隔5位就会插入一个1实际的11位ID就会变成00000 1 00000 1 0 11位ID会插入两个填充位ID就变成13位不会导致仲裁出错或者ID号的优先级变化原因是填充位不会改变ID号的优先级。 为什么称为非破坏性仲裁 \quad 从仲裁后优先级最高的那个ID中它仲裁段所有的位发出和回读的都一样 中间不会受到其它发送方的影响它的发送过程也没有因为仲裁而受到任何影响所以这个过程是非破坏性的。
5、数据帧和遥控帧的优先级
数据帧和遥控帧ID号一样时数据帧的优先级高于遥控帧 \quad 如下图相同ID号的数据帧和遥控帧是有可能进行仲裁的单元1A设备发出1个遥控帧表示想要请求一个ID号的数据帧而这时单元2B设备正好也要发出这个ID号的数据帧那么就会出现相同ID的数据帧和遥控帧仲裁的情况相同ID号的数据帧和数据帧是不允许同时出现的相同ID号的遥控帧和遥控帧也是不允许同时出现的如果是这样它们之间的仲裁段完全一样就无法判断优先级了。 \quad 第一行是单元1发出的遥控帧表示想要请求这个ID的数据单元1正好也在发送相同ID的数据帧两者进行仲裁单元1和单元2都执行“发出一位回读一位”的仲裁流程因为ID号完全一致所以当11位ID发出后单元1和单元2每次回读总线的数据都是和自己发出的数据是相同的所以11位ID不能区分数据帧和遥控帧的优先级此时就需要靠仲裁段的最后一位RTR来进行决断RTR位遥控帧定义为1数据帧定义为0所以在这一位时 单元1发出数据1单元2发出数据0总线呈现数据0状态之后单元1回读总线值读出的是所以单元仲裁失利之后单元1转入接收不再操作总线单元2继续操作总线发完剩下的所有位。因为RTR定义是1为遥控0为数据帧。所以就有ID号相同时数据帧优先级高于遥控帧的设定。
6、标准格式和扩展格式的优先级
标准格式11位ID号和扩展格式29位ID号的高11位一样时、标准格式的优先级高于扩展格式(SRR必须始终为1以保证此要求) \quad 单元1扩展数据帧和和单元2标准数据帧的11位ID号完全一致若不一致在11位ID前就可以仲裁出结果单元1在发完11位ID后是SRR位在扩展数据帧中SRR位必须始终为1所以单元1此时打出数据1单元2此时发出RTR位因为单元2是数据帧RTR位是0 所以单元2发出数据0所以总线呈现0状态单元1出现“发1读0”的现象所以单元1仲裁失利转入接收状态单元2继续发送后续数据因此当标准数据帧和护展数据帧相遇并且前11位ID号都一样时标准数据帧的优先级高于扩展数据帧。
7、扩展数据帧和标准遥控帧的优先级 \quad 扩展数据帧和标准遥控帧的前11位ID一样时标准遥控帧的RTR位是1扩展数据帧SRR位也是1在这个位置扩展数据帧和标准遥控帧仍然无法决出谁的优先级更高此时标准遥控帧的仲裁段已经结束了也就是标准遥控帧直到仲裁段结束都无法和扩展数据帧决出谁的优先级更高这样会不会导致错误呢答案是不会的。 \quad 因为标准遥控帧仲裁段虽然结束了但是扩展数据帧仲裁段仍然没有结束标准遥控帧RTR之后跟的是IDE扩展标志位因为它是标准遥控帧所以IDE为0而扩展数据帧SRR之后也是IDE位因为它是扩展帧所以IDE为1在这一位虽然标准遥控帧已经不再执行仲裁了但是扩展数据帧仍然执行仲裁并且扩展数据帧会出现“发1读0”的情况所以扩展数据帧仲裁失利转入接收状态。两者比较直到标准遥控帧仲裁段结束到下一位IDE才能比出优先级若非如此后续很有可能产生错误。
七、错误处理
错误处理是CAN总线额外的安全保障机制当某个设备检测到总线的帧传输出错时主动发出错误帧通知总线上的设备这个帧是错的 收到帧的设备就会去掉这个错误帧以免收到影响。
1、错误类型
错误共有5种 位错误、填充错误、CRC错误、格式错误、应答错误 \quad 发出错误帧的行为叫做错误通知。不管其他设备有没有检测到这个错误当其中一个设备检测到了错误其会破坏这帧数据其他接收设备都不能接收错误帧一旦产生这帧数据将无效数据传输也会终止等错误帧结束后总线回归空闲后续才可以正常发数据。
【回顾】 \quad 错误帧的两种形式由6位的错误标志和8位的错误界定符组成错误标志分为主动错误标志和被动错误标志两种主动错误标志是6个显性0被动错误标志是6个隐性1根据“线与”特性主动错误的6个显性0会破坏总线上的数据无论其它设备如何发数据只要它不释放总线其它设备发来的数据就会被破坏而被动错误的6个隐性1并不会影响当前总线上已有的波形如果别设备正在发出波形自己发的是被动错误标志那别设备发来的波形不会受到影响
过载帧只有一种形式就是6个显性位 帧间隔 \quad 在连续发出的数据帧或遥控帧之间会保留3位的帧间隔帧间隔也分主动错误状态和被动错误状态主动错误状态的帧间隔是3个隐性位上方图示被动错误状态在3个隐性位的帧间隔后还要加8个隐性位的延迟传送(下方图示) \quad 错误通知赋予了每个设备破坏传输的能力有一定的风险当某个设备有问题时接收到的数据都认为是错误帧便会不断破坏数据干扰正常的数据传输所以要加上一些限制措施这个限制措施就是错误状态。
2、错误状态
主动错误状态的设备正常参与通信并在检测到错误时发出主动错误帧会破坏其它设备发出的数据被动错误状态的设备正常参与通信但检测到错误时只能发出被动错误帧不会破坏其它设备发出的数据总线关闭状态的设备不能参与通信每个设备内部管理一个TEC和REC根据TEC和REC的值确定自己的状态 TEC:(Transmit Error Counter:发送错误计数器): 设备在发送时每发现一个错误TEC加1同时每进行一次正常的发送TEC减1 REC(Receive Error Counter)是接收错误计数器 设备在接收时每发现一个错误REC加1同时每进行一次正常的接收TEC减1 即TEC和REC的值反映了当前设备检测错误的相对频率 主动错误状态----被动错误状态----总线关闭状态 eg:若某个设备因为REC而转到被动错误状态该设备只要进行一次正确接收就会转为主动错误状态 3、错误计数器 4、波形示例基于ACK错误
设备处于主动错误状态发送标准数据帧正常传输 设备处于主动错误状态发送标准数据帧检测到ACK错误主动错误状态 设备处于被动错误状态发送标准数据帧检测到ACK错误被动错误状态