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.

[参考译文] RM44L920:DMA-Controlpacket 初始化后出现 DMA 奇偶校验错误

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1045235/rm44l920-dma-parity-error-after-dma-controlpacket-initialization

器件型号:RM44L920
主题中讨论的其他器件:HALCOGEN

您好!

当我启用 DMA 奇偶校验(0xAU)并且开始配置请求线路+ DMA 控制数据包时、我看到 ESM 组1报告了一个0x08、这是一个 DMA 奇偶校验错误。 是否有可能避免由于大多数 PBIST RAM 测试已经成功执行。

启用 DMA 奇偶校验时、是否需要遵循一个序列? 我已经阅读了与自动初始化例程相关的内容、但我不知道所有步骤。 目前、我在配置控制数据包之前启用该方、但一旦我跳过控制数据包功能、ESM 就会报告 DMA 奇偶校验错误。

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

    您好 Krax、

    加电后、包括奇偶校验位在内的 RAM 内容无法得到保证。 为了避免读取 RAM 时出现奇偶校验故障、必须初始化 RAM。

    HALCoGen 生成的启动代码应包括用于初始化 DMA RAM 的函数调用:

    memoryInit((UINT32)((UINT32) 1U <<1U )/* DMA RAM */
    |(uint32)((uint32) 1U << 2U)/* VIM RAM */
    |(UINT32)((UINT32) 1U << 5U)/* CAN1 RAM */
    |(UINT32)((UINT32) 1U << 6U)/* CAN2 RAM */
    |(UINT32)((UINT32) 1U << 10U)/* CAN3 RAM */
    |(uint32)((uint32) 1U << 8U)/* ADC1 RAM */
    |(uint32)((uint32) 1U << 14U)/* ADC2 RAM */
    |(uint32)((uint32) 1U << 3U)/* HET1 RAM */
    |(uint32)((uint32) 1U << 4U)/* HTU1 RAM */
    |(uint32)((uint32) 1U << 15U)/* HET2 RAM */
    |(UINT32)((UINT32) 1U << 16U)/* HTU2 RAM */

    如果通过调用 API 来运行 DMA RAM 奇偶校验会发生什么情况: dmaParityCheck()?

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

    QJ Wang、您好!

    感谢您的快速反馈。 当我调用 memoryInit 而不对 DMA 进行任何进一步初始化(memoryInt (0x1 /* No DMA init */))时、并且稍后我通过调用上面提到的相应函数来激活 DmaParity、对于这个调试周期步骤似乎是可以的。 如果我接近几个特定于 DMA 的初始化步骤、例如 RTI 上下文中使用的 dmaConfigCtrlPaket、则 ESM 组1通过设置寄存器中的值0x8直接报告奇偶校验错误。 当我跳过这个 dmaConfigCtrlPaket 时、ESM 寄存器上不会发出错误。

    是否需要特定的初始化步骤? 我想您在几个 HET 奇偶校验主题中提到,在使用 DMA RAM 初始化执行 memoryInit()之前,需要首先调用 xPartiyCheck(),或者我是否需要遵循不同的序列?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="345079" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1045235/rm44l920-dma-parity-error-after-dma-controlpacket-initialization/3866670 #3866670"]如果我要执行几个特定于 DMA 的初始化步骤,如 RTI 上下文中使用的 dmaConfigCtrlPaket,则 ESM 组1通过设置寄存器中的值0x8直接报告奇偶校验错误

    dmaConfigCtrlPacket()不读取/写入 DMA 内存,因此调用此函数不会生成奇偶校验错误。

    在启动过程中、代码应自动初始化所有片上 SRAM (MCU RAM 和外设 RAM)、并检查所有外设存储器(NHET RAM、ADC、DMA、MibSPI、CAN、 和 VIM 等)。

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

    您好、Qj Wang、

    感谢您的贡献。 每当我将缓冲区分配给链接到某些硬件外围设备的 DMA 源/目标地址时、我都会看到该标志更新。

    不过、在启动期间对 DMA RAM 使用自动初始化方法之前启用 DMA 奇偶校验寄存器可以解决该问题。 ESM 停止报告奇偶校验错误、除非我应用相应的测试来测试诊断