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.

[参考译文] AM4376:PRU 上的 QSPI 实现

Guru**** 2924430 points

Other Parts Discussed in Thread: TIDA-01555

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/664312/am4376-qspi-implementation-on-pru

器件型号:AM4376
主题中讨论的其他器件:TIDA-01555

大家好、

我们是否能够在 PRU-ICSS 上实现4/8位主器件 QSPI? QSPI 时钟速度是多少?

我找到了以下 TI 参考设计、其中显示了我们的 PRU-ICSS 作为 SPI 主器件: http://www.ti.com/tool/TIDEP0033 我们是否有适用于 QSPI 的器件?

此致、

Akash Patel

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    PRU 专家已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Akash、  

    我不知道有关在 PRU-ICSS 上实施 QSPI 的任何文档。 这可能是可行的-但是、实现和时钟速度在很大程度上取决于用例。 有关 设计 PRU 应用 的 PRU 培训可能有助于概述确定可行性的过程。  

    此致、  

    Nick

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    下面是另一个可能更接近 QSPI 用例的 SPI 设计:TIDA-01555 (6个 SPI 与共享芯片选择和共享时钟并联)

    设计
    www.ti.com/.../TIDA-01555

    PRU 代码
    git.ti.com/.../PRU_ADS8688_Interface.asm。

    设计指南中包含了丰富的信息
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Nick、

    您能帮我了解如何计算不同 ADC 数量的最大时钟速度吗? 例如、4个 ADC 的最大时钟速度为何为14.29MHz?

    这来自您刚才引用的 TI 设计指南中的表2 (第9页): www.ti.com/.../tidudn4.pdf

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

    您好、Akash、

    对于所有读者、请 注意、此演练只是一个示例。 客户负责设计自己的实现方案。 TI 既不设计  定制用例、也不编写定制代码。   

    PRU 时钟为200MHz、因此10MHz SPI 时钟需要每个 SPI 时钟20个 PRU 时钟、11.11MHz SPI 时钟需要每个 SPI 时钟18个 PRU 时钟等 该代码是针对10MHz SPI 时钟编写的。 如果使用的 SPI 更少、每个 CONFIG_CYCLE / READ_CYCLE 将调用 CONFIG_BIT 的次数更少、从而实现更少的 PRU 时钟周期和更快的 SPI 时钟。

    SPI 实现设计人员决定使用一个 PRU 来控制接口。 他们决定要在 PRU 中"打包"和"解压缩" SPI 值、而不是在其他地方进行处理-打包/解压缩是在 CONFIG_CYCLE / READ_CYCLE 中完成的。 其他注意事项:SPI 时钟的高/低脉冲宽度需要对称、它们希望用于读取的周期数与用于写入的周期数相匹配。

    我在下面的系统设计人员 PRU 代码片段中添加了注释、以解释时序。

    CONFIG_CYCLE 15;在每个 SPI 上串行发送16个配置位(eacg CONFIG_CYCLE 发送一个位)
    CONFIG_CYCLE 14;每个 SPI 时钟周期发送一个位
    CONFIG_CYCLE 13; 因此1 CONFIG_CYCLE = 20 PRU CLKS
    CONFIG_CYCLE 12
    CONFIG_CYCLE 11
    CONFIG_CYCLE 10
    CONFIG_CYCLE 9
    CONFIG_CYCLE 8
    CONFIG_CYCLE 7
    CONFIG_CYCLE 6
    CONFIG_CYCLE
    4
    CONFIG_CYCLE 3
    CONFIG_CYCLE
    1
    CONFIG_CYCLE 0
    nop;每个 nop 1个 PRU clk
    nop
    nop nop nop nop
    nop nop nop
    nop nop nop nop
    
    nop
    nop
    
    clock_high;这需要1个 PRU clk
    nop
    nop
    nop
    nop nop nop nop
    
    nop
    
    nop nop;我们将这个 PRU clk 18称为20 clk 周期
    ;从 ADC 读取数据,并将其放入结果寄存器,一次一个周期
    READ_CYCLE 15;从每个 SPI
    READ_CYCLE 14读取16位; 1 READ_CYCLE = 20 PRU CLKS
    READ_CYCLE 13
    READ_CYCLE 12
    READ_CYCLE 11
    READ_CYCLE 10
    READ_CYCLE 9
    READ_CYCLE 8
    READ_CYCLE 7
    READ_CYCLE
    6 READ_CYCLE 5
    
    READ_CYCLE 3
    READ_CYCLE 2
    READ_CYCLE 1
    READ_CYCLE 0
    
    CONFIG_CYCLE.MACRO BIT
    MOVR8、R9;1 PRU_CONFIG_CONFIG 1
    、ADCLK_1、ADCLK_CONFIG 1、ADCLK_1、ADCLK_1 2 PRU CLKS
    CONFIG_BIT ADC2_CONFIG_REG、BIT、MOSI2_Pin
    CONFIG_BIT ADC3_CONFIG_REG、BIT、MOSI3_Pin
    CONFIG_BIT ADC4_CONFIG_REG、 bit、mosi4_pin
    clock_high;这是第10个 PRU clk
    CONFIG_BIT adc5_config_reg、bit、mosi5_pin
    CONFIG_bit adc6_CONFIG_reg、bit、mosi6_pin
    movr30、 R8;1 PRU clk
    nop;可以删除这两个顶部的 NOP 以获得18 PRU CLKS = 11.11MHz SPI clk
    nop;请参阅上面
    的 nop
    nop;SPI 在将 clk 切换为低电平之前至少需要1 nOP,以满足设置
    时钟低电平; 这是 CONFIG_CYCLE
    .endm
    
    READ_CYCLE.macro bit
    mov r11、R31中的第20个 PRU 时钟;1个 PRU 时钟(clk 19 of 20)
    clock_low;1个 PRU 时钟(CLK 20 of 20)
    read_bit ADC1_result_reg、bit、miso1_pin; 2 PRU CLKS (clk 1 of 20)
    read_bit ADC2_result_reg、bit、miso2_pin
    read_bit ADC3_result_reg、bit、miso3_pin
    read_bit adc4_result_reg、 BIT、MISO 4_Pin
    NOP
    CLOCK_HIGH;(PRU clk 10 of 20)
    READ_BIT ADC5_RESULT_REG、BIT、MISO 5_Pin
    READ_BIT ADC6_RESULT_REG、BIT、MISO 6_Pin
    NOP; 这两个 NOP 可被移除以获得18 PRU CLKS/cycle = 11.11MHz
    nop;请参阅上面
    的 nop
    nop;(PRU clk 18 of 20)
    .endm 

    不同的代码实现可能 产生不同的最大时钟速率。

    此致、

    Nick