完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
idf版本:v3.3 v4.2
esp32开发板:nodemcu,esp32s 问题描述: esp32作为spi master与STM32g0作为spi slave进行dma 全双工通讯,在26.67MHz时钟下满带宽持续将两个芯片各自32字节的内容使用DMA发送给对方。代码修改自idf的spi master demo,修改寄存器实现SPI_DMA_CONtiNUE模式持续将32字节内容发送和接收。 测试发现,在上电开始SPI开始传输后每过161秒接收到的数据都会有一个字节的丢失,导致接收到的数据错位。多次测量或修改寄存器设置后也都是这种现象。如果将时钟改慢为20M则会每215秒丢失一字节。个人推测可能是esp32接收的某种机制导致错开一个字节(8位),否则无法解释为什么每次都会每隔同样的时间、丢失同样大小的(8位bit,一个字节)数据,ESP32发给STM32的数据始终是正确的(MOSI),STM32发给ESP32的数据通过逻辑分析仪确认也没问题(MISO)。 针对这个问题现已调试多日不见解决,还望赐教。 |
|
相关推荐
1个回答
|
|
根据您提供的信息,我将分析可能导致ESP32 SPI Master DMA环形接收长时间后数据出错的原因,并提供一些建议。
1. 时钟频率问题:您提到在26.67MHz时钟频率下,每161秒丢失一个字节;而在20MHz时钟频率下,每215秒丢失一个字节。这可能表明时钟频率与数据丢失之间存在一定的关系。建议您检查SPI时钟设置,确保时钟频率稳定且符合预期。 2. DMA中断处理:在DMA传输过程中,可能存在中断处理不当的问题。请确保在DMA传输完成后,正确处理中断,更新接收缓冲区指针,并重新启动DMA传输。 3. 缓冲区溢出:长时间传输数据时,需要确保接收缓冲区足够大,以避免数据溢出。请检查您的代码,确保接收缓冲区大小合适,并且在接收到数据后及时处理。 4. 硬件问题:长时间运行可能导致硬件性能下降,从而影响数据传输的稳定性。请检查您的ESP32和STM32G0开发板,确保它们在长时间运行过程中没有出现硬件故障。 5. 软件问题:请检查您的代码,确保没有逻辑错误或资源泄露等问题。此外,您可以尝试更新ESP-IDF版本,看看是否有改进或修复了相关问题。 6. 电源问题:长时间运行可能导致电源波动,从而影响数据传输的稳定性。请确保您的开发板电源稳定,或者尝试使用更高质量的电源模块。 7. 通信协议问题:请检查您的通信协议,确保在长时间传输过程中,数据包的完整性和正确性得到保证。 综上所述,您可以从以上几个方面进行排查和优化,以解决ESP32 SPI Master DMA环形接收长时间后数据出错的问题。希望这些建议对您有所帮助。 |
|
|
|
只有小组成员才能发言,加入小组>>
542浏览 6评论
454浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
434浏览 5评论
436浏览 4评论
409浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 09:22 , Processed in 0.809027 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号