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.

[参考译文] TMS320F28386D:CM SSI 通信接收不稳定

Guru**** 2457760 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1120301/tms320f28386d-cm-ssi-communication-receive-unstable

器件型号:TMS320F28386D
主题中讨论的其他器件:C2000WARE

您好!

对于 SPI 通信、我尝试将 CM CLK 设置为125MHz、并将波特率设置为20MHz。

SSI_setConfig (base、ssiClk、协议、模式、比特率、 数据宽度)

  • base = SSI0_BASE
  • ssiClk = 125000000
  • ProtocolMode = 3 (使用通信 mode3、表示样本位于正边、换刀位位于负边)
  • 比特率= 20000000
  • dataWidth = 8位

我注意到 SSI 工作站无法获取该值。

下面是我的测试方法:

  1. 将 CM CLK 设置为120MHz、DSP 向从器件发送读取命令。 SSI_readDataNonBlocking 解码并接收个 RxData。 没错。
  2. 将 CM CLK 设置为125MHz、DSP 向从器件发送读取命令。 SSI_readDataNonBlocking 解码并仅接收四个 RxData、这是错误的、应接收五个 RxData。

我尝试检查实际信号。

请注意

  • CH1:CLK、Ch2:CS、Ch3:MOSI、CH4:MISO

 

从信号中、我们应该得到五个 RxData、但 SSI_readDataNonBlocking 只解码个。 我们观察到 SSISR 寄存器、IT 响应0x19 (SSI 忙位)。

是否有任何设置可能导致此问题?

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

    您好 Frederick、

    我们有关此外设的主题专家已不在办公室。 我可能需要就你看到的这一特定问题与他进行跟进。  

    由于 SSISR = 0x19、它指示状态位的行为不正常。 例如、发送 FIFO 为空和发送 FIFO 为满都被置位。 由于 SSI 需要一些周期来发送和接收数据、您是否可以尝试使用 SSI_writeData()和 SSI_ReadData()函数、而不是它们的_nonblocking 函数? 这两个函数将一直阻止、直到 TX FIFO 中有空间、直到 RX FIFO 上有数据。

    您能否确认您的系统中的 CMCLK 配置为120MHz 或125MHz?  如果您可以发布 SSI 寄存器的内容、特别是 SSICR0和 SSICPSR、

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

    您好、Martinez、

    尽管我们调用 _nonblocking、但我们有一个 while 循环 来调用 SSI_readDataNonBlocking 以进行超时检查。  因此它与 SSI_ReadData()相同。

    我们已确认120MHz 或125MHz 正确。我们启用了一些 CM CPUTimer 中断、ISR 触发周期正确。

    下面的 SSI 寄存器、 

    CMCLK 125MHz :

    SSI_0_CR0 = 711
    SSI_0_CPSR = 2

    在示波器中测量的 SSI 时钟大约为20.8MHz。



    --
    CMCLK 120MHz :
     1:SSI_0_CR0 = 711
     2、SSI_0_CPSR = 2

    在示波器中测量的 SSI 时钟大约为20MHz。

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

    您好!

    我正在与一些同事进行核实。 我将尽快回复您。

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

    弗雷德里克

    [~ userid="464815" URL"/support/microcontrollers/C2000-microcontrollers-group/CC2000/f/C2000-microcontrollers-forum/1120301/tms320f28386d-cm-SSI-community-receive-sustable/4167083#4167083"]尽管我们调用 _nonblocking、但我们有一个 while 循环 来调用 ssi_readNonlocking 超时、以进行读校验。  因此它与 SSI_ReadData()相同。[/quot]

    好的、我只想确保 您的代码在读取 FIFO 前检查 RX FIFO 中是否有数据、在写入 FIFO 之前检查 TX FIFO 中是否有空间。

    [~ userid="464815" URL"/support/microcontrollers/C2000-microcontrollers-group/CC2000/f/C2000-microcontrollers-forum/1120301/tms320f28386d-cm-SSI-communicy-receive-s不稳定/4167083#4167083"]我们已确认120MHz 或125MHz 正确。我们启用了一些 CPUCM/引用了正确的中断周期。]

    感谢您的观看。

     开始传输前,SSISR 的内容是什么?  

    此时、我仍不确定您的系统中可能发生什么情况。 您是否可以使用 C2000ware SSI 示例之一来重现此问题? 其中包含几个可供您使用的环回示例。