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.

[参考译文] AWR1642BOOST:从接收到的 CAN 帧(DCAN)读取消息 ID

Guru**** 2587365 points


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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/616889/awr1642boost-reading-a-message-id-from-a-received-can-frame-dcan

器件型号:AWR1642BOOST

我在读取收到的 CAN 消息的实际消息 ID 时遇到问题。  

我正在使用 DCAN 模块、可以成功初始化和配置 CAN 子系统以接收和发送 CAN 帧。 我已通过第三方 CAN 监听器验证了这一点。

但是、接收到 CAN 帧后、我无法读取接收到的 CAN 帧的实际报文 ID。 我已修改 DCAN 驱动程序以从该源文件中的 IFARB 寄存器中获取消息 ID:
C:\ti\mmwave_sdk_01_00_00_05\packages/ti\drivers\cAN\src\dcand.c

对驱动程序的修改成功读取了消息 ID、但它与我为消息对象配置的消息 ID 相同。 无论我为该消息框更改了多少屏蔽位或 ID 位、从接收到的帧读取的 ID 都只是 CAN 消息对象配置的消息 ID。 它不提供接收到的帧的消息 ID。 我想从接收到的帧访问实际的报文 ID、而不是从报文对象配置访问。  

是否有办法使用 DCAN 模块访问接收到的 CAN 帧的 CAN 消息 ID?

谢谢、
Erik

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

    我们应该能够从接收到的 DCAN 消息中获取消息 ID。

    请帮我提供以下信息:
    1.外部 CAN 节点发送的消息的消息 ID 是什么?
    2.为接收此帧的消息框配置了什么消息 ID?
    3.您设置的掩码值是多少?
    4."IF2ARB"寄存器中的值是多少?

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

    您好 Raghu、

    1、外部 CAN 节点发送的报文 ID 为0x83 (任意选择)

    接收帧的报文对象的报文 ID 为0x99 (也是任意选择的)

    我设置的掩码为0x00000000、选择接受所有消息 ID 以帮助解决此问题。

    IF2ARB 中的值始终为0x99

    其他信息:

    -我的发送消息框 ID 为0x70 (选择回显我接收的 CAN 消息)

    -读回 IF1ARB 时始终提供值0x70

    -读取 IF3ARB 在回读时始终提供值0x00

    -dCAN.c 驱动程序从 DCAN_IFDATB 中获取8个字节的数据后、我立即读取 IFARB 寄存器

    谢谢、
    Erik

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

    我能够再现您在阅读消息 ID 时提到的问题。

    我看到的问题是在“DCANGetData()”中的“ifCmd”配置中。
    在写入 IFCMD 寄存器之前、我们需要启用"访问屏蔽位(DCAN_IFCMD_MASK_MASK)"和"访问仲裁位(DCAN_IFCMD_ARB_MASK)"。

    请在 DCANGetData()中进行以下修改:

    旧代码:
    ifCmd =(DCAN IFCMD_data_mask |
    DCAN IFCMD_DATAB_MASK |
    DCAN IFCMD_CONTINL_MASK |
    DCAN IFCMD_TXRQST_NEWDAT_MASK );

    新代码:
    ifCmd =(DCAN IFCMD_data_mask |
    DCAN IFCMD_DATAB_MASK |
    DCAN IFCMD_CONTINL_MASK |
    DCAN IFCMD_TXRQST_NEWDAT_MASK |
    DCAN IFCMD_ARB_MASK |
    DCAN IFCMD_MASK_MASK);


    通过此更改、您还可以读取 IFARB 寄存器中的消息 ID。

    请告诉我是否能解决您的问题。

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

    Raghu、

    谢谢、这解决了这个问题。

    谢谢、
    Erik