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:针对 SPI 速度问题的 McBSP 配置

Guru**** 2535450 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1536657/tms320f28335-mcbsp-configuration-for-spi-speed-issue

器件型号:TMS320F28335


工具/软件:

您好、

  美好的一天!

  有客户的问题、您能提供帮助吗? 非常感谢。

   将 McBSP 配置为 SPI 后、我想询问速度问题。

   我观察到从数据写入 DXR1 到使用示波器实际在总线上发送数据之间的延迟约为 550ns。

   我无法在手册中找到导致此延迟的具体信息。

   示波器图像如下所示:蓝线的第一个下降沿表示数据写入 DXR1 的时刻、粉色线为 MCLKXA、黄线为 MDXA、波特率配置为 9.425MHz。

   

  我主要想了解:1) 什么原因导致了延迟? 2) 是否可以减少延迟以提高带宽利用率?

   

Uint16 McbspBSpiTxRx8Bit(Uint16 txByte)
{
Uint16 rxByte = 0U;
Uint16 i = 0U;

while((gMcbspbRegs.SPCR2.bit.XRDY == 0U) && (i < MCBSP_TIMEOUT_LOOP_CTRL_200))
{
DELAY_US(MCBSP_DELAY_TIME_100NS);
i++;
}
gMcbspbRegs.DXR1.all = txByte & 0xFFU; /* send data */

i = 0U;
while((gMcbspbRegs.SPCR1.bit.RRDY == 0U) && (i < MCBSP_TIMEOUT_LOOP_CTRL_200))
{
DELAY_US(MCBSP_DELAY_TIME_100NS);
i++;
}
rxByte = gMcbspbRegs.DRR1.all & 0xFFU; /* receive data */

return rxByte;
}

       MCBSP配置代码如下:

