学习笔记系列之CAN FD总线。 之前一篇笔记记录了CAN总线基础:https://blog.shuspieler.com/3649/ , 在这继续记录CAN FD的知识。 如果用一句话总结CAN FD和CAN的区别的话,就是为了加大数据吞吐率,在Payload使用了不同的传输频率,头部尾部保持不变,从而在相同的时间长度,传输了更多的数据,就像下图所示。 CAN FD协议需要新的控制器,而新的控制器是兼容老的CAN协议的,也就是说CAN FD控制器可以向下兼容与CAN控制器通信。有时候车身CAN控制器可以混杂部署,比如通过将一部分CAN控制器设置成休眠模式,就可以在CAN FD控制器之间进行高速传输,比如刷新ECU的时候。通常通过CAN需要传输几小时,通过CAN FD就可以大大减少这个时间。 下边是CAN FD和CAN 帧的对比图: 首先是CAN FD没有remote frame这个帧了。也不难想到,首先是这个用的确实不多,其次remote frame没有Data Field,而CAN FD 和CAN区别就在这里,所以remote frame就失去了其意义。在数据帧中,RTR也被换成RRS(Remote Request Substitution),并且保持显性电位。在帧头的SOF,IDE,以及帧尾的ACK,DEL,EOF以及ITM(Intermission Field)都与CAN总线一致。 CAN FD和CAN的帧主要区别位于IDE和ACK之间。如下图所示,两者的区分是那个r保留位,当r是显性电平逻辑0时候,代表这是一个传统的CAN帧,当r是隐性电平逻辑1时候,说明这是一个CAN FD帧,同时这个保留位r有了一个名字FDF: Flexible Data Rate Format。 CAN FD控制器可以发送和接收传统CAN帧以及CAN FD帧,传统CAN控制器在接收CAN FD帧由于显性电平r是不符合规则从而会报错,然后将通过错误帧应答,也就是说,传统CAN并不能解析CAN FD数据,按照错误帧处理。 CAN FD中有一个新的帧叫做BRS(Bit Rate Switch),当这一位是显性时,中间部分数据传输速率baud rate 2 和帧头帧尾传输速率baud rate 1 是相同的,这种情况下CAN FD并不能起到加速速率传输的效果。当这一位是隐性时候,中间部分数据传输速率变为 5Mbit/s,这是一个在实验室大量验证证实在绝大多数车身网络这是比较可靠的值。BRS的值决定了中间部分从BRS起到ACK之前的速率。 ESI全称Error State Indicator,这一位是显性代表这个节点是Error Active状态,如果这一位是隐性,代表这个节点是Error