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.

[参考译文] AM2634-Q1:在 SPI 中接收数据时、UART 停止发送

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1586112/am2634-q1-uart-stops-transmit-when-receives-data-in-spi

器件型号: AM2634-Q1

尊敬的 TI 论坛:  

我们在非阻塞模式下使用全部 6 个 UART 外设和我们的工程中使用 DMA、我们还有 4 个 SPI 通道。 集成时、我们遇到了一个问题:当 UART TX 正常发生时、直到 SPI 从其他源接收到数据。 如果发生接收、则 UART 通道的 TX 由于“ Tx 缓冲区不为空“而停止。 我们使用 UART DMA LLD 进行开发。  

 在调用 uart_write ();函数之前,我们尝试了'transactionInit (& trans );'。 仍然面临问题。 是否在之前发现任何案例、或者如果有任何已知的解决方案可用、请返回邮件。  

image.png

映像基准:作为 UART_TRANSFER_STATUS_ERROR_INUSE 失败、但实际的 TX 没有挂起。  

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

    您好 Karthi、我有一些初步建议:

    1. 检查您是否没有在 UART 和 SPI 之间意外共享 DMA 通道、并且 DMA 通道优先级是否已正确设置。
    2. 查看 UART 和 SPI 外设的中断优先级

    一旦对它们进行了检查/确认、请告知我、我们可以进一步进行调试。

    此致、

    Brennan

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

    您好 Brennan Hartigan、  

    感谢您的答复。

    1.我们对 SPI 和 UART DMA 使用了不同的通道。

    SPI 的 DMA 通道如下所示、

    UART 的 DMA 通道如下所示、

    2.在讨论优先级时,

    选择的所有 UART 外设优先级均为 4、并且没有为 SPI 设置特定的优先级。

    以下是详细信息。

    请建议检查其他内容。

      

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

    Karthi,

    当错误发生时、您是否可以使用逻辑分析仪或示波器来检查 UART TX 线路、以监控该信号? 我很好奇 UART TX 线路是否停止切换、或者这是软件报告错误。

    此致、

    Brennan

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

    您好 Brennan、我们已经检查了 TX 线路、没有切换。 直到 SPI 开始接收到 UART 的 TX 正常。 接收到后立即进入 TX 关闭

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

    您好 Brennan、经常遇到下图所示的错误、

    image.png

    您可以根据以下观察结果找到任何内容、

     它会持续显示“write size remaining“(剩余写入大小)为 12。

    下面的一个是 UART 通道的 EDMA、

    今天、我们还发现、在这个错误发生后、RTI 计时器停止了。

    停止 UART 的 TX 和 RX 后的表达式值如上所示。

    您可以提出任何解决这个问题的建议吗?

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

    大家好、UART 和 SPI 的问题已通过使用不同的优先级和由于缓冲区填充错误而进行一些代码修改得到解决。 现在我们只面临一个问题、  

    1.如果我在 DMA 的 RX 部分接收到更多预期字节正在挂起/停止、这将停止 TX 和 RX。  

    例如、我要将源的预期 RX 计数设置为 150。 我的来源(国外项目)可以发送 150,300 或 450。 这取决于穿过传感器的速度。  

    如果我收到了 150、则没有问题。 如果我收到的超过出错。 我将 RX DMA 的大小保持在 150 个。  

    请建议如何进行整流。  

    谢谢。此致、

    S.Karthikean

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

    嗨、Karthi、  

    很高兴知道以前的问题已得到解决。 关于不同的 RX 大小、使用 DMA 时、始终需要事先知道要发送或接收的数据量。 如果 RX DMA 计数为 150、则它只能接收 150 个字节。 RX DMA 不能预计处理它没有准备好的额外数据。 为了适应更多数据、建议调整手动前的值或触发不同的 DMA 事务以接收更多数据。 希望这澄清了问题。  

    此致、  
    Pranav Siddappa.

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

    您好 Pranav、

    我们理解了 DMA 的操作、不可避免地提供准确的预期 RX 计数、因为源不在我们的控制范围内。 到目前为止、定期读取 DMA 缓冲区、而不依赖于回调中断。 一旦我们收到所需的数据(即我们知道起始字节和结束字节)、我们就会复制到本地缓冲区并清除 DMA。 将 DMA 大小保留为 1024、预期计数保留为 1024。 在填充和创建回调中断之前、我们会接收和复制数据并初始化 DMA。  到目前为止,它是有效的。 应遵守的若干标准。  

    谢谢。此致、

    S.Karthikean

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

    尊敬的 Karthi:  

    是否有关于此问题的任何更新?  1024 的 DMA 大小是否满足您的所有条件?

    此致、  
    Pranav Siddappa.