Uint16 McbspConfig(volatile struct mcbsp_regs_t *mcbsp, const TY_SPI_CONFIG *config)
{
mcbsp->SPCR2.all = 0x0000U; /* Reset frame synchronization generator, sample rate generator, transmitter */
mcbsp->SPCR2.bit.FREE = 1U; /* debug, when a breakpoint is encountered, the transfer clock continues to run */
mcbsp->SPCR1.all = 0x0000U; /* Reset receiver, right set word, turn off digital loopback */

mcbsp->PCR.all = 0x0F08U; /* Configure as master */
mcbsp->RCR2.bit.RDATDLY = 1U; /* The data receiving delay bit is set to 1 on the master */
mcbsp->XCR2.bit.XDATDLY = 1U; /* The delay bit for sending data is set to 1 on the master */

mcbsp->SPCR1.bit.DXENA = 1U;

mcbsp->SPCR1.bit.CLKSTP = ((0xA >> 2U)& 0x03U); /* Get the second or third bit */
mcbsp->PCR.bit.CLKXP = ((0xA >> 1U) & 0x01U); /* Get the first bit */
mcbsp->PCR.bit.CLKRP = (0xA & 0x01U); /* Get the 0th bit */

mcbsp->MFFINT.bit.XINT = 0u;
mcbsp->RCR1.bit.RWDLEN1 = 0; /* Configure the word size to receive data, macros available */
mcbsp->XCR1.bit.XWDLEN1 = 0; /* Configure the word size to send data, macros available */
mcbsp->SRGR2.all = 0x2000U; /* Determine the value,CLKSM=1, frame synchronization pulse period FPER =1 CLKG period */
mcbsp->SRGR1.all = 7; /* Used to configure clock rate CLKG and CLKG cycle pulse width */
/* CLKG periodic pulse width defaults to 1 sampling period */
DELAY_US(MCBSP_DELAY_TIME_1US);
mcbsp->SPCR2.bit.GRST = 1U; /* Enable the sample rate generator */
DELAY_US(MCBSP_DELAY_TIME_1US);
mcbsp->SPCR2.bit.XRST = 1U; /* Enable sender from reset */
mcbsp->SPCR1.bit.RRST = 1U; /* Enable the receiver from reset */
mcbsp->SPCR2.bit.FRST = 1U; /* Enable frame sync generator from reset */
}

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

    您好、  

    我们的专家目前不在办公室,请期待本周结束时的答复。

    此致、

    Ben Collier

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

    您好、

       感谢您的答复。

       如果您有任何建议、请在此处更新。

       此外、客户希望了解:

       测试配置为 SPI 模式的 McBSP 后、是否有任何有关最大有效带宽的统计数据?

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

    Alice、

    我们能问一下 McBSP 时钟在上述情况下运行的是什么?  Max 为 25MHz。

    观察延迟、它~300ns。  假设 C2000 正在运行 150MHz、则延迟~50 个时钟周期。  然而、如果将其放入 McBSP 时钟周期内、则为~7.5 个时钟。  我仍然认为这似乎有点太多、也就是说、我可能预计 McBSP 域中有 1 到 2 个时钟的延迟、具体取决于当 C28x 写入数据时、比如 40-80ns、再次假设 McBSP 处于 25MHz。

    让我们看看客户对 McBSP 时钟的评价、然后我们可以看到此延迟是否更有意义。

    此致、

    Matthew

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

    您好  Matthew、

      感谢您的支持。

      请检查客户的回复:

    DSP 工作频率为 150MHz、LSPCLK 为 75MHz、SRGR1.CLKGDV 配置为 7、因此计算出的结果时钟应为 9.375MHz。

    如您所述、目前不确定哪个器件会引入延迟、以及延迟如此之大的原因。

    此外、在示波器上观察到的延迟时间约为 500ns。

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

    Alice、

    感谢您的支持、因此在 9.375MHz 时、McBSP 周期为 107ns。  因此、假设从 GPIO 脉冲到数据开始为 500ns、我们将看到~5 个 McBSP 时钟周期的延迟。

    在将寄存器从 C28x 写入 McBSP 以启动代码方面的延迟、我认为我们可以根据内核和 McBSP 之间的时钟对齐情况预计有 1-2 个 McBSP 时钟周期。  因此、我们仍然有~3 个时钟周期 (~320ns) 的延迟。

    代码是从闪存还是 RAM 运行?  如果是闪存、那么根据闪存等待状态设置、代码执行将有一些额外的延迟(我认为 MIN 为 3 WS)、如果来自 RAM、则不会有该延迟。   

    本质上、我正在尝试查看 GPIO 脉冲是否由于代码执行原因等原因而进一步延迟

    此致、

    Matthew

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

    您好  Matthew、

      感谢您的支持。

      请检查客户的回复:

       代码在 RAM 中运行。

       您是否有提到的 1-2 个 McBSP 时钟周期延迟的证据?

       为什么会有 2 个 McBSP 时钟周期的延迟?

       L4-L7 SARAM 和 L0-L3 SARAM 中的代码分配是否会导致执行时间延迟 200-300ns?

       我认为 L4-L7 SARAM 不应引入如此明显的延迟。

       请帮助分析这一点,谢谢。

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

    Alice、

    我基于时钟域的差异和最坏情况下的假设来确定 1-2 个 McBSP 延迟、即当从 CPU 写入 McBSP 传输时、我们在本地 McBSP 时钟转换后立即落在时钟上。

    最好将代码保存在 RAM 中、因此我们可以消除作为潜在时序问题的闪存等待状态。

    就像我们在同一个页面上、是否有任何其他系统中断(例如来自 ADC/等)会延迟写入?  或者为了进行此调试、我是否应该认为只有 McBSP/C28x 处于活动状态。

    此致、

    Matthew

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

    您好  Matthew、    

      感谢您的支持。

      客户有些困惑、请帮助澄清、非常感谢。    

    1.  

    当从 CPU 写入 McBSP 传输时、我们在本地 McBSP 时钟转换后立即下降到时钟。

    应该如何理解这句话? 这是意味着 CPU 时钟和 McBSP 时钟是异步的、还是意味着其他什么?

    2  验证 McBSP 功能时、所有中断都处于禁用状态;此外、您提到的写入延迟是指应用程序写入 DXR1 所用的时间、对吧? 从示波器的角度来看、电流延迟与写入 DXR1 后的数据传输延迟有关、而不是与应用程序写入 DXR1 相关。

    3.  

    或者为了进行此调试、我是否应该认为只有 McBSP/C28x 处于活动状态。

    应该如何理解这句话?

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

    您好:
    美好的一天!
    如果您有任何建议、请更新此处、非常感谢。

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

    您好、

        美好的一天!

       关于客户的回复、客户正在等待进一步的支持。

        如果您有任何建议、请更新此处、非常感谢。

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

    您好、

        美好的一天!

       关于客户的回复、客户正在等待进一步的支持。

        如果您有任何建议、请更新此处、非常感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid=“512444" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1536657/tms320f28335-mcbsp-configuration-for-spi-speed-issue/5935979

    1.  

    当从 CPU 写入 McBSP 传输时、我们在本地 McBSP 时钟转换后立即下降到时钟。

    应该如何理解这句话? 这是意味着 CPU 时钟和 McBSP 时钟是异步的、还是意味着其他什么?

    [/报价]

    它们不是异步的、因为 McBSP 时钟来自 CPU 系统时钟;但 McBSP 时钟是 CPU 时钟的分频值。  因此、可能会发生从 CPU 域启动对 McBSP 寄存器的写入来自 McBSP 时钟之间的情况;从而导致延迟

    2  验证 McBSP 函数时、所有中断都处于禁用状态;另外、您提到的写入延迟是指应用程序写入 DXR1 所用的时间、对吧? 从示波器的角度来看、电流延迟与写入 DXR1 后的数据传输延迟有关、而不是与应用程序写入 DXR1 有关。

    是的、但在根据 C28x CPU 的流水线写入 DXR1 之前、设置 GPIO 的 CPU/指令将至少出现 1 个 SYSCLK。  但公平地说、这在 150MHz 只有几个 CPU 时钟的延迟

    [报价 userid=“512444" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1536657/tms320f28335-mcbsp-configuration-for-spi-speed-issue/5935979

    3.  

    或者为了进行此调试、我是否应该认为只有 McBSP/C28x 处于活动状态。

    应该如何理解这句话?

    [/报价]

    我的意思是代码没有执行任何其他操作、如 ADC ISR 或可能导致无法向 DXR 写入数据的操作。   

    此致、

    Matthew

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

    您好 Matthew、

       感谢您的支持。