This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28P650DK:MCan RAM TX 缓冲器和 API

Guru**** 2322270 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1517142/tms320f28p650dk-mcan-ram-tx-buffer-and-api

器件型号:TMS320F28P650DK

工具/软件:

尊敬的支持团队:
我与 Mcan Peripheral 合作过、在回答问题之前、我先做了介绍。

根据文档 SPRUIZ1B、在图35-21 第5216页中绘制的 TX 缓冲器元素结构适用于

  • 传统 CAN 外围设备:FDF = 0
  • FD CAN 外围设备:FDF = 1

根据 TI API 和 TI 示例"mcan_EX7_classical_transmit.c" 、函数 MCAN_writeMsgRam 用于填充 C 结构 MCAN_TxBufElement、其数据字段为

uint16_t DATA[MCAN_MAX_PAYLOAD_Bytes];
#define MCAN_MAX_PAYLOAD_Bytes (64U)

上述结构在"RAM TX 缓冲区"上分配、 在"FD CAN"中被称为 TX 缓冲区、在"传统 CAN 外设"中 被称为 TX 邮箱。
关于将 MCAN 外设用作"传统 CAN 外设" 并由 TI API 驱动的考虑因素是: 对于在 RAM 中分配的每个 TX 缓冲区、 都会发生浪费(64-8 )=56字节的情况。

我的考虑是否正确?
如果是、TI API 中是否有一个 MAX_PAYLOAD_BYTES 等于8的 TX 缓冲区元素 C 结构、及其相关的 C 函数将其分配为"标准 TX 缓冲区元素"?
我将避免上述浪费和使用带有 API 功能的 Mcan 外围设备。

感谢您的支持、
Ettore

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    早上好、
    今天、我已经 通过设置了解了两个 TX 缓冲器结构分配的存储器
    传统 CAN 外围设备:FDF = 0。

    对与上述设置相关的字节进行计数、
    4字节用于 ID、RRT、XTD、ESI;
    3字节、用于 RES、DLC、BRS、FDF、RES EFC;
    mm 为1字节;
    8字节数据;

    总共16个字节。

    第一个 TX 缓冲区从地址0x59130开始、到0x5913F 结束。
    第二个 TX 缓冲区从地址0x59140开始、到0x5914F 结束。

    因此、C 编译器似乎会 根据 TX 缓冲区用户设置调整 DATA[MCAN_MAX_PAYLOAD_Bytes]的大小、这是属于 C 结构 MCAN_TxBufElement 的大小。

    我错了吗?

    谢谢您、
    Ettore

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ettore:

    由 MCAN 模块本身根据 DLC 分配缓冲区/FIFO 空间。  它不是 C 编译器。  空间分配遵循 Tx 缓冲区的此元素结构(同样也适用于 RX 缓冲区):

    一行(Tx)为4字节、对于 DLC/有效载荷为8字节的传统 CAN、一个缓冲器元素会在图中第 T3行的末尾停止。  接下来的缓冲器 元素立即从下一行开始、每个元素均32位对齐。  这是 MCAN 管理缓冲区分配的有效方法。

    此致、

    Joseph