2009. 12. 24. 14:16

STM32 Memory Map



STM32는 총 4G의 메모리 공간을 갖고, 각각은 512 MB로 된 8개의 블록으로 이루어져 있다.

다음은 4G의 메모리 영역이 각각 어떻게 사용되고 있는지를 보여준다.

코드 영역(0x00000000 ~ 0x1FFFFFFF)은 I-Code bus와 D-Code bus를 사용해 명령어 패치와 데이터 접근을 수행한다.
코드 영역은 프로그램 코드를 실행할 수 있고, 데이터를 저장 할 수 도 있는 영역으로 사용된다. 이 영역에서 캐시 속성은 WT(Write Through)인 쓰기 버퍼 영역이다. 이 곳은 on-chip Flahs memory 가 사용되고 있으며, 현재 본인이 사용하고 있는 보드에는 32KBytes 크기의 Flash memory가 장착되어 있다.
일반적으로 프로그램 코드는  이 코드 영역, SRAM 영역, 또는 외부 RAM(External RAM)영역에 위치할 수 있는데, 일반적으로 코드 영역에 위치시키면 두 개의 분리된 버스 인터페이스(I-Code, D-Code)를 통해 명령어 페치와 데이터 접근을 동시에 수행할 수 있어 좋다고 한다.

SRAM 메모리 영역(0x20000000 ~ 0x3FFFFFFF) 내부 SRAM과 연결하기 위해 존재한다.
이 영역은 쓰기 버퍼 영역이고, 캐시 속성은 WB-WA(Write Back, Write Allocated)이다. 프로그램 코드는 코드 영역과 마찬가지로 SRAM 영역에서도 실행 될 수 있다. 하지만, 코드 영역에서 실행하는 것보다는 느리다고 한다. 그래서, 프로그램 실행코드는 코드 영역에 위치시키고 실행시키기를 권고(?)한다.
이 영역은 on-chip RAM을 사용하기 위한 공간이고 현재 사용하고 있는 보드에는 10 KBytes SRAM이 장착되어 있다. 이 영역은 System bus(시스템 버스)를 통해 접근을 하게 된다. 이 영역에는 32 MB의 Bit Band Alias 영역이 존재한다. Bit Banding에 관한 내용은 여기를 참고하면 될 듯 하다.

주변장치(Peripheral) 영역(0x40000000 ~ 0x5FFFFFFF)은 시스템에 장착되어 있는 주변장치(RTC, I2C, ADC, GPIO, USART 등) 에 대해 접근을 하는 용도로 사용된다. ARM의 경우, 이 영역에 데이터를 쓰고 읽는 방법을 통해 장치를 제어할 수 있다. 예를 들어 LED를 켤 때에는 LED 장치가 물려 있는 GPIO의 핀에 1 혹은 0의 값을 쓰는 것을 통해 LDE를 끄고 켤 수 있다. 이 영역 또한 SRAM 메모리 영역과 마찬가지로 32 MB 의 Bit Band Alias 영역이 존재한다. 주변정치 영역은 System bus(시스템 버스)를 통해 접근을 하게 된다.
이 영역은 캐시 불가능 영역이고, 명령어 코드를 실행할 수 없다(Excute Never).

외부 RAM(External RAM) 영역(0x60000000 ~0x9FFFFFFF)은 외부 RAM을 위해 할당된 1G의 메모리 영역이다.
이 영역 중(0x60000000 ~ 0x7FFFFFFF)은 이 영역은 on-chip 또는 off-chip 메모리를 위한 공간이다. 캐시가능 영역(WB-WA)이고, 코드를 실행할 수 있다.
나머지 영역(0x80000000 ~ 0x9FFFFFFF)은 on-chip 또는 off-chip 메모리를 위한 공간이다. 캐시가능 영역(WT) 이고, 이 영역에서는 코드를 실행할 수 있다.

외부 장치(External Device) 영역(0xA0000000 ~ 0xDFFFFFFF)은 외부 장치를 위해 할당된 1G의 메모리 공간이다. 이 영역은 순차적이면서 버퍼 기능이 없는 접근을 요구하는 외부 장치들과 공유 메모리를 위해 만들어졌다. 코드 실행 불가한 메모리 영역이다.

마지막 0.5 GB의 메모리 공간(0xE0000000 ~ 0xFFFFFFFF)은 시스템 레벨 컴포넌트들과 내부의 주변장치 버스들, 외부의 주변장치 버스, 그리고 벤더의 특화된 시스템 주변장치들을 위한 메모리 공간이다.
이 영역은 캐시/버퍼 불가능한 영역이고, 전용 주변장치 버스 메모리 범위하에서 순차적으로 접근이 이루어 진다.





'혼자서 놀기... > STM32' 카테고리의 다른 글

STM32 보드에 펌웨어 퓨징  (0) 2009.12.26
STM32 개발 환경  (0) 2009.12.26
Cortex-M3(STM32) System Architecture  (0) 2009.10.06
STM32F103C6T6  (0) 2009.10.05
Cortex M3 - Bit Banding  (0) 2009.09.29