本文主要讲述了ESP8266芯片系列的实际内存布局。
复位向量
复位向量是40000080h,映射到内部ROM。
内存布局
地址 | 名称 | 大小 | 类型 | R/W | 描述 |
00000000h |
|
| Exc |
| 读取时产生错误。 |
20000000h |
|
| No |
| 00 80 00 00未被映射重复的模式。 |
3FF00000h | dport0 | 1000h | I/O | RW? | 内存映射的 I/O, 每100h重复一次。 |
3FF10000h |
|
| No |
| 未映射,都是0。 |
3FF20000h | ? |
| ? | RW? | 未确认的数据。 |
3FF30000h |
|
| No |
| 未映射, 都是0。 |
3FFC0000h | ? | 20000h | ? | RW? | 映射到所在地址的unit32, 这是什么? |
3FFE0000h |
|
| No |
| 未映射, 都是0。 |
3FFE8000h | dram0 | 14000h | RAM | RW | 用户数据内存,应用程序可以获的。 |
3FFFC000h |
| 4000h | RAM |
| ETS系统数据内存 |
40000000h | brom? | 10000h | ROM | RW? | 内部ROM。可写,但具体信息不清楚。 |
40010000h |
|
| No |
| 都是0。 假设未被映射。 |
40100000h | iram1 | 8000h | RAM | RW | 指令内存。 引导装载程序利用指令内存加载SPI Flash <40000h. |
40108000h | ? | 4000h | RAM | RW | 指令内存/FLASH高速缓存。 OTA 引导装载程序利用这一内存,如果dport0 register 0x3ff00024 的bit 4 (bit mask 0x10)清晰的话会映射到这里。 |
4010C000h | ? | 4000h | RAM | RW | 指令内存/FLASH高速缓存,如果dport0 register 0x3ff00024 的bit 3 (bit mask 0x8)清晰的话会映射到这里。 |
40110000h |
|
| ? |
| 都是0, 可能更多的是IRAM. |
40140000h |
|
| ? |
| 59 31 d8 ec的重复模式. |
40200000h |
|
| ? |
| SPI Flash被映射到这里. 映射硬件有32KB的缓存(未确认). 没有缓存的代码运行速度比IRAM的代码慢12-13倍,有缓存的代码运行速度和 IRAM代码一样快.。这一区域是可读的,因为数据4 字节对齐的。把FLASH映射到这一区域受17字节的 SPI CTRL存储器控制(0x60000208): 设置为这一字节就会映射FLASH, 清空字节后就不能影射了。 |
40300000h |
|
| ? |
| 00 80 00 00的未映射重复模式 |
60000000h | ? | 1000h | I/O | RW? | 没有缓存的 I/O (详见下表的 MMIO) |
60001000h | ? | 800h | ? | RW? | 没有缓存的 I/O (详见下表的MMIO ) |
60001800h | ? | 800h | ? | RW? | 没有缓存.。映射到60001000h? |
60002000h |
|
| Exc |
| 读取时产生错误。 |
70000000h |
| 90000000h | No |
| 00 80 00 00未映射重复的模式。 |
SPI Flash 内存格局(没有OTA 更新)
这是针对0.8及以上版本的ESP IoT SDK的。
地址 | 大小 | 名称 | 描述 |
00000h | 248k | app.v6.flash.bin | 用户应用 |
3E000h | 8k | master_device_key.bin | OTA设备密钥。未确认:没有OTA就没有使用这一密钥。 |
40000h | 240k | app.v6.irom0text.bin | SDK 库 |
7C000h | 8k | esp_init_data_default.bin | 默认配置 |
7E000h | 8k | blank.bin | 都是FFh. 可能是 WiFi配置 |
SPI Flash 内存格局(有OTA 更新)
这是针对0.8及以上版本的ESP IoT SDK的,支持OTA更新。
地址 | 大小 | 名称 | 描述 |
00000h | 4k | boot.bin | 引导装载程序 |
01000h | 64k | app.v6.flash1.bin | 用户应用,位置1 |
11000h | 180k | app.v6.irom0text1.bin | SDK库,位置1 |
3E000h | 8k | master_device_key.bin | OTA 设备密钥 |
40000h | 4k |
| 未使用 |
41000h | 64k | app.v6.flash1.bin | 用户应用,位置2 |
51000h | 180k | app.v6.irom0text1.bin | SDK库,位置2 |
7E000h | 8k | blank.bin | 都是FFh。可能是 WiFi配置。 |
异常向量表
地址 | 名称 |
40000010h | 调试异常 |
40000020h | NMI异常 |
40000030h | Kernel异常 |
40000050h | User异常 |
40000070h | Double Exception |
40000080h | 重置 |
内存映射的I/O寄存器
大多数都是60000000h。
基址 | 大小 | 名称 | 描述 |
60000000h | 80h | uart0 | The UART0 config registers, UART0 配置寄存器,详见示例/IoT_Demo/include/drivers/uart_register.h |
60000100h | 100h | spi1 | 未确认: SPI 控制器寄存器,详见示例/IoT_Demo/include/driver/spi_register.h |
60000200h | 100h | spi0 | 未确认: SPI 控制器寄存器, 详见示例/IoT_Demo/include/driver/spi_register.h |
60000300h | 74h | gpio | 未确认:计时器配置寄存器, 详见include/eagle_soc.h |
60000600h | 28h | timer | 未确认: 计时器配置寄存器, 详见include/eagle_soc.h |
60000700h | A4h | rtc | 未确认: RTC 配置寄存器,详见include/eagle_soc.h |
60000800h | 44h | iomux | IO MUX配置寄存器, 详见 include/eagle_soc.h |
60000d00h | >=8 | i2c | 未确认:内部 I2C 控制器注册,详见ROM functions rom_i2c_readReg, rom_i2c_writeReg |
60000F00h | 80h | uart1 | UART0 配置寄存器, 详见/IoT_Demo/include/drivers/uart_register.h |
60001000h | 100h | rtcb | RTC 备份内存, 详见 rtc_mem_backup |
60001100h | 100h | rtcs | RTC 系统内存,详见 system_rtc_mem_write |
60001200h | 200h | rtcu | RTC 用户内存 |
dport0 (3FF00000h-)
地址 | 字节 | 描述 |
3FF00014h | 0 | 清除时CPU运行速率为80MHz。置位时CPU运行速率为160MHz。请注意在改变字节时需要调用 os_update_cpu_frequency(int freq_in_mhz)。可能需要调整计时器。UART divisor没有自动更新,所以也需要调用uart_div_modify(uart_no, clock_freq_in_hz / baud_rate_in_baud)。 |
3FF00024h | 3 | 清除时IRAM映射为40108000h..4010BFFFh。置位时,这一区域为0。 |
| 4 | 清除时IRAM映射为4010C000h..4010FFFFh。置位时,这一区域为0。 |
iomux Pin寄存器 (60000804h-0000843h)
版权声明:
本译文仅用于学习和交流目的。转载请注明译者、出处,并保留文章的完整链接。
原文来源:https://github.com/
原文标题:esp8266/esp8266-wiki Memory Map
原文地址:https://github.com/esp8266/esp8266-wiki/wiki/Memory-Map