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.

[参考译文] TMS320F28375D:如何继续为 SPI 时钟供电(SPICLK)

Guru**** 2411990 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1500403/tms320f28375d-how-to-continue-supplying-the-spi-clock-spiclk

器件型号:TMS320F28375D

工具/软件:

尊敬的专家:

问:是否有功能可以在向 SPI 闪存发送命令和地址数据后继续驱动 CLK?
在 SpiaRegs.SPITXBUF 寄存器中存储命令和地址数据后、我们会在 SpiaRegs.SPITXBUF 寄存器和电源 CLK 中存储3个字节的0x00数据、但是否有任何其他方法或函数?

我的客户使用 F28375D 的 SPI 与外部闪存进行通信。
读取存储器中存储的数据时、提供 CLK、同时将命令和地址数据从 DSP 发送到存储器。 但是、一旦传输完成、来自 DSP 的 CLK 电源就会停止。
当 CLK 电源停止时、会发生无法从存储器接收数据的事件、这是一个问题。

此致、
正常

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

    您好:

    首先、  我对所描述的事件感到担忧。 这听起来与外设的典型行为不同。 请说明在 CLK 停止后观察到了哪些不良行为。  理想情况下、在继续进行下面的建议之前、先执行此操作、我的建议绝对是一种非理想的解决方法。

    注:由于篇幅过长、可能细节过长、建议移至二级员额。 道歉。

    此致、
    Jason Osborn

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

    (续)

    、无法完全从 SPI 中实现这一点。 我最初想到使用 CLB、因为这是一个非常简单的过程、但遗憾的是、所指示的器件型号没有 CLB。 复制此行为的另一种方法是改用 ePWM 输出:

    1. 验证用于 SPI CLK 的引脚也具有可用的 ePWM A 或 B 输出。 例如、如果 GPIO18用于 SPICLKA、器件 TRM 显示该引脚也可用于 EPWM10A 输出信号。

    2.  使用 以下设置来设置相关的 ePWM 输出:
      1. Xbar 设置
        1. 将 INPUTXBAR 输入设置为用于 SPISTE 的 GPIO。 该输入必须是 INPUTXBAR1-6中的任何一个
        2. 将 EPWMXBAR 输入设置为所选 INPUTXBAR。

      2. ePWM 基本设置
        1. 跳闸区子模块
          1. 设置一次性跳闸以强制 GPIO 处于低电平
          2. 在 ePWM 配置期间在软件中强制进行一次性跳闸、以确保 GPIO 保持在已知状态
        2. 时基子模块的示例
          1. 向上/向下双向计数模式(对于最简单的配置)  
          2. TBPRD -> PWM 频率= SPI CLK 频率、基于 LSPCLK 和波特率
          3. 启用 TBCTL[PHSEN]以允许同步输入信号传播
          4. 设置 TBCTL[PHSDIR]= 1b 以在同步后进行计数
        3. 动作限定器子模块  
          1. 开启 CNT=ZRO
          2. 在 CNT=PRD 时为 DOWN
        4. AQ 子模块同步设置(其中"x"为 ePWMA 或 ePWMB、具体取决于所选引脚)
          1. AQCTL[SHDWAQxMODE]= 1b
          2. AQCTL[LDAQxSYNC]= 10b
            1. 启用影子加载

      3. 通过 EPWM 设置同步 SPI 和 ePWM (其中"x"为 ePWMA 或 ePWMB、具体取决于所选引脚)
        1. 数字比较子模块
          1. 将之前选择的 EPWMXBAR 信号设置为 DCx 的输入
            1. DCTRIPSEL[DCxHCOMPSEL]=所选的 EPWM XBAR 跳闸信号
              1. 根据 prev、将 DCxH 设置为 SPISTE 的触发器关闭。 Xbar 设置
            2. TZDCSEL[DCxEVT1]= 000b
              1. 当 DCxH 变为低电平时、会生成 DCxEVT1跳闸信号
            3. DCxCTL[EVT1SRCSEL]= 0b
            4. DCxCTL[EVT1FRCSYNCSEL]= 1b  
              1. 输入信号上没有滤波器
              2. ASYNC 信号

          2. 启用 DCxEVT1同步信号生成
            1. DCxCTL[EVT1SYNCE]= 1b


          3. 明确禁用 DCx 强制跳闸输出
            1. TZCTL[DCxEVT1]= 11b ->无操作
            2. TZCTL[DCxEVT2]= 11b ->无操作
            3. TZCTLDCx = 0xFFF ->禁用所有操作
    3. 清除 ePWM 中的一次性跳闸。  如果所有配置都正确完成、则在设置 SPISTE 时、ePWM CLK 将自动同步。
      1. 如果根据 SPI 设置需要延迟、请将 TBCTL[PHSDIR]更改为0b、并将 TBPHS 寄存器设置为 ePWM 时钟周期内所需的延迟。 延迟必须< TBPRD。

    4. 警告:  这将无限期持续下去。
      1. 要将其关闭: (其中"x"指 ePWMA 或 ePWMB、具体取决于所选引脚)
        1. 设置 AQCTLx = 0x555
          1. 设置 AQ 以强制输出为低电平
        2. TBCTL[SWFSYNC]= 1b
          1. 强制使用一次性同步脉冲
        3. 设置 AQCTLx = UP (在 CNT=ZRO 时)、设置 DOWN (在 CNT=PRD 时)

      2. 这会强制 ePWM 输出为低电平、直到出现下一个 SPISTE 脉冲。 在该脉冲之后、输出将恢复。

    如果这是一个很大的道歉-我喜欢彻底。  本质上、这会在设置 SPISTE 时启动 ePWM 时钟、此时该时钟无限期持续下去、或者直到用户通过使用影子加载机制临时配置动作限定器来关闭该时钟。

    此致、
    Jason Osborn

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

    您好、Jason Osborn、

    很抱歉晚才回复。 感谢您的支持。

    客户决定使用一种方法将虚拟数据(0x00等)存储在 SPITXBUF 寄存器中、来提供 CLK 作为应对措施。

    关于您的提议、他们认为使用 ePWM 功能而不是 SPI 的 SPICLK 会很难设计和管理。
    因此、如果当前的对策不是问题、它们将继续使用此方法。

    此致、
    正常

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

    好的。 请在有机会时将答案标记为"已解决"。