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.

[参考译文] 编译器/TDA4VM:如何选择 MCU_mcan0、MCU_mcan1来发送和接收数据。

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/931295/compiler-tda4vm-how-to-select-mcu_mcan0-mcu_mcan1-to-transmit-and-receive-data

器件型号:TDA4VM

工具/软件:TI C/C++编译器

你(们)好 专家。

我想在 TDA4VM 的 MCU 域上控制 MCU_mcan0、MCU_mcan1。

我在 psdk6.2/mcusw/mcus_demos/boot_app_mcu_rtos/can_resp.c 中引用了 CanApp_ResponseTest 函数

我使用中断方法确认了 CAN TX、CAN Rx、但我不了解 CAN 控制器机制。

问题1. 如何选择要传输的 CAN 器件? 我尝试更改 CAN_Write()函数中的参数(例如 HTH、CAN_PduType 的 swPduHandle)、但它不像我想象的那样工作。

问题2. 我如何知道哪个器件可以获取数据? 我认为 CanIf RxConfirmationSemaphore()函数与 Rx 中断相关,但我找不到用于选择 CAN 设备的 SET 参数。  

问题3. 您能否推荐设置 CAN ID 过滤器的参考?

谢谢你。

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

    您好!

    [引用 user="youncoo Lee "]我在 psdk6.2/mcusw/mcus_demos/boot_app_mcu_rtos/CAN_resp.c中引用了 CanApp_ResponseTest 函数

    对于 CAN 功能、我建议您查看 CAN_PROFILE_APP、两个演示中的 CAN 功能都是相同的、但 BOOT_APP 也有很多其他内容。
    请在 http://downloads.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/latest/exports/docs/mcusw/mcal_drv/docs/drv_docs/demo_can_profile_top.html 上查找 CAN_PROFILE_APP 的文档。 源代码位于 mcusw/mcus_demos/profile/CAN/。

    回到您的问题:

    [引用用户="youncoo Lee 的说法]问题1。 如何选择要传输的 CAN 器件? 我尝试更改 CAN_Write()函数中的参数(例如 HTH、CAN_PduType 的 swPduHandle)、但它不像我想象的那样工作。

    您可以通过更改 HTH 来选择要发送的 CAN 器件。 请查看 中的函数 CanApp_SetupCanFram()  

    /mcusw/mcal_drv/mcal/examples/Can/soc/j721e/mcu2_1/CanApp_Startup.c 您将看到、对于不同的 MCAN、我们使用不同的 HTH。

    [引用用户="youncoo Lee 的说法]问题2. 我如何知道哪个器件可以获取数据? 我认为 CanIf RxConfirmationSemaphore()函数与 Rx 中断相关,但我找不到用于选择 CAN 设备的 SET 参数。  [/报价]

    CAN 总线上的 CAN 节点在传输数据包时进行广播。 一旦 CAN 数据包在线、总线上的所有 CAN 节点都会根据消息的 CAN ID 进行"验收滤波"(有关详细信息、请参阅 TRM)。 因此、您基本上需要设置滤波器以接受特定的 ID。 任何具有此设置的节点都将接收此设置。 (可能大于1)。 滤波器设置为 MCAL 配置的一部分(在 mcusw/mcus_demos/mcal_config/CAN_Demo_Cfg/output/soc/j721e/MCU2_1/src/CAN_Cfg.c 中查找代码)

    [引用用户="youncoo Lee 的说法]问题3。 您能否推荐设置 CAN ID 过滤器的参考?

    在 mcusw/mcus_demos/mcal_config/can_Demo_Cfg/output/generated/soc/j721e/MCU2_1/src/CAN_Cfg.c 中、 您可以在 HW 滤波器列表中看到 CanConfigSet_CanHardwareObject_1、它显示 了 CanConfigSet_CanHardwareObject_1_HwilConfigList。

    通过跟踪此 CanConfigSet_CanHardwareObject_1_HwFilterConfigList、您将看到相同的文件:

    309 /*所有配置集的硬件滤波器结构*/
    310 CAN_CONFIG_DATA_SECTION _NON_CONST 静态 CAN_HwFilterType
    311 CanConfigSet_CanHardwareObject_1_CanHwFilter_0 =
    312{
    313 192U,/*CanHwFilterCode*/314
    4294967295U、/*滤波器掩码*/
    315}; 

    此处显示滤波器设置为192U、即0xC0。 因此、如果您发送 CAN ID 为0xC0的消息、它将位于该特定 CAN 控制器的消息 RAM 中。

    如果您需要更多说明、请告诉我。

    此致、

    Karan

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

    你(们)好 Karan。

    您的回答对我非常有用。

    我解决了几个问题、但我有新的问题。

    问题1. 有关 CAN_Cfg.c 参数。 (mcusw/mcus_demos/mcal_config/CAN_Demo_Cfg/output/generated/soc/j721e/mcu1_0/src/CAN_Cfg.c)

    1-1. H/W 滤波器参数

    我无法理解“过滤器掩码”的含义和用法。

    1-2. CanConfigSet_CanHardwareObject_0参数。

    我无法理解“HwHandle,邮箱长度,填充值”的含义和用法。

    问题2. 如何使用 CAN ID 范围方法设置 H/W 滤波器。

    我认为当前的滤波器设置方法应该为接收设置每个 CAN ID、如白名单。

    我想知道如何设置接收的 CAN ID 范围。  

    问题3. 如何设置 H/W 滤波器以获取所有 CAN ID。

    如何将 Canconfigset_CanHardwareObject 设置为接收所有 CAN ID 而不通过硬件过滤器?

    我将 H/W 滤波器列表设置为"NULL_PTR"、硬件滤波器计数设置为"0"、但我没有得到我预期的答案。

    问题4. 什么是 PC?  

    我试图弄清楚"HTH"的含义和用法、所以我跟踪了 HTH 参数。

    在 CAN_WRITE 函数中、HTH 连接到 CANConfigSet_CanwareHardObject_List_PC、但我找不到任何引用到 CANConfigSet_CanHardwareObject_List_PC 的代码。

    我已识别的 CANConfigSet_CanHardwareObject_List 用于选择 CAN 模块。

     CanConfigSet_CanHardwareObject_List_PC 和 CanConfigSet_CanHardwareObject_List 之间的关系是什么?

    谢谢你。

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

    您好!

    [引用用户="youncoo Lee "]

    问题1. 有关 CAN_Cfg.c 参数。 (mcusw/mcus_demos/mcal_config/CAN_Demo_Cfg/output/generated/soc/j721e/mcu1_0/src/CAN_Cfg.c)

    1-1. H/W 滤波器参数

    我无法理解“过滤器掩码”的含义和用法。

    [/报价]

    滤波器掩码用于确定接收帧标识符中哪些位与滤波器进行比较

    1. 如果一个屏蔽位被设定为零、那么相应的 ID 位将自动被接受、而不管滤波器位的值是什么。
    2. 如果屏蔽位设置为1、则相应的 ID 位将与滤波器位的值进行比较;如果它们匹配、则接受该位、否则帧将被拒绝。

    4294967295实际上是0xFFFFFFFF、因此它强制执行精确匹配。 在 SDK6.02 (这是您的代码库)上、我们不支持更改此掩码、因此、基本而言、即使您将掩码设置为0 (这应该类似于接受所有消息)、它也将是完全匹配的。

    [引用用户="youncoo Lee "]

    1-2. CanConfigSet_CanHardwareObject_0参数。

    我无法理解“HwHandle,邮箱长度,填充值”的含义和用法。

    [/报价]

    HW handle 是实际的 MCAN 缓冲器编号、假设在配置器中您要使用10个缓冲器、则该编号将从0到9。

    邮箱长度==1 (如果是缓冲器),>1 (如果是 HW FIFO)。

    填充值用于填充 CAN 消息、以防其大小为非标准大小。 假设它是59B、则它将对其余5B 进行焊垫、使其成为标准64B 有效载荷。

    [引用用户="youncoo Lee 的说法]问题2. 如何使用 CAN ID 范围方法设置 H/W 滤波器。[/quot]

    在 SDK 6.02中、我们支持精确匹配滤波器。 最新的 SDK 具有此功能。

    [引用用户="youncoo Lee 的说法]问题3。 如何设置 H/W 滤波器以获取所有 CAN ID。

    同上。。。 这基本上应该将滤波器掩码设置为0。

    [引用用户="youncoo Lee 的说法]问题4. 什么是 PC?  [/报价]

    AUTOSAR 中的某些配置不允许更改运行时间。 正如您在运行时无法从一个控制器更改为另一个控制器一样、它应该都是预编译的(PC)配置。

    您提出的很多问题都是 AUTOSAR 特定的、如果您需要更多信息、请告诉我。

    此致、

    Karan