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:TMS570LC4357:使用 DMA 写入 SPI 闪存有关 DMA 控制数据包更新而不禁用 DMA 控制器的阐述

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1218908/tms570lc4357-tms570lc4357-write-to-spi-flash-using-dma-clarification-regarding-dma-control-packet-updates-without-disabling-dma-controller

器件型号:TMS570LC4357

您好!

我们需要使用 DMA 将数据写入 SPI 闪存。 DMA 还可供 ADC 等多个其他 SPI 外设使用。

我们需要更新 DMA 控制数据包、为每次传输配置 SPI 闪存数据写入的源地址和元素数量。

我们还希望在更新控制数据包时保持启用 DMA、因为其他 SPI 外设正在运行(特别是、我们在写入闪存时需要连续采集 ADC)

根据 TRM (SPNU563A)第724页的表20-9在 DMA_EN 位的说明中、我了解应在启用 DMA 控制器之前设置控制数据包。

这样会强制我们在配置控制数据包之前禁用 DMA。

如果可能、我们想找到一种在不禁用 DMA 的情况下更新控制数据包的方法。

您能否告诉用户、在 DMA 仍处于启用状态时、更新 DMA 控制数据包应满足哪些条件?

我当时想先确保 DMA 不忙(MA_REG_BASE_ADDR->GCTRL 和 MASK_DMA_GCTRL_BUS_BUS_BUSY = 0)、然后写入控制数据包(DMA_RAM_REG_BASE_ADDR->PCP [通道])

这是否可行或我们是否还要检查其他条件?

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

    Philippe、您好!

    我们已着手解决您的问题、并将很快提供更新。

    --

    谢谢。此致、
    Jagadish。

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

    Philippe、您好!

    理解是否正确

    您用两个不同的芯片选择对了、将 ADC 和闪存这两个 SPI 从器件连接到了控制器的 SPI 主器件的单个实例吗? 如下所示

    如果出现这种情况、您将如何丢失 ADC 数据、无论如何、您必须禁用 ADC 从器件 CS、并应启用闪存芯片以与串行闪存进行通信。 SPI 从器件无法向主器件发送任何数据、直到主器件提供 CS 和时钟、主器件应向从器件发送一些虚拟数据以从从器件接收数据、 因此、在这种情况下、如果我们禁用 ADC 芯片、选择 ADC 将无法发送任何数据、直到主器件直接完成与闪存器件的通信。 在重新启用 ADC 芯片选择并提供只有时钟的 ADC 采集数据后、SPI 主器件应接收到该数据、如果出现这种情况、则在重新配置控制数据包之前禁用 DMA 不会出现任何问题。

    --

    谢谢。此致、
    Jagadish。

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

    您好 Jagadish:

    我们的闪存和 ADC 位于2条不同的总线上。

    目前、当我们要写入闪存时、我们在配置新的 DMA 传输并重新启用 DMA 之前禁用 DMA。

    唯一的问题是、我们在为闪存写入配置 DMA 传输时会停止 ADC 采集。
    您说得对、最后一次采样没有"丢失"并且仍然处于 ADC 缓冲器中、为读取我们的下一个 SPI 请求做好准备。
    但是、我们需要高频率定期采样、并且希望闪存写入对其他操作没有影响、避免引入采样延迟。

    我们更希望保持启用 DMA。
    我们想知道、在我们配置新数据包以写入闪存时、是否有任何解决方案可以使 DMA 在其他外设上保持运行。


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

    Philippe、您好!

    很抱歉在答复中出现了延误,在印度我们有连续的假期。

    我们的闪存和 ADC 在两条不同的总线上。

    好的、明白了。

    我希望您为闪存和 ADC 使用不同的 DMA 通道。

    如果是这种情况、我会建议执行下面的步骤来 重新配置 通道控制数据包、而不禁用整个 DMA。

    1.首先验证是否为您要重新配置的通道设置了任何通道挂起位。

    2.如果没有设置通道挂起位,则禁用您为该通道使用的触发(如果禁用触发,则不会再进行通道传输)

    3.现在根据您的要求更改控制数据包,而不禁用 DMA。

    4.一旦你完成了改变控制数据包,现在你可以重新启用触发.

    5.重新启用信道后,通信应再次正常。

    --

    谢谢。此致、
    Jagadish。