2398434_zh-CN

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

2398434_zh-CN

2398434_zh-CN

IMXRT1172 LPSPI 带 EDMA 随机间歇 SPI SR = REF 误差

您好,

在使用 LPSPI EDMA 传输 API 时,有时当 SDK 调用我的回调函数(EDMA 完成后)时,如果我查看 LPSPI SR 寄存器,大约每 5-10 次就会有一次 REF 位被设置(读取错误标志/溢出)。我的SPI时钟运行频率为500Khz。我不太确定为什么会出现 SPI RX 溢出,因为 SPI 时钟速度远不够快,不会导致 DMA 跟不上。有什么办法可以排查这个问题吗?还有其他人遇到过这个问题吗?即使出现溢出,数据看起来也总是正确的(我在每次传输之间都将缓冲区清零,所以我知道我看到的不是旧的、过时的数据)。我正在使用传输 API 进行同步发送/接收,并且每 4 毫秒进行一次传输。时间安排上应该不会有问题。

谢谢!

-m

Re: IMXRT1172 LPSPI with EDMA random intermittent SPI SR = REF error

嗨@nxp16 ,

非常感谢您对我们产品的关注以及对我们社区的使用。

SR[REF] 表示接收 FIFO 溢出。如果在传输过程中确实设置了此标志,建议的恢复方法是停止传输,清空 RX FIFO,清除 REF,然后重新开始传输。

然而,在 500 kHz 时,这看起来不像是一个正常的 DMA 带宽问题,假设 RX EDMA 通道在 SPI 时钟开始之前已经准备/启用。由于接收到的数据仍然正确,我建议首先检查 REF 是否为过期标志,或者是否由传输开始/停止序列设置。

如需排除故障,请尝试以下操作:
1. 在开始每次新的转账之前,清除 SR[REF]。
2. 在 TX 开始生成时钟之前,确保 RX DMA 已启用。
3. 检查传输过程中 LPSPI 是否被禁用/重新启用。如果是,请应用相应的勘误解决方法:启用 LPSPI 后清除 REF,或在重新启用 LPSPI 前重置 LPSPI。

mayliu1_0-1784877413675.png

希望对你有帮助

顺祝商祺!

5月

Re: IMXRT1172 LPSPI with EDMA random intermittent SPI SR = REF error

勘误表中提到了两种解决方法:清除 SR 中的位,以及重置外设。遗憾的是,勘误表中关于第一个问题的说法似乎有误,因为 SDK 已经实现了这一点,而且它并不能解决这个问题。遗憾的是,对我来说,重置外设不是一个可行的选择,因为之后我必须重新配置所有内容(它会清除所有寄存器)。目前,我假设如果 DMA 成功完成但出现 REF 错误,那么这是一个假错误,我会忽略它。

谢谢!

-m

Re: IMXRT1172 LPSPI with EDMA random intermittent SPI SR = REF error

嗨@Mike_M3 ,

请检查 LPSPI 在传输过程中是否已禁用并重新启用。如果答案是肯定的,最好避免这种顺序。如果需要禁用/重新启用,请按照文档中记录的解决方法进行操作。

清除 REF 后,请在开始下一次传输之前验证 RX FIFO 状态和接收到的数据,并记录/统计此情况以便进一步调试。


顺祝商祺!

5月

Re: IMXRT1172 LPSPI with EDMA random intermittent SPI SR = REF error

遗憾的是,SDK 会在传输过程中禁用和启用 LPSPI 外设,而我对此无能为力。

谢谢!

-m

Re: IMXRT1172 LPSPI with EDMA random intermittent SPI SR = REF error

谢谢你的更新。

SDK 可能会在内部禁用/重新启用 LPSPI,但应用程序仍应确保在开始下一次传输之前,之前的 LPSPI 总线传输已完成。

EDMA回调仅指示DMA完成。如果在 SR[MBF] 仍然设置或 SR[TCF] 未设置的情况下,从 EDMA 回调立即开始下一次传输,则 SDK 可能会在 LPSPI 未完全空闲时进入下一次传输设置。

请等待 SR[TCF]=1 或 SR[MBF]=0 后再提交下一次 LPSPI EDMA 传输。

标记 (1)
无评分
版本历史
最后更新:
‎07-29-2026 02:36 AM
更新人: