电子说
都说CANFD是兼容CAN的,实际上这句话有个大前提,那就是CAN控制器是完全遵循ISO11898-1规范的。为什么这么说,接下来听君娓娓道来…
我们先看下CAN的帧结构:
CAN帧结构
从上图可以看出,标准帧中有个r0位,这个位实际上是个保留位,ISO11898-1中规定:发送方发送r0位固定为显性,接收方则不对该位显隐性做判断。同样,扩展帧除r0位还有个r1位,也是保留位,其规定与r0位一致。由于ISO11898-1对保留位的规定,导致部分老旧的CAN控制器在发送保留位时,未遵循ISO规范要求,将r0或r1位发送为隐性,而不是显性,接收方也能正常接收CAN报文。那么CAN控制器发送标准帧r0或扩展帧r1为隐性,在CANFD中会导致什么问题呢?这个就要从CANFD帧结构说起了。
CANFD帧结构
如上图所示中箭头方向,在CANFD帧中,原来的CAN标准帧中的r0为此时变为了EDL位(CANFD位),CAN扩展帧中的r1位也同样变为EDL位。EDL位规定,EDL为隐性时为CANFD帧,显性为CAN帧。
CAN标准帧r0位和扩展帧r1位发送隐性位带来的问题那么问题就来了,那些未完全符合ISO11898-1规范的CAN控制器,他们发送CAN帧时R0位为隐性,此时若总线上存在CANFD节点时,就会被CANFD控制器识别为CANFD帧,但是实际上他发送又是CAN帧,这种情况下就导致CANFD控制器接收异常而发送错误帧。这种情况下,对于不完全遵循ISO11898-1规范的CAN控制器来说,CANFD就不兼容CAN了。
最后,我们再通过上面这张图总结下:未符合ISO11898-1规范的CAN控制器,因其发送报文时,标准帧r0位或扩展帧r1位为隐性,在CANFD网络中,会被CANFD控制器的接收方判别为CANFD帧,从而导致总线错误。
解决方法
若总线存在此CAN控制器时,我们可以将CANFD控制器设置为CAN控制器以兼容该CAN节点。
若使用USBCANFD-200U系列CANFD卡,遇到不规范的CAN控制器时,我们可以通过ZCANPRO设置控制器类型为CAN,就可以解决这个问题。
原文标题:【Z站推荐】CANFD真的完全兼容CAN?
文章出处:【微信公众号:ZLG致远电子】欢迎添加关注!文章转载请注明出处。
全部0条评论
快来发表一下你的评论吧 !