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.

[参考译文] AM62A7:AM62A7:MCU CAN1未在进行比特率切换时发送 CAN FD

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1438466/am62a7-am62a7-mcu-can1-do-not-sent-can-fd-with-bit-rate-switching

器件型号:AM62A7
主题中讨论的其他器件: SysConfig

工具与软件:

SDK 版本:9.2

当我们使用 AM62A7中的 MCU CAN0、MCU CAN1和 SOC CAN0时、我们发现只有 MCU CAN0可以正确地发送和接收 FD 、并进行比特率切换。 当 MCU CAN1 配置为与 MCU CAN0相同的配置时、MCU CAN1无法 在进行比特率切换的情况下正确发送 FD 帧 (可以正常发送和接收标准消息)。

使用 ZLG 的 USBCANFD-200U 作为升序调试器件、并按如下所示设置通信参数:

协议标准: 启用具有比特率切换功能的 CAN FD ISO、FD 帧。 仲裁波特率:500kbps、数据 字段波特率2Mbps、 采样点为 80%。

使用 此配置、  可以正常发送和接收具有比特率切换功能的 MCU CAN0 FD 帧。

修改 MCU CAN1通信配置参数、使其与 MCU CAN0一致。 研究发现只能正常发送和接收标准消息、但 可以接受调试器件发送具有比特率切换功能的 CAN FD 帧。 当 MCU CAN1尝试发送  具有比特率切换功能的 CAN FD 帧时、中断

触发 MCAN_INTR_SRC_PROTOCOL_ERR_DATA。    发送比特率切换的 FD CAN FD 帧失败。
已初始化的配置参数:

/*初始化 MCAN Init 参数*/
MCAN_InitParams initParams
initParams.fdMode = 1// 0x1U;
initParams.brsEnable = 1// 0x1U;
initParams.txpEnable = 0x0U
initParams.efbi = 0x0U
initParams.pxhddisable = 0x0U
/*启用数据包的自动重新传输、
*将 initParams.darEnable 编程为"0"*/
initParams.darEnable = 0x0U
initParams.wkupReqEnable = 0x1U
initParams.autoWkupEnable = 0x1U
initParams.emulationEnable = 0x1U
initParams.emulationFAck = 0x0U
initParams.clkStopFAck = 0x0U
initParams.wdcPreload = 0xFFU
initParams.tdcEnable = 0x1U
initParams.tdcConfig.tdcf = 0xAU
initParams.tdcConfig.tdco = 0x6U
MCAN_init (gMcanBaseAddr&initParams);
--------------------------------------------------------
比特率设置:
/*配置位时序500Kbps 和2Mbps */
MCAN_BitTimingParams bitTimes
bitTimes.nomRatePrescalar = 1
bitTimes.nomTimeSeg1 = 70// 63;
bitTimes.nomTimeSeg2 = 7// 14;
bitTimes.nomSynchJumpWidth = 4// 13;

bitTimes.dataRatePrescalar = 1
bitTimes.dataTimeSeg1 = 15// 12;
bitTimes.dataTimeSeg2 = 2// 5;
bitTimes.dataSynchJumpWidth = 1// 3;
MCAN_setBitTime (gMcanBaseAddr&bitTimes);
--------------------------------------------------------
上述配置通常可以 在 MCU CAN0上进行比特率切换的情况下发送和接收 CAN FD 帧。  但它在 MCU CAN1上不起作用。
发送代码配置如下所示:
--------------------------------------------------------
MCAN_TxBufElement txMsg
txMsg.id =(uint32_t)((uint32_t)(can_id)<< 18u);
txMsg.rtr = 0u
txMsg.xtd = 0U
txMsg.esi = 0u
txMsg.1U = brs
txMsg.FDF = 1u
txMsg.efc = 1u
txMsg.dlc = size_to_dlc (data_len);
memcpy (txMsg.datadata、data_len % 65);
当 MCU CAN1上的 TRS 为1时、上述配置将触发 MCAN_INTR_SRC_PROTOCOL_ERR_DATA 错误中断。 但在 MCU 上、CAN0状态良好。
当 TRS 为0且 FD 为 1时、MCU CAN1 正常接收 FD 帧。 但发送 FD 帧失败。  但是 标准 传统帧可以正常发送和接收。
我尝试 SOC MCAN0、MCU CAN1遇到相同的错误。

