ESP8266 Flash

来自Jack's Lab
(版本间的差异)
跳转到: 导航, 搜索
(概述)
(系统参数区 (System param))
 
(未显示1个用户的28个中间版本)
第1行: 第1行:
 
==  概述 ==
 
==  概述 ==
  
4KB 为一个扇区 (Sector)
+
4KB 为一个扇区 (Sector), The last 16 sectors is the paramter area!
  
iBaihe 的参数: 0x3C * 4KB = 0x3C000
+
1MB flash is start at  0xF0000
  
COS Platform 参数:
+
4MB flash is start at 0x3F0000
+
(0x3C + 1) * 4KB = 0x3D000 (SAVE_0)
+
(0x3C + 2) * 4KB = 0x3E000 (SAVE_1)
+
(0x3C + 3) * 4KB = 0x3F000 (PARAM_FLAG)
+
  
<br><br>
+
<br>
  
 
=== 系统参数区 (System param)  ===
 
=== 系统参数区 (System param)  ===
第17行: 第13行:
 
始终为 Flash 的最后 16KB
 
始终为 Flash 的最后 16KB
  
* 8KB 为初始化射频参数 (esp_init_data_default.bin),4MB Flash 为:0x3FC000 - 0x3FDFFF
+
* 4KB 为初始化射频参数 (esp_init_data_default.bin); The last sector 12; 4MB Flash 为:0x3FC000 - 0x3FCFFF
* 8KB 为初始化系统参数 (blank.bin),4MB Flash 为:0x3FE000 - 0x3FFFFF
+
* 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 提供。
  
<br><br>
+
从 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)  ===
 
=== 用户参数区 (User param)  ===
  
 
指 Espressif 提供的示例 (IOT_Demo / AT) 中设定的用户参数区
 
指 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)
  
 
<br><br>
 
<br><br>
第39行: 第51行:
  
 
[[文件:Esp8266-flash-layout-no-ota-1024.png]]
 
[[文件:Esp8266-flash-layout-no-ota-1024.png]]
 +
 +
[[文件:Esp8266-flash-layout-no-ota-4096.png]]
  
 
<pre>
 
<pre>
第57行: 第71行:
  
 
== Layout With OTA ==
 
== Layout With OTA ==
 +
 +
=== 512 和 1024KB ===
  
 
[[文件:Esp8266-flash-layout-ota.png]]
 
[[文件:Esp8266-flash-layout-ota.png]]
第63行: 第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

Esp8266-flash-layout-no-ota.png

Esp8266-flash-layout-no-ota-4m.png

Esp8266-flash-layout-no-ota-512.png

Esp8266-flash-layout-no-ota-1024.png

Esp8266-flash-layout-no-ota-4096.png

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

Esp8266-flash-layout-ota.png

Esp8266-flash-layout-ota-512.png

Esp8266-flash-layout-ota-1024.png


[编辑] 3.2 4096KB

Esp8266-flash-layout-ota-4m.png

Esp8266-flash-layout-ota-4096.png



[编辑] 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.




[编辑] 7 Reference

















个人工具
名字空间

变换
操作
导航
工具箱