• 261查看
  • 0回复

[系统功能] TLE9471 CANFD报文异常唤醒ECU问题

[复制链接]


该用户从未签到

发表于 19-5-2024 17:16:11 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师




    前言

    问题描述

    原因分析


      唤醒帧Wake-up Frame (WUF)的定义

      CAN Protocol Error Counter

      CAN Flexible Data Rate (CAN FD) Tolerant Mode

    解决方式

    总结

前言

之前做的项目是基于CAN通讯的,在切换到CANFD后,网络管理报文还是通过CAN报文发送。本文分析处理项目中出现异常唤醒ECU的问题。
问题描述

程序配置了CAN选择性唤醒,且配置了指定的报文区间,及DATA数据,正常情况下,只有指定的报文区间的CAN报文可以唤醒ECU,但实际测试表现,任意CAN FD报文都可以唤醒ECU
原因分析

需要查看Datasheet。
唤醒帧Wake-up Frame (WUF)的定义

唤醒帧在ISO 11898-2:2016中定义。
只有符合ISO11989-1的CAN帧被认为是可能的唤醒帧。
如果启用了选择性唤醒功能并且收到了“有效WUF”,则应执行总线唤醒。收发器可以忽略多达四个连续的CAN数据帧,这些数据帧在开启偏置后开始。
如果满足以下所有条件,则接收帧为“有效WUF”:
•接收到的帧ID与相关位上的配置ID完全匹配。相关的位位置由一个ID掩码给出。ID和ID掩码可以是11位或29位。
•接收帧的DLC与配置的DLC完全匹配。
•当DLC大于0时,接收帧的data字段至少有一个bit设置在bit位置上,其中也在配置的数据掩码中相应bit位置上设置了该位。
•根据ISO 11898-1,除了ACK字段和EOF字段中的信号错误外,不存在任何错误。
也就是说,只有CAN帧可以作为有效的唤醒帧。CAN FD帧应该是触发了错误,导致异常唤醒
正常休眠唤醒流程如下:
TLE9471 CANFD报文异常唤醒ECU问题w1.jpg

CAN Protocol Error Counter

当检测到符合ISO11898-1的位填充、CRC或格式错误时,计数器递增。如果接收到的帧在CRC字段结束前是有效的,并且计数器不为零,则计数器递减。
如果计数器的值达到31,则对该计数器的下一个增量执行以下操作:
•选择性唤醒功能被禁用,
•CAN收发器被唤醒
•设置SYSERR,可以读取错误计数器值= 32。
启用错误计数器:
•当CAN处于正常模式、仅接收模式或WUF检测状态时
在以下情况下,清除错误计数器:
•在从WUF检测过渡到WUP检测1时(在tSILENCE过期后,而SWK正确启用)
•当进入WUF检测状态时(在启用SWK时,计数从0开始)
•在CAN重新进入工作状态(当退出唤醒状态)
•当CAN模式位选择' 000 ',' 100 ' (CAN关闭)或' 001 '(唤醒能力,没有SWK功能启用)
当CAN_FD_EN = ' 1 '和DIS_ERR_CNT = ' 1 '时(当这两个位在SPI寄存器中设置时,计数器被清除并保持清除)
错误计数器被冻结:
•醒来后处于唤醒状态
计数器值可以从位ECNT中读出。
很明显,异常唤醒应该就是这个Counter计数值到达31了,CANFD报文应该是触发了格式错误。此处也已经给出了解决方案,就是配置CAN_FD_EN = ' 1 '和DIS_ERR_CNT = ' 1 '
CAN Flexible Data Rate (CAN FD) Tolerant Mode

可以通过在寄存器SWK_CAN_FD_CTRL中设置位CAN_FD_ EN = ' 1 '来激活CAN FD容忍模式。
在这种模式下,内部CAN帧解码停止为CAN FD帧格式:
•忽略CAN FD帧的高波特率部分,
•没有错误处理(位填充,CRC检查,表单错误)是适用于剩余的CAN帧字段(数字段,CRC字段,…),
•在CAN FD帧上不做唤醒。
当检测到CAN FD帧的帧结束(EOF)时,内部CAN帧解码器准备好接收新的CAN帧。CAN FD帧的识别基于EDL位,EDL位在CAN FD帧的Control Field中发送:
•EDL Bit = 1将当前帧标识为CAN FD帧并停止进一步解码。
•EDL Bit = 0标识当前帧为CAN 2.0帧,并继续处理该帧

TLE9471 CANFD报文异常唤醒ECU问题w2.jpg
EDL和FDF是同一位
通过这种方式,可以发送混合CAN帧格式,而不会通过错误计数器递增和随后的误导性唤醒影响选择性唤醒功能。除了CAN_FD_ EN位之外,还必须为CAN FD容忍模式提供一个滤波器设置。该滤波器设置定义了CAN FD主导位的最小主导时间,该主导位被认为是来自CAN FD帧解码器的主导位。该值必须与CAN网络中数据字段所选择的高波特率保持一致
也就是说还要配置滤波器设置
为了支持在CAN FD模式下通过CAN编程,可以使用专用SPI位DIS_ERR_ CNT来避免实现的错误计数器溢出(参见第5.6.2.4章)。
错误计数器的行为取决于位DIS_ERR_ CNT和CAN_FD_ EN的设置,如下表所示:

TLE9471 CANFD报文异常唤醒ECU问题w3.jpg
image解决方式

需要配置DIS_ERR_ CNT和CAN_FD_ EN都为1
总结

修改之后,测试CANFD报文不会唤醒ECU。

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 1-2-2025 07:44 , Processed in 0.221546 second(s), 31 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.