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.

[参考译文] AWR1642:通过 CAN 网络传输数据

Guru**** 2589280 points
Other Parts Discussed in Thread: AWR1642, AWR1642BOOST

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/653549/awr1642-data-transfer-over-can-network

器件型号:AWR1642

大家好、

我正在尝试通过 CAN 网络发送数据。 我正在使用2 个 AWR1642器件,一个通过 CAN 发送数据,另一个通过 CAN 接收数据。

我将 CAN 高电平引脚连接到另一个器件的 CAN 高电平引脚、将 CAN 低电平引脚连接到另一个器件的 CAN 低电平引脚、并将接地连接到接地。

调用函数 CAN_transmitData()时。  我没有收到任何错误、但在接收器端、我无法接收数据。

但中断使能字段我使其为1 (即启用中断),但回叫函数不会被调用。请帮助我。

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

    您好 Suraj、

    您需要对 AWR1642BOOST 进行几次硬件修改、以使外部 CAN 通信正常工作。

    CAN 和 SPI 线被复用在一起、所以您需要进行以下修改以使 CAN 通信正常工作。

    您还可以参阅以下过去曾遇到类似问题的帖子:

    您可以在 此处参阅 AWR1642BOOST 原理图和汇编文件 、以查找电阻器在 EVM 上的位置。

    通过这些修改,您应该能够使 CAN 通信正常工作。

    谢谢、

    Raghu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是我必须重新焊接这些电阻器,还是可以使用一些跳线直接在 SoC 上完成,所有这些都请告诉我 SIR。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Suraj、

    这将要求您焊接0欧姆电阻器。

    -Raghu
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    AWR1642 EVM 仅提供 CANFD 端口、因此您需要选择 CANFD 功能。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好 Raghu、
    我们在 R11和 R12上安装了0欧姆电阻、并移除了 R6和 R4。 数据仍不会传输。 Tx 完成后、我没有收到中断回调。
    我正在使用 CAN 不是 CAN FD
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不能使用 CAN 代替 CANFD 吗???
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Suraj、

    您可以在经典 CAN 模式下使用 CAN-FD 接口,方法是将帧类型设置为 CANFD_MCANFrameType_Classic。

    有关 CANFD 接口在经典 CAN 模式下工作所需进行的修改、请参阅以下文章。
    e2e.ti.com/.../2316239

    您能否确认如何分析 CAN 数据? 您使用的分析仪是什么?

    -Raghu
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否可以同时使用 CAN 和 SPI 连接?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Suraj、

    CAN 和 SPI 复用。 因此、您只能使用1个具有特定多路复用设置的接口。
    这两个接口不能同时使用。

    -Raghu
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我正在使用 CAN -以太网转换器、它在 CAN 端口中接收数据并通过以太网发送数据。 我将帧类型更改为 CANFD_MCANFrameType_Classic。
    CANFD_transmitData()函数处于循环状态,仅在第一次传输时,我才会获得正确的返回值,但不会生成 TxComplete 中断。
    在下一个循环中、我会得到错误 CANFD_EINUSE 错误。 请帮助我解决问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Suraj、
    您可以引入延迟(Task_sleep()),也可以在发生 Tx 错误时重试传输。

    -Raghu
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Suraj、
    根据我上面提到的更改,您是否仍然看到问题?

    请发布您对通过 CAN 传输数据所做的代码更改、以便我可以检查您的更改是否有问题。

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

    这是我要使用的代码。
    /*MCAN 配置参数*/
    mcanCfgParams->fdMode = 0x1U;
    mcanCfgParams->brsEnable = 0x1U;
    mcanCfgParams->txpEnable = 0x0U;
    mcanCfgParams->efbi = 0x0U;
    mcanCfgParams->pxhddisable = 0x0U;
    mcanCfgParams->darEnable = 0x1U;
    mcanCfgParams->wkupReqEnable = 0x1U;
    mcanCfgParams->autwkupEnable = 0x1U;
    mcanCfgParams->emulationEnable = 0x0U;
    mcanCfgParams->emulationFAck = 0x0U;
    mcanCfgParams->clkStopFAck = 0x0U;
    mcanCfgParams->wdcPreload = 0x0U;
    mcanCfgParams->tdcEnable = 0x1U;
    mcanCfgParams->tdcConfig.tdcf = 0U;
    mcanCfgParams->tdcConfig.tdco = 8U;
    mcanCfgParams->monEnable = 0x0U;
    mcanCfgParams->asmEnable = 0x0U;
    mcanCfgParams->tsPrescalar = 0x0U;
    mcanCfgParams->tsSelect = 0x0U;
    mcanCfgParams->timeoutSelect = CANFD_MCANTimeOutSelect_CONT;
    mcanCfgParams->timeoutPreload = 0x0U;
    mcanCfgParams->timeoutCntEnable = 0x0U;
    mcanCfgParams->filterConfig.rfe = 0x1U;
    mcanCfgParams->filterConfig.rfs = 0x1U;
    mcanCfgParams->filterConfig.anfe = 0x1U;
    mcanCfgParams->filterConfig.anfs = 0x1U;
    mcanCfgParams->msgRAMConfig.LSS = 127U;
    mcanCfgParams->msgRAMConfig.LSE = 64U;
    mcanCfgParams->msgRAMConfig.txBufNum = 32U;
    mcanCfgParams->msgRAMConfig.txFIFOSize = 0U;
    mcanCfgParams->msgRAMConfig.txBufMode = 0U;
    mcanCfgParams->msgRAMConfig.txEventFIFOSize = 0U;
    mcanCfgParams->msgRAMConfig.txEventFIFOWaterMark = 0U;
    mcanCfgParams->msgRAMConfig.rxFIFO0size = 0U;
    mcanCfgParams->msgRAMConfig.rxFIFO0OpMode = 0U;
    mcanCfgParams->msgRAMConfig.rxFIFO0Watermark = 0U;
    mcanCfgParams->msgRAMConfig.rxFIFO1size = 64U;
    mcanCfgParams->msgRAMConfig.rxFIFO1水印 = 64U;
    mcanCfgParams->msgRAMConfig.rxFIFO1OpMode = 64U;
    mcanCfgParams->eccConfig.enable = 1;
    mcanCfgParams->eccConfig.enableChk = 1;
    mcanCfgParams->eccConfig.enableRdModWr = 1;
    mcanCfgParams->errInterruptEnable = 1U;
    mcanCfgParams->dataInterruptEnable = 1U;
    mcanCfgParams->appErrCallBack = MCANAppErrStatusCallback;
    mcanCfgParams->appDataCallBack = MCANAppCallback;

    /*初始化 CANFD 驱动程序*/
    canHandle = CANFD_INIT (&mcanCfgParams、&errCode);
    if (canHandle ==空)

    System_printf ("错误:CANFD 模块初始化失败[错误代码%d]\n"、错误代码);
    返回-1;


    mcanBitTimingParams.nomBrp = 0x2U;
    mcanBitTimingParams.nomPropSeg = 0x8U;
    mcanBitTimingParams.nomPseg1 = 0x6U;
    mcanBitTimingParams.nomPseg2 = 0x5U;
    mcanBitTimingParams.nomSjw = 0x1U;

    mcanBitTimingParams.dataBrp = 0x1U;
    mcanBitTimingParams.dataPropSeg = 0x2U;
    mcanBitTimingParams.dataPseg1 = 0x2U;
    mcanBitTimingParams.dataPseg2 = 0x3U;
    mcanBitTimingParams.dataSjw = 0x1U;

    /*配置 CAN 驱动程序*/
    RetVal = CANFD_CONFIGBitTime (canHandle、&mcanBitTimingParams、&errCode);
    如果(RetVal < 0)

    System_printf ("错误:CANFD 模块配置位时间失败[错误代码%d]\n"、错误代码);
    返回-1;

    /*设置发送消息对象*/
    txMsgObjectParams.Direction = CANFD_DIRECT_TX;
    txMsgObjectParams.msgIdType = CANFD_MCANXidType_29_bit;
    txMsgObjectParams.msgIdentifier = 0xC1;

    txMsgObjHandle = CANFD_createMsgObject (canHandle、&txMsgObjectParams、&errCode);
    if (txMsgObjHandle ==空)

    System_printf ("错误:CANFD 创建 Tx 消息对象失败[错误代码%d]\n"、错误代码);
    返回-1;


    RetVal = CANFD_transmitData (txMsgObjHandle、txMsgObjectParams.msgIdentifier、CANFD_MCANFrameType_Classic、1U、&txData[0]、 错误代码(&R);
    如果(RetVal < 0)

    System_printf ("通过 CAN FD 发送数据时出错错误代码:%d\n"、错误代码);
    返回-1;

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

    这只是从 SDK 驱动程序代码中剪切/粘贴。
    希望您只进行一次初始化、然后在传输线程中调用"CANFD_transmitData ()"。 这种理解是否正确?


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

    您可以按照以下步骤操作:
    1)在“MmwDemo_mssInitTask()”中包含 CAN 初始化代码。 您可以在此任务中包含 pinmux、数据结构初始化和消息对象创建。

    2) 2)您的 CAN 传输代码应该位于"MmwDemo_mboxReadTask()"中,您可以在这里接收来自 DSS 的对象数据。 可以包含"CANFD_transmitData()"来代替"UART_writePolling()。 只需确保发送正确的长度和数据指针。

    谢谢、
    Raghu
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我只是这么做...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您在此帖子中输入的代码看起来不像这样。

    还想知道为什么您只使用 CAN_Transmit ()传输1字节数据。 一次传输1个字节是否有具体原因?

    -Raghu
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我执行了相同的操作、但仍然收到错误代码-3502的错误
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Suraj、

    为什么只传输1个字节?

    -Raghu
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不仅仅是为了检查我是否尝试过
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我尝试发送64个字节、但它不起作用、因此我发送了1个字节来尝试没有具体原因。
    但我的问题仍然没有得到解决。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Suraj、

    我建议您了解 CAN 接口和您可以传输的数据量。

    请参阅 AWR1642 TRM “第21节模块化控制器局域网(MCAN)”。

    在尝试将该接口包含在设计中之前、请尝试了解该接口。

    谢谢、

    Raghu