跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YT SDK
  4. FlexCAN EnhanceRxFifo应用偶发发送邮箱停发

FlexCAN EnhanceRxFifo应用偶发发送邮箱停发

已定时 已固定 已锁定 已移动 YT SDK
1 帖子 1 发布者 121 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • runR 离线
    runR 离线
    run YunTu
    写于 最后由 yt0069 编辑
    #1

    问题描述

    FlexCAN使用了EnhanceRxFifo来接收报文,偶发一个或多个发送邮箱停发。
    检查停发的邮箱中CODE[0]位,发现是1。
    0c142e0a-e276-45e3-96b6-586a5a71376c-image.png

    存在问题的SDK版本

    • YTM32B1MD1 1_3_1_HF001 以及 之前的版本
    • YTM32B1ME0 1_3_1_HF001 以及 之前的版本
    • YTM32B1HA0 1_3_1 以及 之前的版本

    问题分析

    • Mailbox的CODE[0] 为BUSY标志,当报文处于move-in的过程中时,其BUSY标志会置1。(EnhanceRxFifo在move-in的过程中其内部逻辑判断也会影响到相应的邮箱。)
      310d2207-fa47-437e-96e0-8be54abe4b9d-image.png

    • 对于发送邮箱来说,其CODE[0] 的值应忽略。

    e775155f-4263-4b5d-a1d5-1dc485afcf4c-image.png

    而在SDK的flexcan_hw_access.c文件,FLEXCAN_SetTxMsgBuff() 和 FLEXCAN_SetRxMsgBuff()函数中:
    “*flexcan_mb |= flexcan_mb_config;”该操作会先读再改再赋值进邮箱,期间如果刚好碰上CODE[0]位瞬间置1,则赋值进去的值会带上该1,这样就会设置错CODE值,导致后面该邮箱一直无法发送。

    解决方法

    经IP深入调查:
    对应的CODE[0]实际内存中的数据并没有被修改为1。只是在该期间读取CS状态时,CODE[0]返回了1的信号。
    因此对于CODE直接赋值的操作是没有影响的。

    将FLEXCAN_SetTxMsgBuff()函数中对邮箱的”|=“ 操作改为直接赋值操作“*flexcan_mb = flexcan_mb_config;”
    FLEXCAN_SetRxMsgBuff()也需要仿照FLEXCAN_SetTxMsgBuff()进行修改。

    更新方法:
    下面附件中为flexcan_hw_access.c修改后的参考代码,直接替换老版本flexcan_hw_access.c文件为附件中的新版本即可:
    flexcan_hw_access.zip

    1 条回复 最后回复
    0

  • 云途论坛规则/Yuntu Forum Rules

    发帖前请查看

  • YCT离线License申请流程

    帮助没办法联网的电脑使用YCT

  • YT CONFIG TOOL调查问卷

    帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...

  • can
    16
    demo
    15
    uds
    7
    lin stack
    6
    fbl
    5
    yt-link
    5
    md14
    4
    adc模块
    3
    Online Users
    • 登录

    • 登录或注册以进行搜索。
    • 第一个帖子
      最后一个帖子
    0
    • 版块
    • 最新
    • 标签
    • 热门