完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我使用FreeRTOS(xTaskCreatePinnedToCore)进行多核分工,core 0做SPI高速的读取不间断,core 1做WiFi的连结与传输。
如果程式只有单独SPI读取并没有问题,但在另一个核心执行不同任务时,却会影响到SPI的读取,造成读的资料错误,这是什么原因呢? 明明是在不同核心下工作,怎么会互相影响到?尤其是在wifi连接瞬间,SPI读到错误值越多。 SPI是slave,只做接收,CLK速率8K ESP32_CPU_Freq为240M,160M时错误更多 麻烦帮解答,谢谢! |
|
相关推荐
1个回答
|
|
ESP32双核影响SPI读取的问题可能是由以下几个原因导致的:
1. **共享资源冲突**:尽管你使用了FreeRTOS将任务分配到不同的核心,但是SPI通信可能仍然使用了一些共享资源,如SPI控制器、内存等。当两个核心同时访问这些共享资源时,可能会导致冲突。 2. **时钟频率变化**:ESP32的CPU频率可以在80MHz和240MHz之间切换。如果在SPI读取过程中,CPU频率发生变化,可能会影响SPI的时钟速率,从而导致读取错误。 3. **中断优先级问题**:在使用FreeRTOS时,可能存在中断优先级设置不当的问题。如果核心1的中断优先级高于核心0,那么在核心1执行任务时,可能会抢占核心0的中断资源,影响SPI读取。 4. **任务切换开销**:尽管SPI读取任务被分配到了核心0,但是在任务切换时,可能会产生一定的开销。这种开销可能会导致SPI读取的时序出现问题,从而影响数据的正确性。 为了解决这个问题,你可以尝试以下方法: 1. **确保SPI通信使用独立资源**:检查SPI通信是否使用了共享资源,如SPI控制器、内存等。如果可能,尽量使用独立的资源以避免冲突。 2. **锁定CPU频率**:在SPI读取过程中,锁定CPU频率,避免在读取过程中发生频率变化。 3. **合理设置中断优先级**:检查并调整中断优先级,确保核心0的SPI读取任务不会被核心1的任务抢占。 4. **优化任务切换**:尽量减少任务切换的频率,以降低任务切换带来的开销。可以尝试使用FreeRTOS的动态优先级调整功能,以实现更高效的任务调度。 5. **增加错误检测和处理机制**:在SPI读取过程中,增加错误检测和处理机制,如CRC校验、重试机制等,以提高数据的准确性。 6. **降低SPI时钟速率**:如果可能,尝试降低SPI的时钟速率,以减少时序问题对数据准确性的影响。 通过以上方法,你可以尝试解决ESP32双核影响SPI读取的问题。希望这些建议能对你有所帮助! |
|
|
|
只有小组成员才能发言,加入小组>>
1123 浏览 1 评论
574浏览 6评论
477浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
461浏览 5评论
461浏览 4评论
435浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 04:17 , Processed in 0.789802 second(s), Total 79, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号