12/30/2021

ESP32 의 Memory 구성-1 (Address Map)

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 기억 
  1. Embedded Memory (Internal Memory)
  2. External Memory (SPI Flash/SPI RAM)
  3. Peripheral (System Resgier)
https://www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf


ESP32 Memory Map

  • ESP32 System Address Map 연결구성
아래의 그림으로 External Memory 와 ESP32의 연결 구성을 쉽게 확인가능하며, 
이외의 Address Map으로 각각 Pheripheral 이 어떻게 연결되어 구성되었는지를 쉽게 파악가능하다. 
  1. External Memory의 경우,  Cache/MMU를 사용 
  2. 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)
  1. 0x3F40_0000 - 0x3F7F_FFFF : Data/ 4MB / External Memory 
  2. 0x3F80_0000 - 0x3FEF_FFFF : Data/ 4MB / External Memory 
  3. 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
  1. 0x3FF9_0000 - 0x3FF9_FFFF :  Data / 64KB/ ROM1
  2. 0x4000_0000 - 0x4000_7FFF:  Instruction/ 32KB/ ROM0         (Remap) 
  3. 0x4000_8000 - 0x4005_FFFF:  Instruction/ 352KB/ ROM0      
ROM Address Map Size 448KB448KB 전체 사용
ROM0/1로 분할하여 사용
ROM0의 Instruction 은 32KB SRAM1 Instruction Remap사용 (Boot 목적일 추측) 

  • System Address Map -> Internal SRAM
  1. 0x3FFA_E000 - 0x3FFF_FFFF : Data / 200KB        / SRAM2       ( DMA )
  2. 0x3FFE_0000 - 0x3FFF_FFFF : Data / 128KB        / SRAM1       ( DMA
  3. 0x4007_0000 - 0x4007_FFFF: Instruction/ 64KB   / SRAM0       ( Cache)
  4. 0x4008_0000 - 0x4009_FFFF: Instruction/ 128KB / SRAM0        
  5. 0x400A_0000 - 0x400A_FFFF: Instruction/ 64KB  / SRAM1  
  6. 0x400B_0000 - 0x400B_7FFF: Instruction/ 32KB  / SRAM1       (Remap)
  7. 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
  1. 0x3FF8_0000 - 0x3FF8_1FFF   :  Data  /8KB  / PRO_CPU Only 
  2. 0x400C_0000 - 0x400C_1FFF  :  Instrunction / 8KB / PRO_CPU Only 
RTC FAST Address Map Size 16KB 8KB만 혼합하여 DATA/Instruction 사용 

  • System Address Map -> RTC SLOW Memory
  1. 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 구성 
  1. ROM
  2. SRAM0/1/2
CPU-> Embedded Memory 

External Memory구성 
  1. SPI용 PSRAM(Pseudo-Static RAM)
  2. 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로 연결되어 구성되어지며, 각 영역은 이미 정해져 있다.