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.

[参考译文] AM2634-Q1:AM2634 + EDMA3 + MCSPI + SPI-ADC 系统性能问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1209787/am2634-q1-am2634-edma3-mcspi-spi-adc-system-performance-questions

器件型号:AM2634-Q1
主题中讨论的其他器件:AM2634ADS7038-Q1、ADS7038

您好!

对于我们的应用、除了 AM2634上提供的模拟输入通道外、我们还需要额外的模拟输入通道。 主要是由于系统中的电压电平不同、应使用具有 SPI 接口的外部多通道 ADC。 实际上 ADS7038-Q1是我们的首选解决方案。 但是、我不确定所选的解决方案是否是最佳解决方案、因为我们确实对 SPI-ADC 使用了所谓的"动态"通道选择模式。 要做到这一点,我们需要发出一个传输间隔(!) 1.25us 时、写入传输我们要接下来转换的下一个通道。 基本来说、它是有效的。 不过、我们打算将 EDMA 用于许多其他请求、我有点不确定该系统解决方案是否能够处理片上系统中的所有数据传输、 尽管这是一个多核系统、但具有很多资源和功能。

除了与外部 SPI-ADC 之间的1.25us 传输量外、我们还需要每5us 进行一次 DMA 传输

- FSI 信道
-数据从实时控制系统传输到系统内存等

总之、我们将需要(没有任何网络 DMA) 5..7个通道、其中两个通道每1.25微秒、其余通道每5微秒。 现在、在提出问题之前、我想展示如何为外部 SPI-ADC 完成此操作。

显示了 SoC 上配置为处理1.25us 传输的"组件"。 上图中没有显示用于相互隔离不同电压电平所需的数字隔离器。 AM2634处于电压电平"A"上、外部 SPI-ADC 处于电压电平"B"上。 在现实生活中、它的外观如下:

在这种情况下应使用 ADS7038的所谓"动态"模式。 不过、可能存在更好的方法。 看起来每次转换都需要片选的上升沿。 换句话说,我不能发出一组模拟输入通道的突发转换与一个引脚信号事件等...

-"焦点"每1.25us 显示一次来自 EPWM0单元的触发(浅蓝色)
-从 SPI0到外部 SPI-ADC 的片选(品红色)
-时钟。 在此配置中、时钟速度为25MHz、每次传输16个时钟(绿色)。

(此示波器屏幕截图中未显示数据线路 SDI 和 SDO)

由于需要4个以上的外部通道、因此使用顺序不同的序列来选择所需的所有通道。 15us 后、重复此序列。 描述该序列顺序的表位于 MAIN 存储器中、可由 DMA 读取。 系统应配置为无限运行。 它应每1.25和5微秒传输数据、每5微秒处理和过滤数据。 在此级别的处理应主要以接近于使用外部 FPGA 情况下的"无抖动"性能运行、以保证在此数据收集和预处理级别上无抖动运行。

现在问题(抱歉很多问题...):

问题1:此系统方法能否保证这一点? 我知道这个问题有点模棱两可。 但是、我不知道如何使用该系统中涉及的 IP (MCSPI+RTCS+FSI+PRU)测量 EDMA3性能、而没有实施整个应用、这是我目前所无法实现的。 我对如何衡量这一点或使潜在问题可见的任何想法都非常受欢迎。 请告诉我。

Q2:在 EPWM0事件(1.25us 触发)之后、需要超过300ns 的时间、直到发生芯片选择的下降沿。 DMA 需要多少时间? 这主要是因为 DMA 处于"低电平"状态、还是 MCSPI-IP 配置的根本原因? 在此环境中、DMA 正在从系统存储器中的表中读取一个字(16位)、并将这个一个字写入 MCSPI 组件的输出寄存器/缓冲器、以选择下一步要转换的通道。 据我所知、DMA 的系统时钟是200 MHz。 对吧?

Q3:现在在 MCSPI0-IP 上执行写入和数据传输操作来选择外部 SPI-ADC 并从中收集数据、是否有更好的方法来定期发出写入和数据传输操作? 我使用 DMA、 我找不到任何其他选项、例如直接使用计时器或 ePWM 单元。 这就是我使用一个 DMA 通道的原因、也是因为我使用了此 ADC 的"动态"模式。 但是、这并非必须要做的事情。

Q4:在系统传输性能方面、有没有比 MCSPI 接口更好的方法将外部多通道 ADC 连接到 AM2634?

