当考虑位填充时,通过示波器测量数据和ID全位0和全位1的数据帧占用总线时间 。
当ID和Data全为1时,波特率位500K,报文占用总线时间为254us 。
当ID和Data全为0时,波特率位500K,报文占用总线时间为252us 。
通过以上测试,可以看出当我们需要以最快速度在CAN总线上传输报文时,最快速度大概是250us每帧报文,也就说最快1s能够传输不到4000条报文 。
远程帧格式
包含帧起始、仲裁段、控制段、CRC段、ACK段、帧结束 。与数据帧相比,RTR位为1,且缺少数据段 。
文章插图
图4
错误帧格式
错误帧由两部分组成:错误标志,错误界定符 。错误标志长度为6个位,由于总线网络中有多个节点,每个检测到错误的节点都会发送错误帧,考虑到错误叠加,错误标志长度位6-12位 。根据错误节点所处的状态不同,错误标志也是不一样的 。当节点处于主动错误时,发送的错误标志为显性,当节点处于被动错误时,发送的错误标识为隐性 。错误界定符由8个隐性位组成 。
注:当某个节点因为本身原因,持续检测到错误,为了防止该节点一直发送错误帧而对其他正常工作的节点正常工作产生影响,所以该节点进入被动错误后,节点发送的错误帧为隐性,这样就不会影响其他节点正常工作 。
文章插图
图5
过载帧格式
过载帧由两部分组成:过载标志和过载界定符 。
以下3中情况,都会引发过载帧的发送 。
1、 CAN控制器要求延迟下一个数据帧或远程帧的发送 。
2、 在帧间隔段的第1和第2位检测到显性(数据帧或者远程帧的发送需要等到3位长度的帧间隔发送完后才可以尝试发送);
3、 如果一个CAN节点在出错界定符或者过载界定符的第8位(最后1位)采样到1个显性位,节点就会发送一个过载帧(而非错误帧),此时错误计数器不会增加(数据帧或者远程帧的发送需要等错误界定符或者过载界定符发送完毕后,再等3个位长都的帧间隔才能发送数据) 。
注:由上述1-3可以看出,为了阻止后续数据帧、远程帧的发送可以插入过载帧 。
过载标志由6个显性位组成 。过载标志和主动错误标志一样 。过载标志的形式破坏了帧间隔,因此,所有其他节点检测到上述过载条件将发出过载标志 。如果在帧间隔段的第3位检测到一个显性位,则该位将解释为帧起始 。
过载界定符由8位隐性位组成 。过载界定符的形式和错误界定符的形式一样 。在过载标志位被发送后,节点一直检测总线,直到检测到一个从显性到隐性位的跳变 。此时,总线上的每个节点都完成了过载标志的发送,并开始同时发送剩余的隐性位 。
文章插图
图6
帧间隔的格式
数据帧和远程帧通过帧间隔与总线上的其他帧(数据帧、远程帧、错误帧和过载帧)分隔开 。过载帧和错误帧与他们之前的帧之间没有帧间隔,多个超载帧之间也没有帧间隔 。
帧间隔包含间隔和总线空闲 。对于处于被动错误状态的节点来说,其间隔帧除了包含间歇、总线空闲外,还包含延时发送 。间歇包含3个隐性位 。间歇期间,所有节点均不允许发送数据帧和远程帧,其唯一的作用是标示一个过载条件(第三位除外) 。
总线空间的时长可以是任意长度 。在此期间,总线被认为是空闲的,任何需要发送报文的节点在此期间都可以发送报文 。一条因为其他报文正在发送而被挂起的报文,将在其延时结束后的第1位(如果此时总线还是空闲的情况下)开始发送,此时检测到总线的一个显性位将认为一个帧起始
延时传送是指节点发送一个报文后,在开始发送下一报文或者认可总线处于空闲前,在间隔后发出8个隐性位 。如果在此期间由其他节点开始发送报文 。延时传送降低了被动错误节点向总线发送报文的优先级,这样做是为了降低被动错误状态节点因自生故障干扰总线的可能性 。
文章插图
图7
数据发送优先级
在总线空闲时,最先开始发送的节点获得发送权 。
当多个节点同时开始发送时,各发送节点从仲裁段的第一位开始进行仲裁 。连续输出显性电平最多的单元可继续发送 。仲裁过程如下图所示,节点1仲裁失败 。
推荐阅读
- 从TCP协议的原理来谈谈rst复位攻击
- 单点登录协议有哪些?CAS、OAuth、OIDC等有何异同?
- 详解三种不同的身份验证协议
- 大学|国内3所“神秘”的大学,入学要签保密协议,毕业后就从事铁饭碗
- 安全工具OWASP、Burp Suite、Appscan对比
- 为什么 TCP 协议有粘包问题
- 从一个HTTP请求来读懂HTTP、TCP协议
- ICMP协议及应用
- 比亚迪|比亚迪汉EV巴西上市:价格堪比宝马X5!老外:能打保时捷Taycan
- TCP/IP协议 网络层