完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在(擦除)写入和读回时遇到了奇怪的问题,在 0x80000 以上的 SPI 闪存上,
无论我在编译时选择哪个选项: * make COMPILE=gcc BOOT=none APP=0 SPI_SPEED=40 SPI_MODE=QIO SPI_SIZE_MAP=6 >> i flashed : ** "eagle.flash.bin" @ 0x00000 ** "eagle.irom0text.bin" @ 0x40000 * make COMPILE=gcc BOOT=new APP=1 SPI_SPEED=40 SPI_MODE=QIO SPI_SIZE_MAP=6 >> i flashed : ** "boot_v1.4(b1).bin" @ 0x00000 ** "upgradeuser1.4096.new.6.bin" @ 0x01000 如果我(擦除)将数据写入 SPI Flash @ 0x3C000(我也尝试过 0x7C000),我可以成功读回它。 但是当我尝试(擦除)写入数据@ 0x8C000时,我无法读回(返回的数据不是我之前保存的)。 //#define PRIV_PARAM_START_SEC 0x3C // >> ok //#define PRIV_PARAM_START_SEC 0x7C // >> ok #define PRIV_PARAM_START_SEC 0x8C // >> fail struct structConfigData { char magic[16]; uint8_t switch1_mode; uint8_t switch1_timerHourOn1; uint8_t switch1_timerMinuteOn1; uint8_t switch1_timerHourOff1; uint8_t switch1_timerMinuteOff1; uint8_t switch1_timerRandomMinute1; uint8_t wifi_mode; // 0 = none, 1=AP, 2=Station 3=Both char wifi_station_SSID[32]; char wifi_station_password[64]; char wifi_softAP_SSID[32]; char wifi_softAP_password[64]; uint8 wifi_softAP_channel; AUTH_MODE wifi_softAP_authMode; uint8 wifi_softAP_SSID_hidden; }; struct structConfigData npConfigData; 将数据保存到闪存 spi_flash_erase_sector(PRIV_PARAM_START_SEC PRIV_PARAM_SAVE); spi_flash_write((PRIV_PARAM_START_SEC PRIV_PARAM_SAVE) * SPI_FLASH_SEC_SIZE, (uint32 *) &npConfigData, sizeof(struct structConfigData)); 回读它,我可以获取我以前保存的数据,前提是我将扇区设置为低于 0x80000 spi_flash_read((PRIV_PARAM_START_SEC PRIV_PARAM_SAVE) * SPI_FLASH_SEC_SIZE, (uint32 *) &npConfigData, sizeof(struct structConfigData)); 这是我的 Flash 下载工具屏幕截图 有什么建议吗?任何人? |
|
相关推荐
1个回答
|
|
SPI Flash 是一种非易失性存储器,通常用于嵌入式系统。在这种情况下,您使用的是 ESP8266 或 ESP32 系列的芯片。这些芯片具有内置的 SPI Flash 控制器,可以与外部 SPI Flash 存储器进行通信。然而,当您尝试在 0x80000 以上的地址进行读写操作时,可能会遇到一些问题。
以下是一些可能的原因和解决方案: 1. **地址映射限制**:ESP8266 和 ESP32 的 SPI Flash 控制器可能对地址映射有限制。在某些情况下,它们可能无法处理高于 0x80000 的地址。这可能是由于硬件或固件的限制。您可以尝试查看芯片的数据手册,了解其地址映射限制。 2. **分区表问题**:在编译时,您需要确保分区表正确配置。分区表定义了 Flash 中不同区域的起始地址和大小。如果分区表中的地址超出了 SPI Flash 控制器的限制,可能会导致读写操作失败。请检查您的分区表配置,确保地址在允许的范围内。 3. **编译器或固件问题**:您使用的编译器(如 GCC)或固件可能存在问题,导致在 0x80000 以上的地址读写失败。您可以尝试更新编译器或固件,看看是否能解决问题。 4. **SPI Flash 存储器限制**:不同的 SPI Flash 存储器可能具有不同的容量和性能特性。您需要确保所使用的 SPI Flash 存储器支持在 0x80000 以上的地址进行读写操作。请查阅 SPI Flash 存储器的数据手册,了解其性能和限制。 5. **SPI 速度和模式**:您提到的 SPI 速度为 40MHz,SPI 模式为 QIO。这些参数可能会影响 SPI Flash 的性能和可靠性。您可以尝试降低 SPI 速度或更改 SPI 模式,看看是否能解决问题。 6. **硬件连接问题**:请确保 SPI Flash 存储器与 ESP8266 或 ESP32 芯片之间的硬件连接正确。检查 SPI 引脚(如 MOSI、MISO、CLK 和 CS)是否连接正确,以及是否有任何可能影响通信的硬件问题。 7. **软件问题**:您使用的软件库或示例代码可能存在问题,导致在 0x80000 以上的地址读写失败。您可以尝试查找其他示例代码或库,看看是否能解决问题。 总之,要解决在 0x80000 以上的地址进行 SPI Flash 读写操作的问题,您需要从多个方面进行排查,包括硬件、固件、编译器、SPI Flash 存储器和软件库。希望这些建议能帮助您找到问题的原因并解决它。 |
|
|
|
只有小组成员才能发言,加入小组>>
343 浏览 0 评论
1192 浏览 1 评论
587浏览 6评论
484浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
468浏览 5评论
467浏览 4评论
443浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 20:58 , Processed in 0.677255 second(s), Total 47, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号