Q5:在每个字之后、必须发出 DMA 读取请求(从外部 SPI-ADC 接收到一个数据字)是否正确? 需要通过读取请求将接收到的值存储到 PRU0的数据存储器中以进行预处理。 我无法突发存储数据包、但必须传输每个字? 需要多长时间? 或者如何让所需的时间可见? 根据我的理解、这里没有选项可以将 DMA 作为内部系统上的主器件传输到 GPIO 引脚的时间、从而显示占用的总线所有者运输时间。

Q6:不能同时在 MCSPI 内对同一通道使用 DMA 和 FIFO 这一说法是否正确? 在这里、我仅使用 MCSPI 的通道0。 我试图在 MCSPI 上启用和配置接收 FIFO ,但这样做我就不会再得到任何 DMA 读取请求...

希望问题不要太多。 总之、感谢大家的分享、希望如果系统性能在所有情况下都足够好、或者如果其他概念可能更适合此类应用、我可以得到一些更好的"估算"的想法。

Br
Markus

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

    尊敬的 Markus:

    首先、我需要澄清您系统中的一些事项:

    1.您说每个1.25us 需要切换 ADC 通道、SPI-ADC 中有8个通道、因此一个周期需要8x1.25us = 10us。 我不明白15us 来自哪里。

    2.您说过有另一个 DMA 用于每5us 在 FSI 上传输一次数据、还有一个 DMA 用于每5us 在实时控制系统与系统存储器之间传输数据。 我假设实时控制系统是 R5F 内核、对吧?

    3. PRU0的作用是什么? 它是否处理 SPI-ADC 数据?

    4.在您的系统图中、EDMA3由来自 EPWM0的事件以及来自 SPI-ADC 的读取请求触发。 它是如何设置的?

    问题1:看起来您只有少数事件1.25us 和5us、因此 AM263x 应该能够正常处理您的系统。

    问题2:这实际上取决于您如何从 EPWM0触发 McSPI TX 的 EDMA。 您可能需要检查 13.1.3.4.6.5第一个 MCSPI 字延迟的第一个字延迟。

    Q3:另一个替代方法是使用 PRU 来触发它。

    Q4: 另一个替代方法是使用 PRU 来触发它。 我不确定哪种方式更好。、但如果您将使用 PRU 进一步处理 ADC 数据、那么使用 PRU 可能是更好的方法。

    Q5:鉴于 ADS7038-Q1的工作方式、这似乎是唯一的方法。 不过、这不应花费很长时间、因为如果您为 McSPI 正确设置了 EDA3、那么它应该由硬件触发。 不涉及软件。

    Q6:根据 TRM 13.1.3.5.2.1.8使用 FIFO 的传输程序、可以同时使用 FIFO 和 DMA。

    此致、

    Ming

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

    尊敬的 Ming:

    感谢您的答复。 我尽量回答您的问题、以便更好地了解情况。

    1. 您说过、每1.25us 需要切换 ADC 通道、SPI-ADC 中有8个通道、因此一个周期需要8x1.25us = 10us。 我不明白15us 来自哪里。

    很抱歉没有更具描述性。 比如说对于低级预处理的基本内部主节拍为5 usec、又称为200 KHz。 为此、我们确实需要在另一个电压电位上施加一些额外的外部模拟信号。 这就是我们添加外部 SPI-ADC -电隔离式的原因。 并非每隔5us 就需要连接到该外部 SPI-ADC 的所有输入信号。 其中一些通道可以以较低的速率采样。 我们确实确定了6个输入信号的分配以及每3x5usec 或15 usec 重复一次的采集序列。 SPI-ADC 上的模拟输入采样如下所示:

    上述采样方案说明、对于应用、我们确实需要每5usec 执行一次'Ud'和'Udbot'、每15usec 执行一次相电压"UphsR、S、T"、我们每5usec 采样一次放电电流... 为了实现这一点、为外部 SPI-ADC 选择了1.25us 的采样率。 可能还有其他通道序列。 不过、我们希望其在主节拍为5usec 时进行相位对齐、因为我们使用 AM2634的5个片上 ADC 直接测量所有其他模拟输入信号。 这就是所有它来播放4x12,5 --> 5 usec。

    2. 您说过、还有另一个 DMA 用于每5us 在 FSI 上传输一次数据、还有一个 DMA 用于每5us 在实时控制系统之间向系统存储器传输一次数据。 我假设实时控制系统是 R5F 内核、对吗?

    抱歉 AM2634的 TRM 拼写错误、将其命名为"实时控制子系统"(CONTROLSS)。 该子系统的一部分是片上 ADC 和诸如 ePWM 的触发源。 因此、我在这里不谈 R5F ARM 内核。 我是指能够每5usec 测量一次数据并将其导入系统的外设硬件资源、以便在 PRU 上进行预处理。 PRU 的作用主要是进行滤波。 检查和过滤的值正使用 FSI 分配到一个外部非芯片和更高级别的 R5F CPU、在这个 CPU 上、将在一个很低的控制环路周期内执行一个更加传统的基于 Simulink 或类似电路的控制环路系统。。。

    3. PRU0的作用是什么? 它是否处理 SPI-ADC 数据?

    可以!

    4. 在您的系统图中、EDMA3由 EPWM0事件以及 SPI-ADC 的读取请求触发。 如何设置?

    如果我希望1.25usec 触发事件与用于 CONTROSS 内采样的5usec 事件相位对齐、我需要使用 EPWM、因此我需要用于1.25us 的 EPWM 来触发一个 DMA 通道、该通道从存储器中的表中写入正确的控制字 外部 SPI-ADC。 在我的理解下,这是唯一的办法。 我知道 MCSPI 也有一个 DMA 写入请求选项。 不过、如何将此信号与预处理控制环路的5usec 主周期相位对齐? 使用两个 ePWM、可以非常轻松且精确地实现。

    q1:看起来您只有几个事件1.25us 和5us、因此 AM263x 应该能够正常处理您的系统。

    好的。 谢谢。

    Q2:这实际上取决于您是如何从 EPWM0触发 McSPI TX 的 EMDA 的。 您可能需要检查 13.1.3.4.6.5第一个 MCSPI 字延迟的第一个字延迟。[/引号]

    感谢您的提问。 我已经使用我当前的测试应用程序对其进行了检查。 该延迟被设置为最小值。 因此、~300ns 延迟必须有另一个根本原因。

    Q3:另一种选择是使用 PRU 来触发它。

    将与我的客户讨论此选项...

    Q4: 另一种选择是使用 PRU 来触发它。 我不确定哪种方式更好。、但如果您将使用 PRU 进一步处理 ADC 数据、那么使用 PRU 可能是更好的方法

    好的。 我们将进行研究。

    Q5:鉴于 ADS7038-Q1的 工作方式、它似乎是唯一的方法。 不过、这不应花费很长时间、因为如果您为 McSPI 正确设置了 EDA3、那么它应该由硬件触发。 不涉及软件。

    是的、设置完成后、采样程序在没有 CPU 的情况下运行。 正确。 生成样本程序是为了检查内部带宽是否足够高以获得所有需要的数据并每5us (1.25us)传输一次。 仍然需要更好地了解 EDMA 处理触发器和实际执行数据移动所需的时间量。

    例如、MCSPI 上看到的300ns、是来自 EDMA 的触发事件预处理、还是这只是 MCSPI 内部逻辑? 如果这是最后一个根本原因、那么我相信 EDMA 在移动一个字之前、不会花很多时间来对触发事件进行预处理和后处理。 换句话说、EDMA 在移动数据之前不会产生大量所需的时间开销。 在早期的体系结构中,单字数据移动操作不是很有效,因为这样做的开销很大。 对于较大的数据块、这是一件轻而易举的事。 这也是我更希望使用 MCSPI 中的接收 FIFO 来收集示例4个字、然后从 MCSPI 发出单个 DMARdRequest 来在一次 DMA 事务中移动 FIFO 中保存的4个字的原因之一。 EDMA 仍需要读取参数块、对其进行处理并将更改后的块写回存储器、包括更新其所有事件寄存器等 我不知道有多少这一切并行发生。

    Q6:根据 TRM 13.1.3.5.2.1.8使用 FIFO 的传输程序,可以同时使用 FIFO 和 DMA。

    好的、谢谢。 我会进行深入研究。 上次我尝试了,我没有工作。

    Br
    Markus

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

    尊敬的 Markus:

    非常感谢您的详细回答。 现在它更加清晰。

    "我仍然需要更好地了解 EDMA 处理触发器和真正执行数据移动所需的时间量。"

    我 现在还没有明确的答案。 我会在下周一与 IP 所有者联系、并在下周早些时候与您联系。

    此致、

    Ming