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

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1M系列
  4. FLEXCAN收发报文ID数超出物理邮箱数量时邮箱分配参考方案(Classical CAN & LeacyFIFO)

FLEXCAN收发报文ID数超出物理邮箱数量时邮箱分配参考方案(Classical CAN & LeacyFIFO)

已定时 已固定 已锁定 已移动 YTM32B1M系列
can
2 帖子 2 发布者 2.1k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • YQHY 离线
    YQHY 离线
    YQH
    写于 最后由 编辑
    #1

    前言
    本文档以YTM32B1Mx为例介绍FLEXCAN收发报文数超过物理邮箱个数时邮箱分配方案、LegacyFIFO用法,同时也适用于YTM32B1Lx系列。

    1. YTM32B1Mx FLEXCAN邮箱资源介绍
    MC03的FLEXCAN资源:
    b2492947-eb3f-4cbc-ac09-81efc9621fed-image.png
    MD14的FLEXCAN资源:
    50bd0110-d75a-456f-97d4-adf5d8f95717-image.png
    ME05的FLEXCAN资源:
    79278b7f-a6d4-4f82-8b2d-4bb16639cac9-image.png
    以ME05为例,邮箱负载为8字节负载时,CAN0、CAN1、CAN2的邮箱数为64个,CAN3、CAN4、CAN5的邮箱数为32个。
    硬件设计时注意优先选用CAN邮箱资源多的CAN通道。

    以CAN0为例,

    • 收发报文数量小于等于邮箱数(64)时,为每一条收发报文分配一个邮箱即可;
    • 收发报文数量超过邮箱数时,可通过配置接收FIFO、配置邮箱接收范围ID的方式来实现。

    下文将通过一个ME05应用实例,介绍使用经典CAN时合理分配邮箱来解决收发报文超过邮箱数问题的方案。

    2. 应用实例说明
    2.1 需求描述
    用户使用CAN0,经典CAN,需要发送的报文ID有40条,需要接收的报文ID包括118条离散ID、1条范围ID(0x600 ~ 0x67F)。如下图:
    c837846e-9a1a-47c0-b5e1-0c91dd762a71-image.png

    2.2 方案概述
    由需求知收发报文总条数远大于CAN0邮箱总数,故接收报文需要用到LegacyFIFO,基本步骤如下:
    (1)根据需要接收的报文数,计算LegacyFIFO占用的邮箱数,并配置LegacyFIFO用于接收118条离散ID;
    (2)剩下的邮箱中,选择一个邮箱用于接收范围ID(0x600 ~ 0x67F);
    (3)剩下的所有邮箱均用做发送邮箱,需要发送报文时滚动轮询发送邮箱的状态,使用空闲邮箱进行发送。
    例如,一种邮箱分配参考方案如下:
    fc491a8b-64e8-4ed3-8283-0b0542a43ec9-image.png

    2.3 功能实现
    2.3.1 接收FIFO配置
    需接收的离散报文ID共118条,因此LegacyFIFO实际需要占用的邮箱数与配置120条滤波码时占用的邮箱数一致,即占用0~35共36个邮箱,配置LegacyFIFO后剩余28个邮箱(邮箱号为36~63)可用。
    76be7871-7939-4a94-b98c-d484666b99e7-image.png
    LegacyFIFO配置方式:
    (1)配置接收LeacyFIFO,手动添加118个接收离散报文ID到过滤表中。配置完成后启动LeacyFIFO接收。
    10092b59-b024-41c0-84fc-820aaccb7259-image.png
    (2)通过LeacyFIFO接收到报文时重新调用FLEXCAN_DRV_RxFifo(CAN_INST, &rxFifoMsg)函数启动下一次接收。
    ea0e466f-b402-4a8e-96bd-3b4292b339c0-image.png

    2.3.2 接收邮箱配置
    LegacyFIFO占用了MailBox0~35共36个邮箱,这里配置邮箱36用于接收ID范围为0x600~0x67F的报文。
    配置方式:
    (1)配置MailBox36的接收ID和掩码值,用于接收0x600~0x67F的范围ID报文。
    af97abde-76b8-4859-a0a7-243dcb1c723f-image.png
    (2)MailBox36接收到报文时重新调用 FLEXCAN_DRV_Receive(CAN_INST, 36, &rxMsgBuffer);函数启动下一次接收。
    416138fe-0d56-4a0f-9ace-9b549548d168-image.png

    2.3.3 发送邮箱配置
    剩下的MailBox37~63共27个邮箱可用做发送邮箱,需要发送报文时,滚动轮询这27个邮箱的状态,使用空闲邮箱发送即可。
    配置方式:
    (1)配置27个发送邮箱
    954a0ac0-155b-4158-a886-0101f4e8330c-image.png
    (2)滚动查询27个发送邮箱的状态,使用空闲邮箱发送报文
    52245282-7e59-4a0d-af75-7e45c6be3fd5-image.png

    3. 总结
    (1)本文档仅提供一个参考方案,收发邮箱的分配应当根据实际的收发报文条数、通讯周期等需求来分配。
    (2)本文档中对于所有的离散ID,均使用LeacyFIFO进行接收,实际应用时可以少分配一些发送邮箱,预留出更多的邮箱用于报文接收,例如对一部分周期较长或优先级较低的报文可以使用LeacyFIFO接收,对周期较短或优先级较高的报文,单独配置接收邮箱实现等。

    参考文档及demo工程
    (1)参考文档
    AN_0008_YTM32_FlexCAN_SDK_User_Guide_zh_review.pdf
    AN_0019_YTM32_FlexCAN_Introduction_zh_review.pdf
    (2)示例demo
    Flexcan_MB_example.zip

    1 条回复 最后回复
    2
    • YQHY YQH 在 中 引用了 这个主题
    • yt0069Y yt0069 在 中 引用了 这个主题
    • yt0069Y yt0069 在 中 引用了 这个主题
    • PedroCaoP 离线
      PedroCaoP 离线
      PedroCao
      写于 最后由 编辑
      #2
      此主題已被删除!
      1 条回复 最后回复
      0

    • 云途论坛规则/Yuntu Forum Rules

      发帖前请查看

    • YCT离线License申请流程

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

    • YT CONFIG TOOL调查问卷

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

    • demo
      12
      can
      9
      lin stack
      6
      yt-link
      5
      vscode
      3
      adc模块
      2
      i2c
      2
      uuid
      2
      Online Users
      • 登录

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