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.

[参考译文] AM6422:通过 SPI 读取 ADC

Guru**** 2535150 points
Other Parts Discussed in Thread: AM6422, SYSCONFIG

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1564639/am6422-adc-reading-via-spi

主题:AM6422SysConfig 中讨论的其他器件

我写这封信是为了征求您的专业知识  、以解决客户 同时在 AM6422 上从两个 ADC 读取数据时遇到的一个具有挑战性的问题。 请参阅以下 电子邮件:

我们已经实现了一种解决方案、使用两个 SPI 外设 (MCSPI0 和 MCSPI1) 与两个 ADS7038Q ADC 并联进行通信、但事实证明、该实现并不可靠。

我们当前的方法

预期的逻辑是使用主从时钟方案:
  1. MCSPI0 配置为时钟主器件、从而为两个器件生成 SPI 时钟。
  2. MCSPI1 设置为“仅数据“、旨在使用来自 MCSPI0 的时钟。
  3. 单个 GPIO 引脚 用作两个 ADC 的共享芯片选择 (CS)。
下面是我们原理图中的硬件连接视图:
我们的交易顺序如下:
  1. 将共享 GPIO CS 引脚拉至低电平。
  2. 然后发起这两个MCSPI_transfer 呼叫。 为了管理时序、我们使用 SysConfig 工具中的 Init 延迟参数、特别是在开始从外设 (MCSPI1) 传输时(在主器件 (MCSPI0) 开始生成时钟之前)。
  3. 我们等待使用信标完成两次传输。
  4. 最后、我们将共享 GPIO CS 引脚拉至高电平。
问题:数据不一致和不可靠
我们试图解决的核心挑战是 通过软件可靠地控制此共享时钟和共享 CS 架构。
尽管采用该设置、但通信不稳定。 即使在调优初始延迟并使用不同的 SPI 时钟频率进行实验时、我们也会始终在每个读取周期中从 ADC 获得不同或损坏的值。
似乎即使使用Init delay、我们也无法克服从软件启动两个外设操作的固有计时抖动。 轻微的不可预测延迟足以导致数据不一致和不可靠。
鉴于这些同步挑战、我希望您能提供一些建议。

