完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我试图测量 spi_flash_erase_sector() 速度,结果出奇地慢......擦除 4096 字节长的扇区需要超过 3000000 个周期。平均值约为 3500000。假设我们有 80MHz 和 4Mb 内存,完全内存擦除大约需要 50 秒,但 esptool 的速度要快得多(我认为是 10 倍)。真的有那么慢吗?很可能我做错了什么(测量、计算或错误的函数使用)。 请指出我的错误。
uint32_t getCycleCount() { uint32_t ccount; __asm__ __volatile__("esync; rsr %0,ccount":"=a" (ccount)); return ccount; } #define BEGIN_MEASURE startTime = getCycleCount(); #define PRINT_TIME(x) endTime = getCycleCount(); printf(x); printf("%d rn", endTime - startTime); ... uint32_t addr = 0x160000; portTickType startTime, endTime; BEGIN_MEASURE if (flashEraseSector((addr / SPI_FLASH_SEC_SIZE)) != SPI_FLASH_RESULT_OK) printf("error erase sectorn"); PRINT_TIME("erase sector: ") BEGIN_MEASURE if (flashEraseSector((addr / SPI_FLASH_SEC_SIZE) + 1) != SPI_FLASH_RESULT_OK) printf("error erase sectorn"); PRINT_TIME("erase sector: ") |
|
相关推荐
1个回答
|
|
从您提供的信息来看,您正在尝试测量 SPI Flash 擦除扇区的速度。首先,我们来分析一下可能影响速度的因素:
1. **硬件性能**:不同的 SPI Flash 芯片和 ESP32 模块可能具有不同的性能。请确保您使用的硬件支持较高的擦除速度。 2. **SPI 时钟频率**:SPI 时钟频率对擦除速度有很大影响。请检查您的 SPI 时钟频率设置,确保它设置得当。 3. **软件实现**:您提供的代码片段中,使用了 `__asm__` 来获取周期计数。请确保这部分代码正确无误,并且与您的测量目标一致。 4. **测量方法**:在测量速度时,确保您正确地计算了开始和结束时间。您可以尝试在擦除操作前后调用 `getCycleCount()` 函数,然后计算差值。 5. **esptool 的速度**:您提到 esptool 的速度要快得多。这可能是因为 esptool 优化了擦除操作,或者使用了不同的擦除策略。您可以查看 esptool 的实现,了解它是如何提高速度的。 为了解决您的问题,我建议您按照以下步骤进行: 1. 确保您的硬件支持较高的擦除速度。检查 SPI Flash 芯片的数据手册,了解其性能指标。 2. 检查 SPI 时钟频率设置,确保它设置得当。 3. 仔细检查您的测量方法,确保您正确地计算了开始和结束时间。 4. 尝试使用 esptool 进行擦除操作,观察其速度,并了解其实现方式。 5. 如果可能,尝试在其他 ESP32 模块或 SPI Flash 芯片上进行测试,以排除硬件问题。 通过以上步骤,您应该能够找到影响擦除速度的原因,并采取相应的措施来提高速度。 |
|
|
|
只有小组成员才能发言,加入小组>>
171个成员聚集在这个小组
加入小组430 浏览 1 评论
1290 浏览 1 评论
598浏览 6评论
494浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
480浏览 5评论
476浏览 4评论
461浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-11 05:55 , Processed in 0.751245 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号