ESP8266 Flash
(→Layout Without OTA) |
(→系统参数区 (System param)) |
||
(未显示1个用户的29个中间版本) | |||
第1行: | 第1行: | ||
== 概述 == | == 概述 == | ||
− | 4KB 为一个扇区 (Sector) | + | 4KB 为一个扇区 (Sector), The last 16 sectors is the paramter area! |
+ | |||
+ | 1MB flash is start at 0xF0000 | ||
+ | |||
+ | 4MB flash is start at 0x3F0000 | ||
+ | |||
+ | <br> | ||
+ | |||
+ | === 系统参数区 (System param) === | ||
+ | |||
+ | 始终为 Flash 的最后 16KB | ||
+ | |||
+ | * 4KB 为初始化射频参数 (esp_init_data_default.bin); The last sector 12; 4MB Flash 为:0x3FC000 - 0x3FCFFF | ||
+ | * 8KB 为初始化系统参数 (blank.bin); The last sector 13 and 14, 4KB + 4KB mirror; 4MB Flash 为:0x3FD000 - 0x3FEFFF | ||
+ | * 4KB is bootloader parameters area; The last sector 15; 4MB flash is at: 0x3FF000 | ||
+ | |||
+ | 皆由 SDK 提供。 | ||
+ | |||
+ | 从 SDK 1.5.4.1 开始,增加一个 sector 用于 RF Cal Sector,其为 The last secotor 11;4MB Flash 为: 0x3FB000 - 0x3FBFFF | ||
+ | |||
+ | |||
+ | For MJYUN: | ||
+ | |||
+ | * 8KB is MJYUN parameter area; The last sector 4 and 5, 4KB + 4KB mirror; 4MB flash is: 0x3F4000 - 0x3F5FFF | ||
+ | |||
+ | <br> | ||
+ | |||
+ | === 用户参数区 (User param) === | ||
+ | |||
+ | 指 Espressif 提供的示例 (IOT_Demo / AT) 中设定的用户参数区 | ||
iBaihe 的参数: 0x3C * 4KB = 0x3C000 | iBaihe 的参数: 0x3C * 4KB = 0x3C000 | ||
第10行: | 第39行: | ||
(0x3C + 2) * 4KB = 0x3E000 (SAVE_1) | (0x3C + 2) * 4KB = 0x3E000 (SAVE_1) | ||
(0x3C + 3) * 4KB = 0x3F000 (PARAM_FLAG) | (0x3C + 3) * 4KB = 0x3F000 (PARAM_FLAG) | ||
− | |||
− | |||
− | |||
− | |||
<br><br> | <br><br> | ||
第26行: | 第51行: | ||
[[文件:Esp8266-flash-layout-no-ota-1024.png]] | [[文件:Esp8266-flash-layout-no-ota-1024.png]] | ||
+ | |||
+ | [[文件:Esp8266-flash-layout-no-ota-4096.png]] | ||
<pre> | <pre> | ||
第44行: | 第71行: | ||
== Layout With OTA == | == Layout With OTA == | ||
+ | |||
+ | === 512 和 1024KB === | ||
[[文件:Esp8266-flash-layout-ota.png]] | [[文件:Esp8266-flash-layout-ota.png]] | ||
第50行: | 第79行: | ||
[[文件:Esp8266-flash-layout-ota-1024.png]] | [[文件:Esp8266-flash-layout-ota-1024.png]] | ||
+ | |||
+ | <br> | ||
+ | |||
+ | === 4096KB === | ||
+ | |||
+ | [[文件:Esp8266-flash-layout-ota-4m.png]] | ||
+ | |||
+ | [[文件:Esp8266-flash-layout-ota-4096.png]] | ||
<br><br> | <br><br> | ||
+ | |||
+ | == SPI Flash Format == | ||
+ | |||
+ | * http://esp8266-re.foogod.com/wiki/SPI_Flash_Format | ||
<br><br> | <br><br> | ||
− | <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> | + | |
+ | == SPI Flash Mode == | ||
+ | |||
+ | * QIO , for flash that support quad r/w operation(e.g. W25Q) | ||
+ | |||
+ | * QOUT, for flash that support quad read operation(e.g. W25Q) | ||
+ | |||
+ | * DIO, for flash that support dual r/w operation(e.g. W25Q &W25X) | ||
+ | |||
+ | * DOUT, for flash that support dual read operation(e.g. W25Q &W25X) | ||
+ | |||
+ | |||
+ | 经测试: | ||
+ | |||
+ | * Winbond 25Q32B 可工作于 DIO / DOUT / QIO /QOUT (Noduino Falcon) | ||
+ | |||
+ | * BergMicro 25Q32A 只可工作于 DIO / DOUT (NodeMCU V1.0 可能是 ESP-12E 接线的问题) | ||
+ | |||
+ | * MXIC 25L80 (小 K mini)只可工作于 DOUT | ||
+ | |||
+ | <br><br> | ||
+ | |||
+ | == Flash Memory Map == | ||
+ | |||
+ | ;; Map the flash: | ||
+ | |||
+ | <source lang=c> | ||
+ | /* | ||
+ | * Memory map first 8Mbit of flash | ||
+ | * address space is: 0x4020 0000 - 0x402F FFFF | ||
+ | */ | ||
+ | Cache_Read_Enable (0, 0, 0); | ||
+ | </source> | ||
+ | |||
+ | |||
+ | ;; Unmap the flash: | ||
+ | |||
+ | <source lang=c> | ||
+ | Cache_Read_Disable(); | ||
+ | </source> | ||
+ | |||
+ | <br><br> | ||
+ | |||
+ | === Cache_Read_Enable === | ||
+ | |||
+ | void Cache_Read_Enable(uint8 odd_even, uint8 mb_count, unt8 no_idea); | ||
+ | |||
+ | Valid values for odd_even: | ||
+ | |||
+ | 0 – clears bits 24 & 25 of control register 0x3FF0000C | ||
+ | 1 – clears bit 24, sets bit 25 | ||
+ | |||
+ | other – clears bit 25, sets bit 24 | ||
+ | |||
+ | |||
+ | Function of odd_even: | ||
+ | |||
+ | 0 – allows access to even numbered mb | ||
+ | 1 – allow access to odd numbered mb | ||
+ | |||
+ | other – appears to do the same as 1, there must be a difference but I haven’t worked out what it it | ||
+ | |||
+ | |||
+ | Valid values for mb_count: | ||
+ | |||
+ | 0-7 – set bits 16, 17 & 18 of control register 0x3FF0000C | ||
+ | |||
+ | |||
+ | Function of mb_count: | ||
+ | |||
+ | Which odd or even bank to map (according to odd_even option) | ||
+ | |||
+ | e.g. mb_count = 0, odd_even = 0 -> map first 8Mbit of flash | ||
+ | e.g. mb_count = 0, odd_even = 1 -> map second 8Mbit of flash | ||
+ | e.g. mb_count = 1, odd_even = 0 -> map third 8Mbit of flash | ||
+ | e.g. mb_count = 1, odd_even = 1 -> map fourth 8Mbit of flash | ||
+ | |||
+ | Valid values for no_idea: | ||
+ | |||
+ | 0 – sets bit 3 of 0x3FF00024 | ||
+ | 1 – sets bit 26 of 0x3FF0000C and sets bits 3 & 4 of 0x3FF00024 | ||
+ | |||
+ | |||
+ | Function of no_idea: | ||
+ | |||
+ | The clue is in the name, I can’t work out what this does from my experiments, but the SDK always sets this to 1. | ||
+ | |||
+ | |||
+ | * Reverse engineered by Richard Burton: http://richard.burtons.org/2015/06/12/esp8266-cache_read_enable/ | ||
+ | |||
+ | <br><br> | ||
+ | |||
+ | == Reference == | ||
+ | |||
+ | * https://www.winbond.com/hq/product/code-storage-flash-memory/serial-nor-flash/?__locale=en&density=8Mbit(1MB)#density | ||
+ | |||
+ | <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> |
2016年7月9日 (六) 22:35的最后版本
目录 |
[编辑] 1 概述
4KB 为一个扇区 (Sector), The last 16 sectors is the paramter area!
1MB flash is start at 0xF0000
4MB flash is start at 0x3F0000
[编辑] 1.1 系统参数区 (System param)
始终为 Flash 的最后 16KB
- 4KB 为初始化射频参数 (esp_init_data_default.bin); The last sector 12; 4MB Flash 为:0x3FC000 - 0x3FCFFF
- 8KB 为初始化系统参数 (blank.bin); The last sector 13 and 14, 4KB + 4KB mirror; 4MB Flash 为:0x3FD000 - 0x3FEFFF
- 4KB is bootloader parameters area; The last sector 15; 4MB flash is at: 0x3FF000
皆由 SDK 提供。
从 SDK 1.5.4.1 开始,增加一个 sector 用于 RF Cal Sector,其为 The last secotor 11;4MB Flash 为: 0x3FB000 - 0x3FBFFF
For MJYUN:
- 8KB is MJYUN parameter area; The last sector 4 and 5, 4KB + 4KB mirror; 4MB flash is: 0x3F4000 - 0x3F5FFF
[编辑] 1.2 用户参数区 (User param)
指 Espressif 提供的示例 (IOT_Demo / AT) 中设定的用户参数区
iBaihe 的参数: 0x3C * 4KB = 0x3C000
COS Platform 参数:
(0x3C + 1) * 4KB = 0x3D000 (SAVE_0) (0x3C + 2) * 4KB = 0x3E000 (SAVE_1) (0x3C + 3) * 4KB = 0x3F000 (PARAM_FLAG)
[编辑] 2 Layout Without OTA
Address Size Name Description 00000h 4k boot.bin Bootloader 3C000h 14k Param Start Sector 3D000h 1x4k Param Saved 0 3E000h 1x4k Param Saved 1 3F000h 1x4k Param Flag 40000h 240k app.v6.irom0text.bin SDK libraries 7C000h 8k esp_init_data_default.bin Default configuration 7E000h 8k blank.bin Filled with FFh. May be WiFi configuration
[编辑] 3 Layout With OTA
[编辑] 3.1 512 和 1024KB
[编辑] 3.2 4096KB
[编辑] 4 SPI Flash Format
[编辑] 5 SPI Flash Mode
- QIO , for flash that support quad r/w operation(e.g. W25Q)
- QOUT, for flash that support quad read operation(e.g. W25Q)
- DIO, for flash that support dual r/w operation(e.g. W25Q &W25X)
- DOUT, for flash that support dual read operation(e.g. W25Q &W25X)
经测试:
- Winbond 25Q32B 可工作于 DIO / DOUT / QIO /QOUT (Noduino Falcon)
- BergMicro 25Q32A 只可工作于 DIO / DOUT (NodeMCU V1.0 可能是 ESP-12E 接线的问题)
- MXIC 25L80 (小 K mini)只可工作于 DOUT
[编辑] 6 Flash Memory Map
- Map the flash
/* * Memory map first 8Mbit of flash * address space is: 0x4020 0000 - 0x402F FFFF */ Cache_Read_Enable (0, 0, 0);
- Unmap the flash
Cache_Read_Disable();
[编辑] 6.1 Cache_Read_Enable
void Cache_Read_Enable(uint8 odd_even, uint8 mb_count, unt8 no_idea);
Valid values for odd_even:
0 – clears bits 24 & 25 of control register 0x3FF0000C 1 – clears bit 24, sets bit 25
other – clears bit 25, sets bit 24
Function of odd_even:
0 – allows access to even numbered mb 1 – allow access to odd numbered mb
other – appears to do the same as 1, there must be a difference but I haven’t worked out what it it
Valid values for mb_count:
0-7 – set bits 16, 17 & 18 of control register 0x3FF0000C
Function of mb_count:
Which odd or even bank to map (according to odd_even option)
e.g. mb_count = 0, odd_even = 0 -> map first 8Mbit of flash e.g. mb_count = 0, odd_even = 1 -> map second 8Mbit of flash e.g. mb_count = 1, odd_even = 0 -> map third 8Mbit of flash e.g. mb_count = 1, odd_even = 1 -> map fourth 8Mbit of flash
Valid values for no_idea:
0 – sets bit 3 of 0x3FF00024 1 – sets bit 26 of 0x3FF0000C and sets bits 3 & 4 of 0x3FF00024
Function of no_idea:
The clue is in the name, I can’t work out what this does from my experiments, but the SDK always sets this to 1.
- Reverse engineered by Richard Burton: http://richard.burtons.org/2015/06/12/esp8266-cache_read_enable/
[编辑] 7 Reference