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.

[参考译文] CCS/TM4C123GH6PM:无法通过 SPI 进行超过16位的通信

Guru**** 2480435 points
Other Parts Discussed in Thread: TM4C123GH6PM

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/699817/ccs-tm4c123gh6pm-not-able-to-communicate-more-than-16-bits-through-spi

器件型号:TM4C123GH6PM

工具/软件:Code Composer Studio

您好!

我使用的是 TM4C123GH6PM MCU、需要通过 SPI 进行通信。  但 SPI 的数据大小最大为16位。 因此、一次最多只能传输16位。 在我的情况下、我必须 通过 SPI 传输20位数据、但无论如何我都不会找到这样做。

根据 MCU 数据表、对于连续背靠背传输、SSInFss 管脚在连续的数据字之间保持低电平、并且端接与单字传输的端接相同。 但不清楚如何执行此操作。

因此、请帮助我找到一种保持 SSInFss 为低电平的方法来发送完整的20位数据、并说明如何通过 SPI 发送20位数据(因为数据大小最大为16位)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "我必须通过 SPI 发送20位数据"

    将其分解为多个16位传输。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Dipin、您好!

    对于传输20位、它将取决于从器件的行为。 您是否需要发送所有20位、而不在4位或8位数据包之间存在任何间隙、或者只要从器件选择保持低电平、数据半字节/字节之间是否会有轻微的暂停? 如果半字节之间不能存在间隙、那么从器件在传输24位数据且只有20位有效时是否能够忽略额外的时钟。 这将决定是否可能。

    如果您可以消除数据之间的微小差距、则最简单的方法如下。 首先、您可以手动将 SS 保持为低电平、方法是将该引脚控制为 GPIO、而不是 SSI 引脚。 这是一种在整个传输过程中强制 SS 处于低电平的欺骗手段。

    然后、您需要将 SSI 设置为4位宽的传输、然后向外发送5个数据包、总共最多可达20位。 尽管 TM4C123G 上的 SSI 外设在加载每个字节之间短暂暂停时钟、但这种方法会导致数据的每个4位半字节之间出现小间隙。

    遗憾的是、由于每个半字节之间会有很小的间隙、这也意味着如果您无法消除数据半字节之间的这些小间隙、那么 TM4C123G 器件可能无法满足您的需求。 但是、我们 TM4C129x 系列中的器件可能能够解决该问题、因为它们具有高级 SSI 模式、可用于满足您的需求。

    不久前、一个用户尝试进行24位传输时出现了一个非常类似的问题、并且出现了一个问题、即发送的字节之间不能存在任何间隙。 我们的社区成员之一解决了该问题、并在此处介绍了该解决方案以及提供的源代码: e2e.ti.com/.../2440947

    但是、TM4C129x 高级 SSI 模式仍然存在一个"问题"、即它只能以8位的长度传输数据、因此您必须将从器件暴露在4个虚拟时钟中、从器件可能接受也可能不接受这些时钟。