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.

[参考译文] CC1352P:SPI 数据大小>不支持16位?

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/955416/cc1352p-spi-data-size-16-bits-not-supported

器件型号:CC1352P
主题中讨论的其他器件:ADS7054CC3220SF

尊敬的支持:

我将 CC1352P1连接到 SPI ADC (ADS7054)、该 ADC 在 SPI 事务之间至少需要18个 SCLK 脉冲。 然而、从读取 TRM 来看、SPI 外设只支持8位和16位的数据大小。  这是硬件问题还是软件问题?   这是否也适用于在主模式下使用 SPI 时使用传感器控制器?  至于主 CPU 的使用、当我尝试使用32位的数据大小打开 SPI 端口时、它会失败并出现错误的句柄-因此它不支持预期的32位。   

有趣的是、CC3220SF SPI 外设没有此限制-它最多可支持32位。  希望这些器件使用相同的 SPI 外设。   如果这是 CC1352P1 SPI 外设的硬件限制、您对如何解决此限制有什么建议吗?  我是512 Kbps 的 SPI 端口、因此不必让 CPU 进行位拆裂来解决此问题-需要 DMA 在每个 SPI 事务中将512个32位样本等数据块移动到存储器中。  您的想法?

谢谢、
Tim

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

    您好、Tim、

    正如您已经知道的、这两个器件不共享同一个 SPI 外设、而 CC1352仅支持高达16位的帧。 我的建议(我似乎记得之前已经完成过)是使用2x9位帧并删除驱动程序上的"minDMAThreshold"以利用 DMA 创建重新汇编"18位帧"的内容。

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

    您好、MW:

    感谢您的回应和建议。  根据您的建议、我需要 SPI CS 在18位帧大小上进行切换、如下所示(ADS7054数据表中的图37):

    然后、我需要使用这些18位值中的512个数据大小执行一个传输到存储器中。  这是可行的吗?  

    您建议我为 minDMAThreshold 值使用什么值才能使其正常工作。  但是、我不清楚该值是什么以及它的位置。  您是指 SPICC26XDMA_HWAttrs 结构中的 minDmaTransferSize 吗?  如果是、我应该将该值设置为什么?

    谢谢、
    Tim

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

    Tim、我不知道您是否考虑了这一点、但您可以从 SPI 块中移除 CS (芯片选择)引脚。  并通过将其连接到 GPIO 内核来手动切换它。  然后 DMA 完成 CPU 的所有工作、只在开始和结束时切换 CS

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

    嘿 Scott:

    感谢您在这里的输入。  是的、我曾考虑过、但这里的问题是、我必须使 CS 信号在每18位数据帧上处于活动和非活动状态。  因此、CPU 必须对每个样本执行此操作、这是禁止的、因为有许多其他进程并行运行-有些进程需要在没有额外 IRQ 的情况下运行至完成。  对于每个 SPI 事务、我需要将多达1024个样本移入一个帧、然后在此帧上进行处理-无需 CPU 参与每个样本的移动。  我希望创建一个包含32位样本的帧、并将数据移动到16位样本的帧中、然后在帧边界而非采样边界上执行所有这些处理。  根据我所能知、使用只能支持高达16位 SPI 数据大小的 SPI 外设无法实现这一点-凸点器。  如果你不这样认为,请告诉我。

    谢谢、
    Tim

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

    您好、Tim、

    如果您想保持模式独立、Scott 建议的方法是最简单的。 不过、正如您所说的、这会导致两次传输之间存在大量 CPU 参与。 由于 CS 需要从 AQC 进入 CONV 状态、恐怕没有很好的权变措施。  

    至于"minDmaTransferSize"、是的、这是我想的变量。 它为驱动程序使用 DMA 设置"传输"所需的帧数限制。 在该数字下面发送的内容中、将使用轮询版本。 将其设置为1意味着您将始终使用 DMA。

    您是否已使用传感器控制器? 如果没有、听起来更适合这里、因为您可以进行24位传输(16+8)并在这些传输之间切换 CS 输入。 这样、您至少不需要担心 CPU 忙于执行其他操作。 您还可以立即将14位值打包到16位中,这意味着您应该能够安装足够大的多缓冲区,以便连续传输到 ARM 内核:)

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

    您好、MW:

    不、我没有为此使用传感器控制器、它听起来是最佳解决方案。  感谢您就此提供的建议和意见。  非常有帮助。

    谢谢、
    Tim