It is based on:
- initial published memory map posted on this site (which was very incomplete and had many things guessed)
- own findings added
I have tried to make a contigeuous list, i.e. without gaps, that explains why there is '-' here and there, it simply means that I don't know what's there. Most of the time it's "nothing" or another area duplicated, but hey, you never know.
Please check and if possible, add to this!
Please note: at 0x3fffe000 there is an area of 2860 bytes that is never used. It may be used in some SDK function I am not using, who knows. I am using it for a log buffer and it never fails. After this area, this an area of a few bytes that do get overwritten once, somewhere at the beginning of the user application. But it's after user_init2() so I am not sure where exactly this does happen. After that area, seem to be more, smaller, areas that are never used, but I didn't have the guts (nor need...) to use them
esp8266 memory map flash memory map (start from 40100000)
segment size sub size start size start
- 700.00000
- 600.02000 I/O
- 600.01800 I/O
- 600.01000 I/O
- 600.00000 I/O
- 403.00000
irom0 402.10000
SPI-MAPPED 402.00000 <--- 10000 irom0
- 401.40000
- 401.10000
icache1 4000 401.0c000 4000 0c000 cache / "dummy when writing composite image"
icache0 4000 401.08000 4000 08000 cache / "dummy when writing composite image"
iram1 8000 401.00000 <--- 8000 00000 iram0
- 400.10000
brom 10000 400.00000 stack bottom
- 14cc 3ff.feb34 stack top (grows downwards)
- 8 3ff.feb2c "system data ram #2"
- b2c 3ff.fe000 ram free to use (apparently)
- 2000 3ff.fc000 "system data ram #1"
dram0 18000 14000 3ff.e8000 bss, rodata, data, system heap
- 3ff.e0000
- 20000 3ff.c0000
- 3ff.30000
- 3ff.20000
- 3ff.00010
dport0 10 3ff.00000
- 200.00000
- 000.00000