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:SSI 正常模式和高速模式之间的差异行为

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1185747/tms320f28386d-difference-behavior-between-ssi-normal-mode-and-high-speed-mode

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

您好!

对于 SSI 通信、我将 CM CLK 设置为120MHz、并将波特率设置为20MHz。

我注意到、当我使用高速模式时、SSI 模块偶尔会无法解码。 例如,它应该被接收到五个数据,但是 SSI 模块(从 SSI_ReadData()读取)只解码四个数据。 但是、当我使用正常模式时、解码和接收数据将是稳定的。

为什么在使用高速模式时 SSI 模块无法解码?

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

    您好!

    您能否告诉我们、您在使用正常速度时设置的 SPI 速度是多少?

    此致、

    Praveen

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

    您好!

    对于 SSI 通信、我将 CM CLK 设置为120MHz、并将波特率设置为20MHz。

    与使用高速模式设置相同。

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

    您好!

    您是在主模式还是从模式下使用 SSI? 以及 FIFO 模式还是非 FIFO 模式?

    如果您使用了任何参考 c2000ware 示例、请指向该示例。 我们可以更轻松地了解所使用的配置

    此致、

    Praveen

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

    参考示例: C:\ti\c2000\C2000Ware_3_02_00_00\driverlib\f2838x\examples\cm\SSI\SSI_ex1_loopback

    以下设置:

     SSI_setConfig ( SSI0_BASE、 CM_CLK_FREQ、 SSI_FRF_MOTO_MODE_3、 SSI_MODE_MASTER、 20000000、  8 );
    2. 禁用 反向 模式 (SSICR1.LBM = 0 )
    3. 启用 或 禁用 速度 模式 (SSICR1.HSCLKEN = 1 或 0)
    P.S. 不 使用 DMA (     寄存器 SSIDMACTL 中的 TXDMAE 和 RXDMAE 都 为零)
    不再有  其他 配置 设置

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

    您好!

    您使用了哪些 GPIO 进行 SSI 通信?

    此致、

    Praveen

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

    您好!

    这是我的设置

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

    您好!

    SSI 中的 FIFO 深度为8。 当 FIFO 半满或多于半满时、SSI 中的接收 FIFO 中断被触发(参考- f2838x TRM、第5287页、第47.2.4节)。 在 c2000ware 示例中、我们将数据从 FIFO 读取到 ISR 内的接收器阵列(rxdata[])中。 当 ISR 被触发一次时、我们读取4个数据帧。 如果必须在 ISR 中读取4个以上的数据帧(就像在本例中一样)、则需要在下一个 ISR 中读取接下来的4个数据帧、而不是在该 ISR 中读取。

    在下一个 ISR 中、确保将数据读取到接收器阵列(rxdata[])的下4个索引中、而不是读取相同的起始4个索引以避免覆盖。 具有接收器阵列索引的全局变量、而不是像 C2000软件示例中那样使用 for 循环计数器(I)。

    希望这能解释您的问题原因。

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

    您好!

    这      看起来不像同一个问题。

    尽管 我们 引用   了示例 SSI_ex1_loopback.c、 但我们  不 启用  SSI Rx 中断 (SSI_INT_RXFF)。
    我们 发送 n 个字节  的 TxData 并 使用  while 循环  来调用 SSI_readDataNonBlocking() 以 接收 n 个字节  的 RxData。
    P.S. n<=8 、        并在发送前确认 SSIRxFIFO 为空。

    但是、 我们 不 会得到  单 个字节 (随机) 、      并且总共只能得到 n-1个字节 ( 而循环 再 也不会得到  SSI_readDataNonBlocking   )。
     只有    当 SSICR1.HSCLKEN =时、才会发生上述情况  如果     SSICR1.HSCLKEN =、则不会发生  0。

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

    您好!

    请确保您仅在从发送器设置中完全传输数据后才在接收器设置中接收数据。 在接收器侧读取的数据可能在从发送器侧传输整个数据之前开始。

    为了避免这种情况、建议在 RX ISR 内一次读取4个字节(FIFO 半满会生成一个接收 FIFO 中断)、因为它确保我们只在4个字节被发送后才读取它们。