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.

[参考译文] AM625:SPI 位拆裂数据到 DDR

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1590057/am625-spi-bit-bangned-data-to-ddr

器件型号: AM625

您好:

我在 PRU 中实现了一个 SPI (bit-banged) 从协议。 SPI 主器件正在(连续)流式传输每个芯片选择 2k 以上字节的数据、速度@ 12MHz。 PRU 固件将数据直接存储在 DDR 中。

代码可以使用、但很少有 PRU 错过 SPI 时序(我有一个垃圾数据)的情况、这是因为将数据传输到 DDR 会减慢循环速度。

我尝试将数据放入共享 MEM 中、工作正常。 但是、共享存储器只有 32k、不足以处理大量数据。

PRU 已经在运行@ 333MHz 的时钟速度、我想知道您是否可以提供任何其他信息或想法、以便我可以更快地在 DDR 中写入数据?

 

此致、

 

John Tobias

 

 

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

    已解决问题。

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

    您好、John:

    很高兴听到你能够解锁自己。 请随时回复后续问题、或根据需要为新主题创建新主题主题。

    对于未来的读者,以下是一些想法发生在我身上:

    使用 SPI 等协议时、您执行特定计算的时间“包络“受所实现接口时钟速度的限制。 例如、OpenPRU 存储库中此 PRU SPI 示例中的不同宏可以用于不同的最大接口频率、因为它们采用不同数量的 PRU 汇编指令来实现: https://github.com/TexasInstruments/open-pru/tree/main/examples/spi_loopback

    SBBO/SBCO

    SBBO/SBCO 指令非常高效(一般而言,每个时钟周期一个 32 位字。有关更多详细信息、请参阅  【常见问题解答】PRU:如何计算读取和写入延迟? )。  

    SBBO 确实需要一条汇编指令来将地址加载到另一个寄存器中、因此如果您的代码执行如下操作:
    载入地址
    SBBO 32 位
    加载地址+ 0x4
    SBBO 32 位
    等等

    您可以通过执行单个长 SBBO 在 31 个 PRU 时钟以上写入多达 124 字节的数据、并消除所有这些不需要的加载指令、使其更加高效:
    载入地址
    SBBO 高达 124 字节/992 位

    使用 SBCO、您无需使用汇编指令来加载地址。

    DMA  

    我还没有机会充分利用 PRU DMA、但我计划在接下来的几个月内、在完成向 OpenPRU 存储库中添加 AM62x 并发布第一版 AM62x PRU Academy 后的某个时间开始深入研究。

    据我所知、DMA 不会以比 SBBO/SBCO 更快的速度移动数据、但会在传输期间减轻实际的汇编指令负担。

    因此、如果您尝试传输 2k 个字节、我预计将采用 SBBO
    2048 字节= 512 个 32 位字= 17 个 SBBO 命令、每个命令包含 31 个 32 位字= 17 条加载指令+ 512 个时钟(写入 512 个 32 位字= 529 个 PRU 时钟)

    但我希望管理 DMA 所需的 PRU 时钟要少得多。

    此致、

    Nick