• 392查看
  • 0回复

[芯片硬件] SPI传输时为何丢失2个数据?

[复制链接]


该用户从未签到

发表于 27-4-2024 10:12:51 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


SPI传输时为何丢失2个数据?w1.jpg

有人使用STM32F4芯片验证SPI功能。当使用片内两个SPI模块基于中断方式进行收发时,发现总是出现接收数据丢失的情况,貌似总丢失末尾2个数据。代码使用HAL库提供的API函数。这是怎么回事呢?

我拿STM32F407开发板进行验证测试。使用SPI1做发送,SPI3做接收,都使用中断方式。

SPI传输时为何丢失2个数据?w2.jpg

很快重现了问题现象,即发生接收数据丢失的情形。见下图验证结果,发了8个数据,只收到6个数据。

SPI传输时为何丢失2个数据?w3.jpg

现在是同一颗芯片,即同一CPU基于中断方式完成收发。怀疑会不会是不同SPI收发模块中断优先级的安排不合理导致的问题。如果二者优先级一样的话,这里的发送中断往往先于接收中断的产生,势必会出现接收不及时的情形。通过对代码跟踪调试,也的确发现了SPI接收溢出的现象,即接收数据提取不及时。

SPI传输时为何丢失2个数据?w4.jpg

这样分析下来,感觉数据丢失应该跟通信速率有关,丢失数据的多少不应该固定。于是,我大幅度提升SPI通信速率再行测试,果真丢失的数据更多了。见下图测试结果,发8个数据只收到1个数据。【前面测试时SPI波特率是5.25Mb/s,现在改为21Mb/s了】

SPI传输时为何丢失2个数据?w5.jpg

我将SPI3接收中断的优先级调得比SPI1发送中断的还高,如下图所示。

SPI传输时为何丢失2个数据?w6.jpg

基于重新调整中断优先级后的代码再做测试,结果就完全正常了。

SPI传输时为何丢失2个数据?w7.jpg

当然,我们还可以有其它灵活处理的办法。比方发送用中断,接收用DMA,或者发送用轮训,接收用中断或DMA,或者都用DMA方式也行。

这里的核心问题是中断优先级没有合理安排好。STM32ARM核中断的内容不多,不过内容不多的东西往往意味着使用上更为灵活。好,今天的话题就分享到这里。



该用户已被删除
发表于 12-3-2025 01:33:00 | 显示全部楼层
针对您提到的问题,我认为可能存在以下几个原因:

1. 中断优先级配置问题:不同SPI模块的中断优先级可能存在冲突或不合理配置,导致数据丢失。建议检查中断配置,确保收发中断优先级设置合理。
2. SPI配置参数问题:SPI通信过程中的一些配置参数可能设置不当,如数据位、时钟速率等。建议检查SPI的配置参数,确保它们符合通信需求。
3. 数据处理逻辑问题:在中断处理函数中,可能存在数据处理逻辑的错误,导致部分数据丢失。建议仔细检查中断处理函数的实现,确保数据处理的正确性。

为了解决这个问题,您可以尝试以下步骤:

1. 检查并确认中断优先级的配置,确保收发中断优先级设置合理。
2. 仔细检查SPI的配置参数,确保它们符合通信需求。
3. 在中断处理函数中增加调试信息,以便跟踪数据的接收情况,检查是否存在数据处理逻辑的错误。

希望以上建议能帮助您解决问题。如果问题仍然存在,建议您提供更多关于代码实现和配置的信息,以便更深入地分析问题原因。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 19-8-2025 04:03 , Processed in 0.383998 second(s), 36 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.