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.

[参考译文] RTOS/AWR1642:如何在 CAN-FD 中连续传输数据?

Guru**** 2601915 points


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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/662176/rtos-awr1642-how-can-continuous-transmit-data-in-can-fd

器件型号:AWR1642

工具/软件:TI-RTOS

我尝试 在 CAN-FD 中传输数据(使用 CANFD_transmitData)

如果我一次只发送数据。 没关系。

但我  会一次连续传输数据。 错。

我必须在  CANFD_transmitData (n)和 CANFD_transmitData (n+1)之间添加 Task_Sleep (1)

是否有任何方法可以使我与 UART_writePolling 相同?
请允许我一次输入64个以上的信息。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我尝试设置更多 txMsgObject。
    当我设置2时、CAN-FD 正常。
    对于毫米波、也没关系。
    for (j = 0;j < 2;j++)

    txMsgObjectParams.msgIdentifier = 0xC1+j;
    txMsgObjHandle[j]= CANFD_createMsgObject (canHandle、&txMsgObjectParams、&errCode);


    当我设置16时、CAN-FD 正常。
    但毫米波是不正常的。
    for (j = 0;j < 16;j++)

    txMsgObjectParams.msgIdentifier = 0xC1+j;
    txMsgObjHandle[j]= CANFD_createMsgObject (canHandle、&txMsgObjectParams、&errCode);


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

    您可以参阅以下代码:

    帧类型= CANFD_MCANFrameType_FD;
    while (1)

    J++;
    txMsgObjectParams.msgIdentifier =0xC5 + j;
    RetVal = CAN_Transmit 调度(txMsgObjHandle、txMsgObjectParams.msgIdentifier、&txData[0]、64);





    int32_t CAN_Transmit 调度(CANFD_MsgObjHandle txMsgObjHandle、uint32_t msg_id、
    uint8_t *txmsg、uint32_t len)


    uint32_t 索引= 0;
    内部32_t RetVal = 0;
    内部32_t 错误代码= 0;
    if (帧类型=CANFD_MCANFrameType_FD)

    while (len > 64U)

    Task_sleep (1);
    RetVal = CANFD_transmitData (txMsgObjHandle、msg_id、CANFD_MCANFrameType_FD、64U、&txmsg[index]、 错误代码(&R);
    索引=索引+ 64U;
    Len = len - 64U;

    Task_sleep (1);
    RetVal = CANFD_transmitData (txMsgObjHandle、msg_id、CANFD_MCANFrameType_FD、len、&txmsg[index]、 错误代码(&R);

    其他

    while (len > 8U)

    RetVal = CANFD_transmitData (txMsgObjHandle、msg_id、CANFD_MCANFrameType_Classic、8U、&txmsg[index]、 错误代码(&R);
    索引=索引+ 8U;
    Len = len - 8U;

    RetVal = CANFD_transmitData (txMsgObjHandle、msg_id、CANFD_MCANFrameType_Classic、len、&txmsg[index]、 错误代码(&R);

    如果(RetVal < 0)

    System_printf ("调试:传输 CAN 数据%x 时出错、错误代码%x\n"、RetVal、错误代码);


    返回 RetVal;



    请注意、根据 CANFD 协议、您一次可以发送64字节、并且最多可以传输10Mb/s (非政治)。
    如果要发送的字节超过64字节,则可以按64字节的块发送它们。

    谢谢、
    Raghu