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.

[参考译文] CC3220S:使用 DMA 通过 SPI 发送数据时遇到问题

Guru**** 2535750 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1010053/cc3220s-trouble-sending-data-over-spi-using-dma

器件型号:CC3220S
Thread 中讨论的其他器件:SysConfig

如果我将最小 DMA 字节设置为非常高的值、我已经能够成功地使用 SPI 传输数据、但是当我将最小 DMA 传输大小设置为如图所示的较小值时、我会在 运行时继续运行到 dmaErrorFxn 中。  

我当前的 SPI 配置如下所示:

我希望在调试这方面有一些帮助。

谢谢!

Vasav

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

    Vasav、您好!

    如果您将最小 DMA 传输大小保持为更高的值、是否遇到任何错误?

    SPI 驱动程序已经过默认 DMA 设置的测试、如果将其更改为更小、则会导致 DMA 的使用量增加、如果您执行许多小传输、效率也会降低。 也就是说、您所显示的10个字节应该可以使用而不会出现错误。

    如果您使用相同的设置但运行一个简单的测试应用程序、如 spimaster 演示、您是否仍然遇到这些 DMA 错误?

    此致、

    Michael

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

    您好、Michael、

    根据您的建议、我尝试了一些事情。 首先、我创建了一个程序、使用电路板所需的引脚配置来测试 SPI 输出(它基本上与 spimasterdemo 相同、只不过它简化为仅执行 TX)。 在此程序中、我将通过 SPI 发送100个字节、并使用逻辑分析仪观察输出。 当我将 minDMATransfer 设置为1000字节时、我可以看到所有数据都在发送。 如中的第一张图片所示。   

    然后我尝试将 minDMATransfer 更改为10、我注意到它卡在 FreeRTOS 函数中。 我还注意到一些字节已经传输、但并非全部。 这是我在逻辑分析仪上注意到的情况的图像。   您可以看到、仅发送33个字节、之后它卡在 FreeRTOS 中。  

    我还临时将硬件配置从仅主器件 Tx 更改为全双工、并将3线更改为4引脚 SS 且低电平有效。 使用此配置、我能够使代码与 DMA 一起运行。 总之、我不确定接下来要尝试什么或可能导致此问题的原因。  

    感谢你的帮助!

    Vasav

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

    Vasav、您好!

    有趣的是、您能够在全双工模式下获得正确的功能。

    如果您能够在全双工模式下获得正确的功能、那么我建议您将其保持原样、然后通过简单地将 NULL 指定为 rxBuf 来执行仅 TX 传输。 这样、您将指示驱动程序在内部使用临时缓冲区、它的功能就像您只执行 TX 操作一样。

    此致、

    Michael

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

    好建议 Michael、

    目前、我无法将其保持在全双工模式、因为它会导致系统配置中的资源冲突。 是否有办法解决这个问题?

    感谢您的帮助!

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

    Vasav、您好!

    您与 SPI RX 引脚有什么引脚冲突? 也许有一种方法可以解决这个问题、但我需要知道其他外设占用同一个引脚。

    此致、

    Michael

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

    嗨、Michael、

    在我的硬件中、我有一个多路复用器通过将其用作 GPIO 引脚来控制 SPI RX 引脚。 我能够抑制引脚冲突、然后在将 SPI 模式设置为全双工时使 DMA 工作。 为此、我必须锁定 RX 引脚、然后我可以选择抑制误差。  

    我认为、如果有人能够弄清楚为什么只有全双工版本才能与 DMA 配合使用、那将仍然是有益的。

    谢谢!

    Vasav

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

    Vasav、您好!

    我同意、最好能调试并确定与 DMA 配合使用时半双工模式为何不稳定。

    不过、最好知道您已经为引脚冲突找到了一种权变措施。 遗憾的是、我不能再分配更多的时间来调试这个问题、尤其是考虑到我们有一个有效的权变措施。

    如果您对 SPI 驱动器还有其他问题、请告诉我。

    此致、

    Michael

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

    嗨、Michael、

    虽然这是暂时工作的、但您可以让另一位工程师深入了解 DMA 为何需要全双工模式、以及如何解决我的原始问题? 我提出这一问题是因为 GPIO 很可能需要与 SPI 使用相同、这种情况会导致问题。  

    谢谢!

    Vasav  

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

    Vasav、您好!

    除了全双工更改之外、您是否还必须使用4线 SPI 模式、或者在启用全双工后是否还能够使用3线 SPI?

    此致、

    Michael

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

    您好、Michael、

    启用全双工后、我能够使用3线 SPI。 这些是我的 SysConfig 中 SPI 的设置、供您参考。

    谢谢!

    Vasav

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

    我在上图中意识到 minDMA 大得多(我忘记切换分支)、另一个分支具有大约100字节的 minDMA 传输大小。  

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

    Vasav、您好!

    感谢您提供 SysConfig SPI 设置的屏幕截图。

    我还有几个更明确的问题:

    1.执行半双工测试时,使用的传输计数是多少? 具体而言、当.count >最小 DMA 传输大小时、是否总是会出现此问题? 请记住、计数和最小 DMA 传输大小均以 SPI 字为单位(因此、如果每个字运行8个字节、则为8个字节、等等)

    2.当您运行半双工 SPI 并尝试执行传输时,是否将 rxbuf 保留为 NULL,或者您是否仍然为 SPI_Transfer()函数提供缓冲区?

    3.问题是在第一个 SPI_Transfer()上发生,还是仅在第二个+ SPI 传输上发生。

    可能会发生的情况是、如果 SPI 处于半双工模式、DMA 传输设置不会与 SPI 外设正确交互。 具体而言、它会尝试从未被填满的 FIFO 中提取数据。 如果您修改 SPI 驱动程序以禁用已禁用 TX 或 RX 的 DMA 设置、会发生什么情况? 我已连接一个修改后的驱动程序、尝试这样做、请尝试一下-很遗憾、我没有带宽来完全测试这个想法、因此感谢您在这里提供帮助。

    e2e.ti.com/.../3312.SPICC32XXDMA.c

    此致、

    Michael

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

    您好、Michael、

    感谢您将此代码发送给我。  

    1) 1)是的、我使用小于传输计数的值尝试了它、它只是停留在传输过程中。  这意味着您发送的代码中第735行上的信标永远不会被发布。  

    2) 2) 我将 rxBuff 保留为 NULL。

    3) 3)使用新代码、发送问题代码的代码不再进入 dmaErrorFxn、但第735行上的信号量永远不会被触发。  

    此外、使用新代码、我只能看到33个字节被传输。 这是逻辑分析仪的图片:

    对于 SDK 的未来版本、您可以在 SPItransfer 中包含超时功能、因为您似乎已经内置了 transferTimeout 功能。  

    我仍然坚持这一点、因此感谢您的任何帮助。  

    谢谢!

    Vasav

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

    Vasav、您好!

    应已在 SPI 驱动程序中实现超时功能。 在您设置为 open 的 SPI_Params 中、应提供设置 thre transferTimeout 的选项。 这是在一个阻断 SPI 传输期间连接到信号量的超时。 如果您设置 SPI_Params.transferTimeout、信标是否会按预期超时?

    此外、使用新的驱动程序、您是否曾使用过 spiHwiFxn? 也许 DMA 传输会过早停止、您能否在调试模式下运行测试程序、并在传输完成之前查看您是否正在进入 spiHwiFxn?

    此致、

    Michael

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

    嗨、Michael!

    我很抱歉,我对这件事作了如此晚的答复。 我被其他一些东西困住了、这一点被放在了后备炉上了一小段时间。 无论如何、我在调试模式下运行代码、并注意到代码永远不会在 spiHwiFxn 停止。 您对导致这种情况的原因有什么看法吗?

    我将更详细地介绍该代码、看看我是否可以计算出它。

    谢谢!

    Vasav  

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

    嗨、Michael、
    我还没有在这方面取得任何幸运吗? 您能向我提供其他见解吗?

    谢谢!

    Vasav

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

    Vasav、您好!

    如果代码从未进入 spiHwiFxn、则表示 DMA 要么从未启动、要么陷入停滞状态、从不进入已停止状态。 或者启用的中断源不正确。  

    如果您检查 SPI 中断寄存器以及 DMA 中断寄存器、您在传输卡滞时是否看到任何活动中断?

    此致、

    Michael

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

    您好、Michael、

    感谢您的再次光临! 我不确定确切查看哪个寄存器。 我在这里连接了 GSPI 寄存器和 UDMA 寄存器。 这些值是在 SPI 卡滞时复制的。 BTW、我可以注意到 TX0确实增加到超过33个字节。 您能看一下这些寄存器吗?如果您需要查看其他寄存器、请告诉我。

    再次感谢!  

    Vasave2e.ti.com/.../GSPIandUDMAregisters.txt

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

    嗨、Michael、

    我想跟进我发送的寄存器。 您是否有机会查看它们?

    谢谢!

    Vasav  

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

    Vasav、您好!

    Michael 不再在我们的团队中工作。 我将把这项支助请求的任务移交给另一人,我们将尽快采取后续行动。

    此致、

    本·M

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

    你好 Ben!
    谢谢、但我最终创建了一个新帖子、由其他人处理。 以下是其他阅读此内容的人的链接: e2e.ti.com/.../3794313
    Vasav

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

    Vasav、您好!

    还可以! 这也是正常工作的。 感谢您分享让其他人看到的内容。

    此致、

    本·M