请 给我帮助。
谢谢你。

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

    您好!

    您是否能够修改 MCAN 位时序参数中的 Tseg1和 Tseg2值并重试。 每个段中的时间量子数量都受到限制。

    此致、
    Aparna

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

    您好、Aprna:  

    感谢你的帮助。

    您的意思是修改数据字段 SP 百分比吗?  

    我试过60%  不起作用。   MCAN_INTR_SRC_PROTOCOL_ERR_DATA 中断 将处于活动状态。 ->总线关闭

    bitTimes.dataRatePrescalar = 1
    bitTimes.dataTimeSeg1 = 12// 12;
    bitTimes.dataTimeSeg2 = 5// 5;
    bitTimes.dataSynchJumpWidth = 1// 3;

     75%  不起作用。   MCAN_INTR_SRC_PROTOCOL_ERR_DATA 将 处于活动状态。   ->总线关闭

    bitTimes.dataRatePrescalar  =  1
    bitTimes.dataTimeSeg1  =  15 // 12;
    bitTimes.dataTimeSeg2  = 2 // 5;
    bitTimes.dataSynchJumpWidth  =  1 // 3;

    还有80%  不起作用。   MCAN_INTR_SRC_PROTOCOL_ERR_DATA 将 处于活动状态。   ->总线关闭

    bitTimes.dataRatePrescalar  =  1
    bitTimes.dataTimeSeg1  =  16 // 12;
    bitTimes.dataTimeSeg2  = 1 // 5;
    bitTimes.dataSynchJumpWidth  =  1 // 3;
    是的,我尝试以上 参数。 误差仍然满足。   
    我连接 CAN0和 CAN1、使用相同的位 参数。  
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我会检查并在几个小时内回复您。

    此致、
    Aparna

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

    您好!

    请先检查内部回送模式是否正常工作。

    接下来、MCU_MCAN0和 MCU_MCAN1连接之间的硬件差异是什么?

    当使用完全相同的代码时、一个 CAN 实例正在工作、而另一个实例却不工作、这是不常见的。

    此外、请在您的 ZLG USBCANFD 软件上共享 MCAN 位时序参数设置。

    此致、
    Aparna

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

    ---请先检查内部回送模式是否正常工作。

    首先、SDK 源代码环回不起作用。  我会再次检查它。

     您的 MCU_MCAN0和 MCU_MCAN1连接之间的硬件差异是什么?

    连接是相同的。  我尝试了很多 次。   

    --- ZLG USBCANFD 软件。

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

    时钟应为80 MHz

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

    是的、am62a 的时钟 si 80MHz、 但  ZLG USBCANFD 的时钟为60MHz。、但比特率和 SP 相同。

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

    您是否参考本文档来计算位参数: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/920090/faq-tda4vm-can-how-is-bit-rate-calculated-for-can

    当时序参数不匹配时、会触发 MCAN_INTR_SRC_PROTOCOL_ERR_DATA 中断。

    此致、
    Aparna

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

    嗨、Aparna

    我 再次在 mcu_plus_sdk_am62ax_09_02_00_38/examples/drivers/mcan/mcan_loopback_polling/mcan_loopback_polling.c 上检查原始样本、

    仅对于 MCU_CAN1:

    MCU_PLUS_SDK_am62ax_09_02_00_38/examples/drivers/mcan/mcan_loopback_interrupt/am62ax-sk/mcu-r5fss0-0_freertos/ti-arm-clang/generated/ti_drivers_config.h
    Fullscreen
    1
    2
    3
    4
    /* MCAN Instance Macros */
    #define CONFIG_MCAN0_BASE_ADDR (CSL_MCU_MCAN1_MSGMEM_RAM_BASE)
    #define CONFIG_MCAN0_INTR (46U)
    #define CONFIG_MCAN_NUM_INSTANCES (1U)
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    但它只测试经典 CAN。 我修改代码以支持 FD 和 BRS:
    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    static void App_mcanConfigTxMsg(MCAN_TxBufElement *txMsg, uint32_t idx)
    {
    .......
    MCAN_initTxBufElement(txMsg);
    /* Standard message identifier 11 bit, stored into ID[28-18] */
    txMsg->id = ((APP_MCAN_EXT_ID + idx) & APP_MCAN_EXT_ID_MASK);
    txMsg->dlc = MCAN_DATA_SIZE_8BYTES; /* Payload size is 64 bytes */
    txMsg->fdf = TRUE; /* Frame transmitted in CAN FD format */
    txMsg->brs = TRUE; /* CAN FD frames transmitted with bit rate switching */
    txMsg->xtd = TRUE; /* Extended id configured */
    ......
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    我完成了3个测试:
    1. 案例1。 使用默认时序参数、"Normal":1Mbps Data:5Mpbs、CAN loopback"模式是启用的。
    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    MCAN_BitTimingParams gMcanBitTimingDefaultParams =
    {
    .nomRatePrescalar = 0x7U,
    .nomTimeSeg1 = 0x5U,
    .nomTimeSeg2 = 0x2U,
    .nomSynchJumpWidth = 0x0U,
    .dataRatePrescalar = 0x1U,
    .dataTimeSeg1 = 0x3U,
    .dataTimeSeg2 = 0x2U,
    .dataSynchJumpWidth = 0x0U,
    };
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    此处 enableInternalLpbk = true;
     将时序参数配置 为1Mbps 和5Mbps:
    时钟:80米
    正常:
    TSEG1= 5 + 1 = 6
    TSEG2= 2 + 1 = 3
    预设=7+1=8
    因此、Flock = 80/8 = 10MHz

    TQ 枚举值:(1+TSEG1 + TSEG2) =(1+6+3)=10、因此比特率:10m/10=1Mbps、SP:(1+6)/10 = 70%。

    数据:   
    TSEG1= 3 + 1 = 4
    TSEG2= 2 + 1 = 3
    预设=1+1=2
    因此、FLOCK = 时钟/预分频器 = 80/2 = 40MHz

    TQ 枚举:(1+TSEG1+TSEG2)=(1+4+3)=8  、所以比特率:40M/8=5Mbps、SP:(1+4)/8=62.5%。

    结果:所有测试均已通过!!

    2.  情况 2:使用 自定义 时序参数、正常:500Kbps 数据:2Mpbs、CAN 环回模式被启用。
    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    MCAN_BitTimingParams gMcanBitTimingDefaultParams =
    {
    .nomRatePrescalar = 1,
    .nomTimeSeg1 = 62,
    .nomTimeSeg2 = 15,
    .nomSynchJumpWidth = 4,
    .dataRatePrescalar = 1,
    .dataTimeSeg1 = 14,
    .dataTimeSeg2 = 3,
    .dataSynchJumpWidth = 1,
    };
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    时钟:80米
    正常:
    TSEG1= 62 + 1 = 63
    TSEG2= 15 + 1 = 16
    预设=1+1=2
    因此、FLOCK =时钟/预分频器= 80/2 = 40MHz

    TQ 枚举:(1+TSEG1+TSEG2)=(1+63+16)=80    、所以比特率:40m/80=500Kbps、SP:(1+63)/80=80%。

    数据:   
    TSEG1= 1 + 14 = 15
    TSEG2= 3 + 1 = 4
    预设=1+1=2
    因此 FLOCK =时钟/预分频器 = 80/2= 40MHz

    TQ 枚举值:(1+TSEG1 + TSEG2)= (1+15+4)=20   、所以比特率:40m/20=2Mbps,SP:(1+15)/20=80%     。

    结果: 所有测试均已通过!!

    3.情况3:使用默认时序参数 Normal:1Mbps Data:5Mpbs、但禁用 CAN 环回模式。

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    MCAN_BitTimingParams gMcanBitTimingDefaultParams =
    {
    .nomRatePrescalar = 0x7U,
    .nomTimeSeg1 = 0x5U,
    .nomTimeSeg2 = 0x2U,
    .nomSynchJumpWidth = 0x0U,
    .dataRatePrescalar = 0x1U,
    .dataTimeSeg1 = 0x3U,
    .dataTimeSeg2 = 0x2U,
    .dataSynchJumpWidth = 0x0U,
    };
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Fullscreen
    1
    App_mcanConfig(TRUE);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    结果:测试失败。(上部 CAN 调试器件设置为1Mbps 和5Mbps)、

    此处封锁的代码:

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

    嗨  Aparna、

    我做其他测试:

    仍然使用以下示例: mcu_plus_sdk_am62ax_09_02_00_38/examples/drivers/mcan/mcan_loopback_polling/mcan_loopback_polling.c

    在轮询示例中、代码仅发送经典帧。 因此我修改 below4行代码、以使用 BRS 发送 CAN FD 帧:

    和  时序参数:

    当 CAN 实例为  CSL_MCU_MCAN0_MSGMEM_RAM_BASE (即 MCU_CAN0)时、 具有 BRS 发送功能的 CAN FD 电报良好。  

     当 CAN 实例为  CSL_MCU_MCAN1_MSGMEM_RAM_BASE (即 MCU_CAN1)时、可以保持其他源代码相同:
    那么  带有 BRS 的 CAN FD 电报无法发送。  ZLG 的 USBCANFD-200U 只捕捉错误帧。
    我们使用的是 TJA1051TK/3 收发器(www.nxp.com.cn/.../TJA1051.pdf)、其特性和优势如下:
     
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您能否共享 PSR 的寄存器转储以了解触发了什么错误?

    此致、
    Aparna

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

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    bitPos = (1U << fifoStartIdx);
    /* Poll for Tx completion */
    uint32_t mcu_PSR = 0;
    do {
    txStatus = MCAN_getTxBufTransmissionStatus(gMcanBaseAddr);
    mcu_PSR = HW_RD_REG32(0x04E18044);
    DebugP_log("mcu_PSR:0X%02x\r\n", mcu_PSR);
    appLogWaitMsecs(1000u);
    } while ((txStatus & bitPos) != bitPos);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    结果:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    [MCU1_0] 2699.930199 s: [MCAN] Loopback Polling mode, application started ...
    [MCU1_0] 2699.931499 s: mcu_PSR:0X707
    [MCU1_0] 2700.931280 s: mcu_PSR:0Xf040f
    [MCU1_0] 2701.931353 s: mcu_PSR:0Xf070f
    [MCU1_0] 2702.931431 s: mcu_PSR:0Xf070f
    [MCU1_0] 2703.931511 s: mcu_PSR:0Xf070f
    [MCU1_0] 2704.931589 s: mcu_PSR:0Xf070f
    [MCU1_0] 2705.931669 s: mcu_PSR:0Xf070f
    [MCU1_0] 2706.931746 s: mcu_PSR:0Xf070f
    [MCU1_0] 2707.931824 s: mcu_PSR:0Xf070f
    [MCU1_0] 2708.931905 s: mcu_PSR:0Xf070f
    [MCU1_0] 2709.931983 s: mcu_PSR:0Xf070f
    [MCU1_0] 2710.932060 s: mcu_PSR:0Xf070f
    [MCU1_0] 2711.932148 s: mcu_PSR:0Xf070f
    [MCU1_0] 2712.932225 s: mcu_PSR:0Xf070f
    [MCU1_0] 2713.932305 s: mcu_PSR:0Xf070f
    [MCU1_0] 2714.932381 s: mcu_PSR:0Xf070f
    [MCU1_0] 2715.932460 s: mcu_PSR:0Xf070f
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    正常:500K、数据:2M  

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    MCAN_BitTimingParams gMcanBitTimingDefaultParams = {
    .nomRatePrescalar = 1,
    .nomTimeSeg1 = 62,
    .nomTimeSeg2 = 15,
    .nomSynchJumpWidth = 4,
    .dataRatePrescalar = 1,
    .dataTimeSeg1 = 14,
    .dataTimeSeg2 = 3,
    .dataSynchJumpWidth = 1,
    };
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    似乎没有触发任何错误。

    是否要使用 syscfg 将 MCAN 实例更改为 MCU_MCAN1并重新编译示例?

    默认情况下、该示例支持 MCU_MCAN0实例、因此相关配置(例如中断号)与 MCU_MCAN0相关联。

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

    似乎没有触发任何错误。

    --- 也许你错了。    第一次转储 TDC 为0、第二次转储 DLEC 为4、、即数据 BIT1错误、TDC 已更改为0xF。 所配置的 CPU。 TDC 设置为0。

    --- 是否要使用 syscfg 将 MCAN 实例更改为 MCU_MCAN1并重新编译示例?

    我会再试一次。 奇怪的是、对于 CAN0、配置相同、CAN0实例运行良好。 但 CAN1没有。

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

    您好、Aprana、

    我尝试 使用 SysConfig 工具({rtos_SDK}/sysconfig_1.19.0/sysconfig_GUI.sh)打开{rtos_sdk_path}/vision_apps/platform/am62a/rtos/mcu1_0/example.syscfg 、然后重新添加 MCU-CAN1:

    当 make SDK 如此错误才会抛出错误:

    因此 我禁用并删除 UART 调试模块、同时保持 CAN 模块启用:

    如下所示的错误:

    我不知道为什么。

    下面是我的 example.config:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    /**
    * These arguments were used when this file was generated. They will be automatically applied on subsequent loads
    * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments.
    * @cliArgs --device "AM62Ax" --package "AMB" --part "Default" --context "mcu-r5fss0-0" --product "MCU_PLUS_SDK_AM62Ax@09.02.00"
    * @versions {"tool":"1.19.0+3426"}
    */
    /**
    * Import the modules used in this configuration.
    */
    const mcan = scripting.addModule("/drivers/mcan/mcan", {}, false);
    const mcan1 = mcan.addInstance();
    const clock = scripting.addModule("/kernel/dpl/clock");
    const debug_log = scripting.addModule("/kernel/dpl/debug_log");
    const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false);
    const mpu_armv71 = mpu_armv7.addInstance();
    const mpu_armv72 = mpu_armv7.addInstance();
    const mpu_armv73 = mpu_armv7.addInstance();
    const mpu_armv74 = mpu_armv7.addInstance();
    const mpu_armv75 = mpu_armv7.addInstance();
    const mpu_armv76 = mpu_armv7.addInstance();
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    您能告诉我如何解决此问题吗?

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

    您是否曾尝试使用 MCU+ SDK 并在其中构建库和示例?

    MCU + SDK: https://www.ti.com/tool/download/MCU-AM62A/10.00.00.14 MCU-PLUS-SDK

    文档: https://software-dl.ti.com/mcu-plus-sdk/esd/AM62AX/10_00_00_14/exports/docs/api_guide_am62ax/index.html

    此致、
    Aparna

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

    尊敬的 Aparna:

    感谢你的帮助。

    我已经解决了这个问题。

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

    您好!

    您能否分享一下、您是如何解决该问题的?

    此致、
    Aparna

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

    是的、当然可以。

    基于此转储信息。

     第一次转储是正常的。 第二次转储不正确(TDC 值被修改、BIT1错误。)。 我想这可能与 TDC 函数有关。  我尝试禁用 TDC、这样 CAN1实例使用 BRS 发送 FD 帧也可以。

    运转相当正常。 当 BRS 启用且数据字段比特率>= 2Mpbs 时、TDC 应启用。

    另外、之前我  在 TDA4-entry 和 TDA4-eco 定制的 TJA1051TK 收发器上使用过、但  启用 TDC 时、它能与 BRS 良好配合使用。 我不知道为什么它在 AM62A 上不起作用。

    顺便说一下如何      在 TDCR 寄存器中计算和配置 TDCO 和 TDCF、 我在 TRM 中找不到详细说明。 什么是  TDCF? 它是 TDCO 的阈值吗?

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

    您好!

    用作辅助采样点(SSP)的传输延迟补偿值(TDCV)由 CAN 控制器自动选择。 控制器测量在 m_can_tx 上驱动显性信号到相应边沿出现在 m_can_rx 上(每个 tq 采样)之间的延迟。 在 CAN FD 帧的每次传输时、该测量值在协议状态寄存器(PSR 地址= h1044)的 TDCV 字段中进行更新、它用作参考、并在 CAN FD 传输的数据部分用于验证良好的传输。  

    可以使用发送器延迟补偿偏移(TDCO)和滤波器窗口长度(TDCF)将 CAN 控制器选择的 SSP 限制在特定的窗口内。 偏移量提供了额外的时间份额、要添加到  CAN 控制器的延迟测量中。 滤波器窗口长度定义了最小有效延迟测量值、以确保 SSP 大于此处定义的值。 这些值可以在发送器延迟补偿寄存器(TDCR 地址= h1048)中进行配置。  

    此致、
    Aparna

x 出现错误。请重试或与管理员联系。