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/tda3:如何设置 mcan 位速率

Guru**** 2551110 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/621053/rtos-tda3-how-to-set-mcan-bit-rate

器件型号:tda3

工具/软件:TI-RTOS

大家好:

我们在 TDA3中使用的是 CAN。  请 向我们展示如何设置 mcan 的比特率。

谢谢!

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

    您使用哪款 SDK?

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

    您好!

    我不熟悉 TI-RTOS、但我想标记 TDA3 TRM 中描述的 MCAN 硬件、尤其是有关 CAN 时序的信息、请参阅 MCAN_DBTP 寄存器。

    此致、

    STAN

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

    Yordan 您好:

    感谢您的回答。 我们使用的是"vision_sdk_02_12_00_00"。 另一个问题是、是否有任何 mcan 演示、例如 SDK 中的"utils_dcan"。  我们在如何 初始化时钟和 mcan 中断方面遇到了问题。

    谢谢、此致

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

    Starterware 中提供了 MCAN 示例应用程序,网址为" \starterware_\examples\mcan_app\mcanEvmLoopback "。
    在此示例应用中、mCAN_clk 初始化为80MHz。 波特率配置请参阅函数'App_mcanConfig()',中断配置请参阅'App_mcanXBarConfig()'。

    此致、
    Vivek Dhande。
    德州仪器(TI)(印度) Pvt Ltd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Vivek:

    感谢您的回答。
    在我们的应用程序中,我们需要将 mcan 设置为经典模式,比特率为500kbps。
    初始化代码如下:

    /*初始化 MCAN Init 参数*/
    initParams.fdMode = 0x0U;
    initParams.brsEnable = 0x0U;
    initParams.txpEnable = 0x0U;
    initParams.efbi = 0x0U;
    initParams.pxhddisable = 0x0U;
    initParams.darEnable = 0x1U;
    initParams.wkupReqEnable = 0x1U;
    initParams.autoWkupEnable = 0x1U;
    initParams.emulationEnable = 0x0U;
    initParams.emulationFAck = 0x0U;
    initParams.wdcPreload = 0xFFU;
    initParams.clkStopFAck = 0x0U;
    initParams.tdcEnable = 0x0U;
    initParams.tdcConfig.tdcf = 0xAU;
    initParams.tdcConfig.tdco = 0x6U;
    /*初始化 MCAN 配置参数*/
    configParams.monEnable = 0x0U;
    configParams.asmEnable = 0x0U;
    configParams.tsPrescalar = 0xFU;
    configParams.tsSelect = 0x0U;
    configParams.timeoutSelect = MCAN_TIMEOUT_SELECT_CONT;
    configParams.timeoutPreload = 0xFFFFFFU;
    configParams.timeoutCntEnable = 0x0U;
    configParams.filterConfig.rfs = 0x1U;
    configParams.filterConfig.rfe = 0x1U;
    configParams.filterConfig.anfe = 0x1U;
    configParams.filterConfig.anfs = 0x1U;

    /*初始化消息 RAM 段配置参数*/
    msgRAMConfigParams.flssa. = 0;
    msgRAMConfigParams.LSS = 8;
    msgRAMConfigParams.flesa = 100;
    msgRAMConfigParams.LSE = 8;
    msgRAMConfigParams.txStartAddr = 400;
    msgRAMConfigParams.txBufNum = 8;
    msgRAMConfigParams.txFIFOSize = 0U;
    msgRAMConfigParams.txBufMode = 0U;
    msgRAMConfigParams.txBufElemSize = MCAN_Elem_Size_8BYTES;
    msgRAMConfigParams.txEventFIFOStartAddr = 280;
    msgRAMConfigParams.txEventFIFOSize = 8;
    msgRAMConfigParams.txEventFIFOWaterMark = 3U;
    msgRAMConfigParams.rxFIFO0startAddr = 720;
    msgRAMConfigParams.rxFIFO0size = 8;
    msgRAMConfigParams.rxFIFO0WaterMark = 3U;
    msgRAMConfigParams.rxFIFO0OpMode = 0U;
    msgRAMConfigParams.rxFIFO1startAddr = 1000;
    msgRAMConfigParams.rxFIFO1size = 8;
    msgRAMConfigParams.rxFIFO1waterMark = 3U;
    msgRAMConfigParams.rxFIFO1OpMode = 0U;
    msgRAMConfigParams.rxBufStartAddr = 1280;
    msgRAMConfigParams.rxBufElemSize = MCAN_Elem_Size_8BYTES;
    msgRAMConfigParams.rxFIFO0ElemSize = MCAN_Elem_Size_8BYTES;
    msgRAMConfigParams.rxFIFO1ElemSize = MCAN_Elem_Size_8BYTES;

    bitTimes.nomRatePrescalar = 0x0U;
    bitTimes.nomTimeSeg1 = 0xAU;
    bitTimes.nomTimeSeg2 = 0x3U;
    bitTimes.nomSynchJumpWidth = 0x3U;
    bitTimes.dataRatePrescalar = 0x0U;
    bitTimes.dataTimeSeg1 = 0x3U;
    bitTimes.dataTimeSeg2 = 0x3U;
    bitTimes.dataSynchJumpWidth = 0xAU;

    时钟配置:
    /*时钟配置。 *
    DpllId = PMHAL_PRCM_DPLL_DSP_GMAC;
    dpllPostDivider.postDivId = PMHAL_PRCM_DPLL_POST_DIV_H14;
    dlPostDivider.configValue = 25U;
    utils_assert (PM_Success =PMHALCMDpllSetPostDiv (dpllId、
    dpllPostDivider (&dpllPostDivider,1U));

    中断线路被选择"MCAN_IRQ_INT0"。

    使用上述配置、应用程序无法发送和接收数据。 (不会清除寄存器"MCAN_TXBRP")。

    请帮助我们解析此问题。

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

    根据您的配置、您将 mCAN_clk 配置为80MHz。 此外、您将标称位速率配置为5Mbps、因为您将"bitTimes.nomRatePrescalar'编程为"0"、对于500kbps 位速率而言、这是错误的。 您应该将其编程为"9"。 有关更多详细信息、请参阅以下内容。
    比特率计算:
    位速率=((mCAN_clk /预分频器)/(时序参数之和))
    因此、mCAN_clk = 80MHz、预分频器==(nomRatePrescalar + 1)= 10、时序参数总和=(nomTimeSeg1 + nomTimeSeg2 + 3)=(0xA + 0x3 + 3)= 16
    比特率=(80MHz/10)/16 = 500kbps
    此应用是否使用内部回送? 否则、请确保两侧的比特率相同、即发送器侧和接收器侧。


    此致、
    Vivek Dhande。
    德州仪器(TI)(印度) Pvt Ltd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Vivek:

    非常感谢您的帮助。

    我已按如下方式更改位速率配置。

    bitTimes.nomRatePrescalar = 0x9U;
    bitTimes.nomTimeSeg1 = 0xAU;
    bitTimes.nomTimeSeg2 = 0x3U;
    bitTimes.nomSynchJumpWidth = 0x3U;
    bitTimes.dataRatePrescalar = 0x13U;
    bitTimes.dataTimeSeg1 = 0x3U;
    bitTimes.dataTimeSeg2 = 0x2U;
    bitTimes.dataSynchJumpWidth = 0x0U;

     标称和数据比特率均设置为500Kbps。

     内部回送可以正常工作,但在发送到其它设备时。 我对如何设置参数"RatePrescalar"、"TimeSeg1"、"TimeSeg2"有另一个问题。 有什么公式吗?

    谢谢、此致

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

    是的、由于发送器和接收器是相同的、因此内部回送将适用于任何可行的比特率。 由于 MCAN 在经典 CAN 模式下工作、因此位速率无关紧要。
    您使用的是什么硬件? 是 TI EVM 吗? 如果不是、则必须相应地配置 IO 焊盘(Tx 和 Rx)。 此外、如果默认情况下未启用收发器、则需要启用收发器。

    此致、
    Vivek Dhande。
    德州仪器(TI)(印度) Pvt Ltd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好、Vivek

    我们使用的是演示板。 设置电极时出现问题、现在该问题已得到解决。 非常感谢!
    另一个问题:
    如何设置参数"RatePrescalar"、"TimeSeg1"、"TimeSeg2"、"TimeSeg2"的规则是什么? 有什么公式、如 Dcan 吗?

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

    'TimeSeg1'和'TimeSeg2'可被用于操纵 CAN 位时序的采样点。 通常、CAN 通信中使用的采样点约为75%至90%。 同时、"TimeSeg1"应足够大、以便补偿中的物理延迟时间
    网络。
    预分频器可用于调整量子时间。 Time Quantum 是表示上述时序参数(TimeSeg1和 TimeSeg2)的单位。

    此致、
    Vivek Dhande。
    德州仪器(TI)(印度) Pvt Ltd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好、Vivek

    非常感谢你的帮助。