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.

[参考译文] TMS320F28P650DK:每次 SPI 事务后切换 MOSI。 因此、SPI 帧结束后的 MOSI、每隔一次变为低电平或高电平

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1432707/tms320f28p650dk-mosi-toggles-after-every-spi-transaction-so-mosi-after-spi-frame-ends-becomes-low-or-high-every-other-time

器件型号:TMS320F28P650DK

工具与软件:

SPI 配置:

  • SPI 使用16位字进行发送
  • DMA 用于 SPI
  • DMA 由 PWM 触发
  • DMA 事务结束中断

TX 缓冲区具有26个字节的固定长度:

字节

0

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

主站输入

0xAA

0xAA

0x00

0x00

0x00

0x00

0x00

0x00

0x00

0x00

0x00

0x00

0x00

0x00

0x00

0x00

0x00

0x00

0x00

0x00

0x00

0x00

0x00

0x00

0x00

0x00

MISO

ADC

ADC

ADC

ADC

ADC

ADC

ADC

ADC

ADC

ADC

ADC

ADC

ADC

ADC

ADC

ADC

ADC

ADC

ADC

ADC

ADC

ADC

ADC

ADC

ADC

ADC

问题是 MOSI 在每个事务结束时一直在切换、而不是返回到其 GPIO 配置。 下图中显示了这一点、其中显示 MOSI 在每个事务后保持低电平或高电平。 我们知道这不是硬件问题、并且特定于此配置中使用的 C2000 SPI。  

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

    由于某种原因、复制粘贴功能不起作用、因此我不得不将其作为图像进行附加

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

    尊敬的 Ali:

    我们的设计专家进行了联系。 请在几天内收到回复。 与此同时、您能否放大这张示波器 屏幕截图、并提供前三个 SPI 帧的屏幕截图。

    此致、

    Aishwarya.

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

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

    感谢您提供此信息。

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

    只是为了确认、这些设置是否与 Ali 一起观察到这种行为?

    • SPI A
    • 数据宽度:16
    • DMA:通道4 (RX)+通道3 (TX)
    • SPI 有效载荷:13 x 16位字
    • SPI 时钟:2MHz
    • SPI_PROT_POL0PHA1
    • 事务结束启用中断:可以
    • 芯片选择由 SPI 外设处理

    谢谢

    Ethan COPE

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

    我根据该测试使用的设置更新了列表

    • SPI D
    • 数据宽度:16
    • DMA:通道4 (RX)+通道3 (TX)|由 DMA_TRIGGER_EPWM17SOCA 触发
    • SPI 有效载荷:13 x 16位字
    • SPI 时钟:2.5MHz
    • SPI_PROT_POL0PHA1
    • 事务结束启用中断:可以
    • 芯片选择由 PWM 从外部处理
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ali:

    感谢您提供这些附加信息。 我已经与设计专家确认、MOSI 根据传输中最后一次传输的数据、特别是该数据的 MSB、切换为高电平或低电平。 这是硬件中的预期行为、因此如果您希望跟踪这一点、则可以根据数据是0还是1进行查看。

    此致、

    Aishwarya.

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

    但这不是正在发生的事情。 我们将发送相同的有效载荷和 MOSI 切换。 如果您所说的内容准确、那么 MOSI 根本不会切换、但它显然正在切换。 所以你说的是预期的行为没有发生,我知道一个事实,这不是发生什么,因为我做了其他测试。

    您能在结束时重现问题并分享结果吗

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

    尊敬的 Ali:

    我将在我结束时重现这种情况、并在明天与您联系并提供一些更新。

    此致、

    Aishwarya.

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

    一些附加信息

    • SPI FIFO 模式:启用
    • FIFO TX 延迟:0
    • DMA 通道- SPI TX:DMA_CH5_BASE、SPI RX:DMA_CH6_BASE
    • 比特率:2000000 (2MHz)
    • 时钟极性和相位: SPI_PROT_POL0PHA1 (带延迟的上升沿、Motorola 模式0)
    • 数据宽度:16位
    • FIFO 中断级别:设置为相等的发送字数。 在运行时不变。 事务长度差异未改变结果。 我们实验从5个字到24个字的大小、结果是一样的
    • DMA 配置片段:
      • spiRxDmaConfig.transferTrigger DMA_TRIGGER_SPIARX;
        spiRxDmaConfig.enableInterrupt = true;
        spiRxDmaConfig.interruptMode  = DMA_INT_AT_END;
        spiRxDmaConfig.configSize  =  DMA_CFG_SIZE_16BIT
        SpiRxDmaConfig.transferMode  =  DMA_CFG_Oneshot_disable
        spiRxDmaConfig.reinitMode  =  DMA_CFG_CONTINUOUS_ENABLE
        spiRxDmaConfig.transferSize  =  1U
        spiRxDmaConfig.burstSize  = transactionNumWords
        spiRxDmaConfig.destBurstStep  =  1
        spiRxDmaConfig.srcAddr  = (uint32_t)(SPIA_BASE  +  SPI_O_RXBUF);
        spiRxDmaConfig.destAddr  = (uint32_t)(&rxBuffer[0])
        spiTxDmaConfig.transferTrigger = DMA_TRIGGER_SOFTWARE;//我们已将其设置为 PWM 及其他触发器
        spiTxDmaConfig.enableInterrupt  =  false
        spiTxDmaConfig.configSize  =  DMA_CFG_SIZE_16BIT
        spiTxDmaConfig.transferMode  =  DMA_CFG_Oneshot_disable
        spiTxDmaConfig.reinitMode  =  DMA_CFG_CONTINUOUS_ENABLE
        spiTxDmaConfig.transferSize  =  1U
        spiTxDmaConfig.burstSize = transactionNumWords;
        spiTxDmaConfig.srcBurstStep = 1;
        spiTxDmaConfig.destAddr  = (uint32_t)(SPIA_BASE  +  SPI_O_TXBUF);
        spiTxDmaConfig.srcAddr(uint32_t)(&txBuffer[0]);
        DMA_configChannel (rxDmaBaseAddr、&spiRxDmaConfig )
        DMA_configChannel (txDmaBaseAddr、&spiTxDmaConfig )
    • MOSI/MISO/CLK GPIO 配置:
      • [SPI_MOSI] = {.pin_number =   58.dir  =  GPIO_DIR_MODE_OUT.qual    = GPIO_QUAL_SYNC、.padcfg =  GPIO_PIN_TYPE_STD.pincfg  =  GPIO_58_SPIA_PICO }、
      • [SPI_MISO] = {.pin_number =   55.dir  =  GPIO_DIR_MODE_IN.qual    = GPIO_QUAL_SYNC、.padcfg =  GPIO_PIN_TYPE_STD.pincfg  =  GPIO_55_SPIA_POCI }、
      • [SPI_CLK]={.pin_number = 34、.dir = GPIO_DIR_MODE_OUT、.qual = GPIO_QUAL_SYNC、.padcfg = GPIO_PIN_TYPE_STD、.pincfg = GPIO_34_SPIA_CLK}、


    发生此问题时、我将获取寄存器 SPI 外设寄存器扫描。  

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

    感谢您提供此信息。  

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

    您好、TI 团队:

    禁用 SPI 时、MOSI 引脚的确切状态是什么? 是否可控制(无需将引脚重新配置为标准 GPIO)? 请在此处提供尽可能详细的信息。 谢谢。

    -Ali T

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

    Ali

    您将继续支持离线操作、然后在此处发布解决方案。

    此致、

    Aishwarya.

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

    Ali

    根据我们的对话,在 POL0PHA1中,PICO 反映了通过 POCI 收到的 SPIDAT[15]。 您能否确认每个字节的 ADC 数据是什么?这是否与此理解相匹配? 我将在 FYI 结束时发布调试摘要的完整更新。

    此致、

    Aishwarya.