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.

[参考译文] TMS320F28335:将 McBSP 用作 SPI 操作

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/995797/tms320f28335-using-mcbsp-as-spi-operation

器件型号:TMS320F28335

尊敬的香榭丽舍


我们通过在 F28335上使用时钟停止模式将 McBSP 用作 SPI 操作。 根据我们设置的寄存器值 mcbspB.SPCR1.all= 0x1001h、对于无时钟延迟的时钟停止模式、它意味着位12-11为10。 这意味着时钟在每次数据传输开始时立即启动(CLKSTP= 10b)。

但我们 发现、当 CLKR 为15MHz 时、为了实现正确通信、仍然需要在 RCR2上添加2位数据延迟。
RDATDLY 存在混淆,“在时钟停止模式下,数据延迟值0或2未定义”。
有人知道这种矛盾是什么吗?

如果您有任何建议、请随时告诉我。

非常感谢。

此致、

Janet

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

    Janet、

    根据您对 RDATDLY 的描述、我假设客户使用我们的 McBSP 作为 SPI 主设备;您还能告知 CLKXP 和 CLKRP 位的状态吗?  我想确保我正确理解 TRM 第695页等预期的时序。   

    同样在第696页、我们能否确认客户代码是否遵循从复位释放的程序?  具体而言、在使采样率发生器退出复位以及从复位中释放发送器和接收器后、2个采样率发生器时钟等待。

    我不确定在此模式下 RDATDLY 中的值2会执行什么操作、因为它提到未定义。  客户是否发现这种行为与值1不同?

    最棒的

    Matthew

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

    Matthew、

    我检查了代码是否遵循 用户手册的所有步骤。

    2我使用相同的代码并 将通信速率设置为12.5m Hz。   无论 RDATDLY 中的1还是2,都没有不同的行为。 它都能正常工作。

     我检查 MISO 信号的设置时间是否超过30ns。  

     只要我 将通信速率设置为15M Hz 以上、就必须在 RDATDLY 中设置2才能使通信正常工作、因为我注意到 MISO 信号的设置时间为22ns。

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

    长川

    感谢您提供的额外详细信息、您能否共享12.5MHz 和15MHz 运行的所有 McBSP 寄存器设置?  您还可以共享 LSPCLK 分频器信息吗?  如果更容易在 CCS 中获取寄存器的屏幕截图、则可以。

    我想确保我了解 McBSP 边界上以及时钟生成电路中的时钟速率。

    还请确认 CPU 时钟、它是150MHz 吗?

    12.5MHz 时 RDATDLY 的行为(即1或2时无差异)是我通常所期望的。

    最棒的
    Matthew

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

    所有寄存器设置如下所示

    "确定"表示接收数据正确。

    我确认 CPU 时钟为150MHz。

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

    长川

    感谢您提供信息。  我想尝试以下操作:

    根据 SRGR1寄存器中 CLKGDV 的值、我相信您的低速时钟分频器为1 (LOSPCP = 0)。

    我想更改 LOSPCP = 1、这将使低速时钟= 150/2 = 75MHz。

    然后将 CLKGDV 更改为值5 (对于12.5MHz)和值4 (对于15MHz)、并查看 SPI 模式是否与时钟的这种变化一同工作。

    最棒的

    Matthew

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

    Mattew

    我按照您的建议、通过将   CLKGDV 设为5 (对于12.5MHz)和4 (对于15MHz)的值来进行测试。 所有结果都不正常。

    当我将  CLKGDV 设 为值 9 ( 对于7.5MHz)时、SPI 模式工作正常。

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

    长川

    您能否澄清 C28x 是 SPI 主器件还是从器件?  从时钟限制来看、我们似乎处于从机模式、由于 McBSP 如何对传入时钟进行采样、因此有一个8个 LSPCLK 的从机时钟最小分频器。

    最棒的

    Matthew

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

    Matthew、

    根据我附加的寄存器表、我在设计中将 McBSP 设置为 SPI 主器件。 我知道受控模式中的限制。 但是、没有有关 SPI 主器件的信息。 例如、满足我的应用要求的最大频率。  请帮帮我。

    我做了一个测试、发现一件有趣的事情、就是通信正常(如下面所示)、即使设置时间也可能小于30ns。 根据 SPI 时序限制、它应该有一些 问题。  

    您是否认为  McBSP 作为 SPI 主器件设置时序要求 最小值为30ns。 值是否正确?  

    黄色通道:CLK (15M Hz)

    绿色通道:MISO

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

    长川

    此器件上的最大速度受 GPIO 压摆率限制。  在这种情况下、在器件的所有条件下最高频率为25MHz;但它不是二进制类型限制。  这可能是某些器件、尤其是在标称条件下(例如室温和电源轨> Vmin)、能够提供器件上所见的更好性能。

    我认为这也是一个规格、在该规格中、您还可以看到更快的切换速率、但引脚无法正确转换为 VOL/VOH 规格、速度比我们更快。  如果您同意上述解释、请告诉我。

    无论如何、我认为我可能知道接收问题的根源;正是 GPIO 引脚本身内联的鉴定逻辑。  默认设置是将传入信号与 SYSCLK 同步。  问题是 McBSP 内部也存在此逻辑、因此我们将同步两次、从而导致 Rx 信号相对于 SPICLK 的延迟。

    对于已配置为 RX 的 GPIO、您需要将其 GPAQSEL (或 GPBQSEL)更改为异步= 3 (默认情况下将其设置为0)。  

    请告诉我这是否可以解决问题。

    最棒的

    Matthew

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

    Matthew、

    根据我的测试结果、我认为该器件上的最大速度不仅受 GPIO 压摆率的限制。   问题是 McBSP 内部也存在此逻辑、因此您将同步两次、从而导致 Rx 信号相对于 SPICLK 的延迟。 这是否意味着最大速度应低于12.5MHz?

    对于配置为 RX 的 GPIO23 I、  在我的当前设计中、其 GPAQSEL2必须是 Async = 3。 因此、我们没有解决该问题。

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

    长川

    我将会对此进行研究;我需要另外一天与其他一些 C2000团队成员进行磋商。  只要我们移除 GPIO 上的同步、路径中就不应存在另一个与 CPU 时钟的同步器。

    是否可以确认用于 SPICLK 的 GPIO 也设置为异步、即使这是输出?  虽然在 SPI 主模式下、我不认为返回路径将用于为内部逻辑计时、但我想将其排除为潜在问题。

    最棒的

    Matthew

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

    Matthew、

    我犯了一个错误、我想更正 我所依赖的先前信息。  

    对于配置为 RX 的 GPIO13 I、  其 GPAQSEL1的位(27、26) 设置为0

    对于配置为 CLK 的 GPIO14 I、  其 GPAQSEL1的位(29、28)设置为0

    在我将所有这些设置为 Async = 3后、通信工作正常、问题似乎已得到解决。

    请告诉我相关信息吗?

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

    长川

    感谢您对设置的澄清、很高兴我们能够按文档记录工作。

    由于 SPI 模式下的 McBSP 依赖于其自身 SPICLK 的相对时序、我相信 GPIO 上的默认同步器可能会引入传播延迟、因为它们在1个 CPU 时钟通过之前不会传递传入的数据。  

    由于 SPI 协议依赖于传入数据、这些数据将被锁存在 SPICLK 的下降沿上、因此当我们使用更接近 CPU 时钟速率的 SPI 时钟时、这会将数据推出。

    我还想更正前面有关 SPI 模式下 McBSP 最大速度的陈述。  我曾提到过、根据 GPIO 限制、我们应该能够以25MHz SPI 时钟运行。  

    Janet 指出、在下降 SPI 时钟之前、DX (接收)数据的设置时间要求为30ns。  在25MHz (40ns 周期或20ns 半周期)下无法实现这一点。  这将在16.6MHz 时为全双工 SPI 设置容、而半双工发送可以在25MHz 时运行。  

    您的15MHz 时钟数据速率仍在该范围内、因此我们可以在您所需的速度下实现全双工。

    此器件上的本机 SPI 模块能够实现25MHz 全双工、这是我最后遇到困惑的地方

    最棒的

    Matthew