1. ESP32 Memory 구성
ESP32 혹은 ESP32 Module의 Hardware Memory 구성은 다음 과 같다.
- Embedded or Internal Memory(ROM/SRAM)
- External Memory(SPI-Flash/SPI-PSRAM)
ESP32의 전반적인 Memory 구성과 사용목적을 세부적으로 알기위해서 아래와 같이 정리하고자 한다.
1.1. ESP32 System Address MAP 구성
ESP32 System 기반의 물리적인 Address Map 과 각 Memry 구조를 파악해보도록 하자
- ESP32 System Address Map
각 Bus Type 기반으로 Internal/External Address Map 기억
- Embedded Memory (Internal Memory)
- External Memory (SPI Flash/SPI RAM)
- Peripheral (System Resgier)
https://www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf |
ESP32 Memory Map
- ESP32 System Address Map 연결구성
이외의 Address Map으로 각각 Pheripheral 이 어떻게 연결되어 구성되었는지를 쉽게 파악가능하다.
- External Memory의 경우, Cache/MMU를 사용
- Internal Memory 의 경우, Cache 미사용
https://www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf |
상위 Address Map System의 전체구조를 파악하기 쉬운 중요한 것이므로 세부적으로 아래와 같이 분석
- System Address Map -> Cache (External Memory)
- 0x3F40_0000 - 0x3F7F_FFFF : Data/ 4MB / External Memory
- 0x3F80_0000 - 0x3FEF_FFFF : Data/ 4MB / External Memory
- 0x400C_2000 - 0x40BF_FFFF: Instruction/ 11.5MB(11512KB) / External Memory
Cache Address Map 은 Cache(32KBx2)->MMU->External Memory 접근가능
2번의 0x3F80_0000 - 0x3FBF_FFFF: 이곳까지만 사용하며 이외부분은 확장성
- System Address Map -> Internal ROM
- 0x3FF9_0000 - 0x3FF9_FFFF : Data / 64KB/ ROM1
- 0x4000_0000 - 0x4000_7FFF: Instruction/ 32KB/ ROM0 (Remap)
- 0x4000_8000 - 0x4005_FFFF: Instruction/ 352KB/ ROM0
ROM Address Map Size 448KB 중 448KB 전체 사용
ROM0/1로 분할하여 사용
ROM0의 Instruction 은 32KB SRAM1 Instruction Remap사용 (Boot 목적일 추측)
- System Address Map -> Internal SRAM
- 0x3FFA_E000 - 0x3FFF_FFFF : Data / 200KB / SRAM2 ( DMA )
- 0x3FFE_0000 - 0x3FFF_FFFF : Data / 128KB / SRAM1 ( DMA )
- 0x4007_0000 - 0x4007_FFFF: Instruction/ 64KB / SRAM0 ( Cache)
- 0x4008_0000 - 0x4009_FFFF: Instruction/ 128KB / SRAM0
- 0x400A_0000 - 0x400A_FFFF: Instruction/ 64KB / SRAM1
- 0x400B_0000 - 0x400B_7FFF: Instruction/ 32KB / SRAM1 (Remap)
- 0x400B_8000 - 0x400B_FFFF: Instruction/ 32KB / SRAM1
SRAM0/1/2로 분할하여 사용
SRAM Address Map Size 648KB 중 전체 SRAM 사이즈 520KB 사용가능
648KB-520KB = 128KB 는 SRAM1 (aliases)로 사용 (아래 MMU부분확인)
Cache: Instruction 32KB x2 = 64KB 사용하며 SRAM0 사용 (Data??)
DMA: Data DMA 목적으로 200/128KB까지 확장가능 (아래 IRAM/DRAM 참조)
Remap: ROM0 Remap 사용
- System Address Map -> RTC FAST Memory
- 0x3FF8_0000 - 0x3FF8_1FFF : Data /8KB / PRO_CPU Only
- 0x400C_0000 - 0x400C_1FFF : Instrunction / 8KB / PRO_CPU Only
RTC FAST Address Map Size 16KB 중 8KB만 혼합하여 DATA/Instruction 사용
- System Address Map -> RTC SLOW Memory
- 0x5000_0000 - 0x5000_1FFF : Data Instruction / 8KB
RTC SLOW Address Map Size 8KB 중 8KB만 사용하며 주로 ULP 사용
- ESP32 System 구성기반으로 전체구성확인
ESP32는 기본적으로 Dual Core로 Cache와 MMU가 존재한다.
Cache는 MMU와 연결되어 Mapping되어 SPI를 이용하여 External Memory 접근
DMA의 경우 Embedded memory 즉 SRAM기반으로 동작
Embedded (Internal) Memory 구성
- ROM
- SRAM0/1/2
CPU-> Embedded Memory
External Memory구성
- SPI용 PSRAM(Pseudo-Static RAM)
- SPI용 Flash
CPU->Cache->MMU->External Memory
https://www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf |
상위구성을 보면 External Falsh 와 External SRAM은 MMU를 통해 Cache로 연결되어 구성되어지며, 각 영역은 이미 정해져 있다.