会上提出了一种替代解决方案、该解决方案涉及使用 PRU 直接对 SPI 协议进行“位移“。 该方法将提供解决我们的同步问题所需的确定性、周期精确的时序。
但是、这个解决方案对于我们当前的硬件设计来说是不可行的。 PRU 位拆裂方法要求 CLK、MOSI 和 CS 线路必须作为通用 I/O (GPIO) 进行控制。 我们的电路板不对这些信号使用 GPIO;它们直接连接到处理器上的专用 MCSPI 外设引脚。 由于这种硬件限制、如果没有电路板版本、我们无法实现这种基于 PRU 的解决方案。
您是否知道 AM6422 有一种更可靠的方法来同时触发两次 SPI 传输?
例如、我们能否使用内部事件触发器或另一个外设功能来确保两个 MCSPI 模块以完美的锁步启动?
您可以推荐的任何见解或替代方法都将大有帮助。
感谢您抽出宝贵的时间给予我们大力支持。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、Ricardo、我把这个问题重新分配给我们的 MCU+RTOS McSPI/SPI 专家、因为我认为这是客户正在使用的 SDK。 如果我错了、请纠正我。 我还会让我们的硬件专家回答您的问题:“我们可以使用 内部事件触发器还是另一个外设功能来确保两个 MCSPI 模块都以完美的锁步启动吗?“

    在此期间、很少有问题:

    - 客户如何触发 两个 SPI 外设 (MCSPI0 和 MCSPI1)  的 MCSPI_TRANSFOR()?  

    -他们使用的是 DMA 吗?

    -MCSPI_transfer calls () 如何在两个外设之间同步? 任何 SemaphoreP_POST() 或任何其他屏障?

    谢谢您、

    Paula

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

    尊敬的 Riccardo:

    我首先想到的是 — 您是否仅使用 SPI0 <->ADC0 通信? 即、通过将引脚多路复用器保留为默认值 (GPIO) 来断开 SPI1。 使用 SPI0 进行测试、例如它是系统中唯一的 SPI + ADC。  

    此外、还请确保 D0 为输出、D1 为输入、因为我知道它们可以在 SPI 寄存器中配置、这可能会丢失。

    谢谢、

    Stan

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

    您好 Stanislav、Paula、  
    请在下面找到 他们的答复:

    我已经尝试了通信 SPI0 <->ADC0、它可以正常工作。
    关于您的问题:
    1.如何为两个外设触发 MCSPI_TRANSFER()
    双 SPI 传输按如下方式触发:
    2. DMA 使用
    、我未使用 DMA。 该实现在中断模式下使用基于回调的传输:
    3、同步机制
    同步使用带回调函数的二进制信标:
    信标基础设施:
    回调函数后信标:
    主线程等待以下两个条件:
    摘要
    • 传输触发: 顺序 MCSPI_TRANSFER () 调用 (SPI0、然后是 SPI1)
    • dma:否 — 使用中断驱动的回调模式  
    • 同步: 在回调中使用 SemaphoreP_post() 和 SemaphoreP_pend () 来等待两个完成的二进制信标
    您可以在此处找到我使用的配置:

    对于 SPI0:
    对于 SPI1:
    若要控制共享 CS、我正在使用 GPIO ADC0_CS
     SPI1 的时钟和 CS 声明为 GPIO 输入:
    非常感谢您的帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Riccardo、感谢您提供的信息、我们将查看它并返回给您

    Paula

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

    尊敬的 Riccardo:

    我可以看到 SPI1 的以下差异:

    1. SPI1 应是从器件但配置为主器件(控制器)

    2. SPI1 应是时钟消耗者、但未选择时钟引脚

    2.a) 我不明白时钟是 GPIO 的意思。 从模式下的 SPI 需要在其自身的时钟输入上设置时钟。 无法通过 GPIO 进行时钟。

    SPI1 模块处于 4 引脚模式、但 CS 通过 GPIO 进行处理。  

    和 SPI0:

    SPI0 模块处于 4 引脚模式、但 CS 通过 GPIO 进行处理。  

    总的来说、SPI0 + SPI1 配置非常不寻常、很难判断它是否能正常运行。 我个人认为、使用各自的时钟将 SPI0 和 SPI1 连接到各自的 ADC (CS 可能保持 1 个 GPIO)、这在时序方面会产生非常相似的结果、但在设置方面会更加可靠。 如我所见、它们使用 2MHz 进行测试、但 ADC 支持与 60MHz 一样快、在这些速度下、在进行 PCB 布线时需要特别注意时钟和数据信号。 将时钟路由到多个消费者会是一项挑战。

    我的意思是、如果尚未在当前测试并联的另一板上测试 (SPI0 = SPI1 =具有自己时钟的主器件、连接到 ADC) 是值得的。

    此致、

    Stan

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

    您好、

    以下是基于上述说明的我的观察:

    1. 实现与 2 个 ADC 并行通信的初步方法是使用两个 MCSPI 控制器并同时与 ADC1 和 ADC2 通信。 那么为什么 MCSPI1 和 MCSPI0 分别用作控制器和从器件。
    2. 如果将 MCSPI1 用作外设并预计从您的用例中的主器件获取时钟、则应将 MCSPI1 配置为外设。
    3. 要将 MCSPI 配置为一般外设并将 MCSPI1 配置为外设、请参阅此详细常见问题  解答:【常见问题解答】SK-AM64B:MCSPI 集成指南 
    4. 此外、请参阅以下代码(来自 e2e 响应) 、其中演示了外设模式: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1305146/sk-am64b-r5f-spi-dma-in-mcspi_ms_mode_peripheral/5064289#5064289

    此致、

    Vaibhav