esp8266/esp8266-wiki内存映射

本文详细介绍了ESP8266芯片的内存布局,包括复位向量、SPI Flash内存格局(无OTA更新和有OTA更新)、异常向量表、内存映射的I/O寄存器和dport0区域。内容主要针对0.8及以上版本的ESP IoT SDK,对于理解ESP8266的内存管理至关重要。
摘要由CSDN通过智能技术生成


本文主要讲述了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代码一样快.。这一区域是可读的,因为数据字节对齐的。把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



c:/users/86178/appdata/local/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: C:\Users\86178\AppData\Local\Temp\arduino\cores\b5342b8f51c7a5f33a81df0845d289d9\core.a(core_esp8266_main.cpp.o): in function `__loop_end': C:\Users\86178\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266/core_esp8266_main.cpp:168: undefined reference to `setup' c:/users/86178/appdata/local/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: C:\Users\86178\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266/core_esp8266_main.cpp:168: undefined reference to `loop' c:/users/86178/appdata/local/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: C:\Users\86178\AppData\Local\Temp\arduino\cores\b5342b8f51c7a5f33a81df0845d289d9\core.a(core_esp8266_main.cpp.o): in function `loop_wrapper()': C:\Users\86178\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266/core_esp8266_main.cpp:174: undefined reference to `setup' c:/users/86178/appdata/local/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: C:\Users\86178\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\cores\esp8266/core_esp8266_main.cpp:175: undefined reference to `loop' collect2.exe: error: ld returned 1 exit status exit status 1 Compilation error: exit status 1
07-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值