本文主要讲述了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
本文详细介绍了ESP8266芯片的内存布局,包括复位向量、SPI Flash内存格局(无OTA更新和有OTA更新)、异常向量表、内存映射的I/O寄存器和dport0区域。内容主要针对0.8及以上版本的ESP IoT SDK,对于理解ESP8266的内存管理至关重要。
2113

被折叠的 条评论
为什么被折叠?



