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.

[参考译文] TMS570LC4357-EP:从 L2SRAM 到 SPI2.TX 的前16次传输中出现 DMA 总线错误

Guru**** 2471820 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/1123229/tms570lc4357-ep-dma-bus-error-on-first-16-transfer-from-l2sram-to-spi2-tx

器件型号:TMS570LC4357-EP
主题中讨论的其他器件:HALCOGEN

L2SRAM 在用户模式下映射 MPU。  从 L2SRAM 到 SCI4.TX 的 DMA 工作正常  

在16位传输时、在从地址0x08058868 (L2SRAM)到0xFFF7F63E (SPI2.TXDATA)的第一次传输中、我会得到 DMA 总线错误(在 ESM 处)

应用在传统模式下使用 SPI (因此、DMA 通道3)。 仅将 SPI2CLK 和 SPI2SIMO 引脚启用为功能引脚。

手动发送单个字(之前在代码中完成、工作正常并在示波器上确认)。 第一次 DMA 访问失败、在 SPI SIMO 上不创建输出。

SDC 仅在其所有寄存器上报告0。 因此我不知道 DMA 总线错误的原因。

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

    以使其清晰明了。  我不启用 RX 引脚、也不打算使用它。  我没有配置任何 RX DMA。  该链路是单向的、因为仅启用 SPI2CLK 和 SPI2SIMO。

    手动(非 DMA)发送工作正常。  设置 DMAREQEN、然后设置 SPIEN 会启动一个传输、但是访问会产生 DMA 总线错误(在 ESM 上)。  源地址正常、16位传输的目标地址正常。

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

    更多详细信息:

    DMA 总线错误时不生成 DMA 工作包。

    通道3控制数据包内容:

    0x08058868 0xFFF7F63E 0x001C0001 0x00000000 0x00005008 0x00000000 0x00000000

    因此、地址是正常内容和对齐方式。

    16位源和目的帧传输、每个 DMA 请求28乘以1个元素。

    源地址的后增量

    修复 dst 地址

    是否有任何有关 DMA 总线错误的想法会导致这种情况? (SDC 再次显示所有0x00000000)

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

    您好!  

     您说 SCI4起作用。  SCI4使用哪个通道? 您能否显示 SCI4的控制数据包? 在实验中、如果您将 DMA 通道3用于 SCI4、SCI4是否仍然工作?  

     当您看到总线错误时、您还能显示 DMA 寄存器的转储吗?

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

    SCI4.TX 更复杂、因为源是 DMAREQ[43]、因此我必须将其分配给我未使用的通道31。

    关于 DMA 寄存器、其中太多、您需要更具体一些。   

    通过保持在同一个线程中、我保留了对 DMAREQ[3]的默认通道3分配、而旧版中的 SPI2.TX 是如此。  SPNS195C 第124页

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

    您好!

     我假设您看到的是 ESM GP1.11、对吧?

     您能否在"CCS register"窗口中显示 DMA 模块中的 BERFLAG 寄存器?

     您设置了多少个 DMA 通道? 是仅通道3还是多个通道?

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

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

    我在0xFFFFFF144处的 BERFLAG、在0xFFFFFF170处的 BEROFFSET 以黄色突出显示、两者均显示0。 位于0xFFFFF519上的 ESMSR1也是0。 我可以看到没有 DMA 总线错误、除非您在软件中清除这些标志。 对于实验、如果您使用 SPI1或其他 SPI3/4/5、您是否会得到总线错误?  

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

    抱歉、DMA 总线错误是 G1.20

    SCI4.TX 激活。  存储器和 CRC2寄存器之间的 DMA 也具有较低的优先级。  此外、其他外设也设置为高优先级。

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

    无 BERFLAG、因为此设备上始终为0。  TRM 第751页、第20.3.1.42节

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

    好的。 我也看到了同样的注释。 但您的 ESM 对我来说都是零。 未在您的存储器窗口中设置 GP1.20。  

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

    抱歉。  最后一个是错误之前。  这是新的。

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

    在 DMA 总线错误后、此处显示臭氧标记寄存器。  

      

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

    一定要去。 让我们明天上午继续。  感谢您的回应 Charles。

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

    您好!

     如前面所建议的那样、为了进行隔离问题的实验、您是否可以将代码简化为仅在 SPI2上工作的一个 DMA 通道、而无需其他通道? 您能否在其他 SPI 上重复同样的问题、例如 SPI1、SPI3? 查看您的以下控制数据包、我看不到问题。  

    0x08058868 0xFFF7F63E 0x001C0001 0x00000000 0x00005008 0x00000000 0x00000000

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

    你(们)好,查尔斯  感谢您确认配置。正常。  

    我已禁用其他基于 DMA 的活动、问题仍然存在。

    chanl_cp->dev_p->GCR1.reg.SPIEN = 0U;
    chanl_cp->dev_p->INT0.reg.DMAREQEN = 1U;//在 MibSPI 级别启用 DMA 请求
    chanl_cp->dev_p->GCR1.reg.SPIEN = 1U;

    在任何情况下、之前的代码片段都不是正确的使能序列、其中 SPI 实际上没有足够快的准备好来响应 DMA 请求、因为 SPI 使能速度不够快?

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

    您是否碰巧知道为什么 SDC 寄存器读取0x0000000而不是提供有关 DMA 总线错误原因的更多信息?

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

    我更改了初始化顺序:

    禁用 DMA、设置控制数据包、启用 SPI DMAREQ、启用 SPIEN、启用通道3 DMA 硬请求、然后启用 DMA。

    我得到相同的结果。  因此、我认为 SPI 和 DMA 工作正常、可能应该专注于与从存储器读取或 SPI.TXDATA 操作的权限完全相关的内容。

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

    您好!

     您是否尝试过 HalCoGen MibSPI DMA 示例? 如果没有、请先尝试、然后再根据您的需求进行调整吗?  

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

    我手头上没有此代码、我正在使用的平台是 OEM。  您能否给我发送该示例的.zip 电子邮件、我将对其进行研究、看看我可以如何轻松地将其作为测试代码插入代码中。  谢谢。

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

    请回答 SDC 相关问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="468695" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1123229/tms570lc4357-ep-dma-bus-error-on first-16-transfer-fer-fer-l2sram-to-sp4672-dma 总线错误、而不是引用0x166098]请参阅以下链接中的"0x4166098#dma-dma-dma-rs 错误信息:

    SDC 包含与 CPU 互连相关的控制/状态寄存器。 如果读数为零、则从 L2RAM 读取时没有错误。 您配置的 DMA 用于 Porta 读取和 PortB 写入。 DMA Porta 是 CPU 互连上的启动器、而 DMA PortB 是连接到外设互连的启动器、其中 SCI4/SPI2是从器件。 数据流是使用 DMA Porta 读取 L2RAM、并使用 DMA PortB 在外设互连上写入从器件。 总线错误必须从外设互连侧产生、因为总线错误通常由从器件或外设互连因非法地址或非法访问而产生。 您是否启用了外设? 通常,如果使用标准启动,则会调用 periphInit()来初始化 外设。 您能否检查是否启用了所有外设?

    void periphInit(void)
    {
    
    /* USER CODE BEGIN (9) */
    /* USER CODE END */
    
        /** - Disable Peripherals before peripheral powerup*/
        systemREG1->CLKCNTL &= 0xFFFFFEFFU;
    
        /** - Release peripherals from reset and enable clocks to all peripherals */
        /** - Power-up all peripherals */
        pcrREG1->PSPWRDWNCLR0 = 0xFFFFFFFFU;
        pcrREG1->PSPWRDWNCLR1 = 0xFFFFFFFFU;
        pcrREG1->PSPWRDWNCLR2 = 0xFFFFFFFFU;
        pcrREG1->PSPWRDWNCLR3 = 0xFFFFFFFFU;
    
        pcrREG2->PSPWRDWNCLR0 = 0xFFFFFFFFU;
        pcrREG2->PSPWRDWNCLR1 = 0xFFFFFFFFU;
        pcrREG2->PSPWRDWNCLR2 = 0xFFFFFFFFU;
        pcrREG2->PSPWRDWNCLR3 = 0xFFFFFFFFU;
    
        pcrREG3->PSPWRDWNCLR0 = 0xFFFFFFFFU;
        pcrREG3->PSPWRDWNCLR1 = 0xFFFFFFFFU;
        pcrREG3->PSPWRDWNCLR2 = 0xFFFFFFFFU;
        pcrREG3->PSPWRDWNCLR3 = 0xFFFFFFFFU;
    
        /** - Enable Peripherals */
        systemREG1->CLKCNTL |= 0x00000100U;
    
    /* USER CODE BEGIN (10) */
    /* USER CODE END */
    
    }

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

    感谢您的提示、 我的电源设置正常。  但保护未更新。  因此 SCI4允许用户模式写入、但不允许 SPI2。  由于 DMA 正在进行用户模式访问、因此现在它正在工作。