티스토리 뷰

8051 기반 Memory Space

8051 기반의 SOC cc2530은 별개이지만 부분적으로 겹치는 4개의 메모리 스페이스를 갖는다. DATA, CODE, SFR, XDATA가 바로 그 녀석들이다. 쉽게 참조 될만한 한글 포스팅이 없어서 두서없지만 정리 해놓는다.


뭘 알아야 이해하지..

cc2530 메모리 맵을 보면 이런 그림이 나온다. 여기서 쪼~기 맨위에 보면 Selectable 32KB FLASH BANK라고 적혀있다. 선택한 플래시 뱅크는 0x8000 영역에 매핑된다는 것이지.. 흠.. 이 플래시 메모리는 2048바이트 플래시 페이지들로 나누어진다. XBANK 영역 크기가 0x8000이니깐 32K이군. 그러므로 뱅크당 페이지수는 16개이다. 뱅크가 뭐냐고? 흠.. 8051은 좀 더 큰 플래시 메모리 공간을 어드레스 하기위해서 코드뱅킹(Code Banking)이라는 기술을 사용한다. 


* 8051 마이크로 프로세서는 왜 64KB 용량일까? 마이크로프로세서가 액세스 할 수 있는 메모리 용량은 어드레스 버스의 신호선 수에 의해서 결정된다. 따라서 8051 처럼 어드레스 버스가 16비트인 마이크로 컨트롤러는 64KB의 메모리 용량을 갖게 되는 것이다. 이렇게 태생적으로 작은 용량을 늘리고자 할 때 쓰는 기법이 뱅크 스위칭(Bank Switching)이다. 그 중에서 8051 처럼 프로그램 메모리와 데이터 메모리를 구분하는 아키텍처에서는 특히 문제가 되는 것이 프로그램 메모리 확장이다. 그래서 이런 뱅크 스위칭 기법을 코드뱅캥(code banking)이라 부른다.


플래시를 개념적으로 BANK라고 부르는 세그먼트 번호 즉 구획 번호로 분류한다. 뱅크의 수는 디바이스 크기마다 다르겠지만 개념은 똑같다. 각 뱅크의 크기는 32KB이다. 256KB의 플래시라면 8개 뱅크를 갖게 된다. 128KB이면 4개이고 64KB이면 2개이다. 뭐 이런식이지. 이렇게 번호 매겨진 뱅크를 조~기 아래 그림의 XBANK 영역에다가 샥샥~ 그때 그때 매핑시켜주는 거다. 그러면 좀 더 많은 메모리공간에 어드레싱이 가능하게 된다.




8051 시스템에서 0x0000 ~ 0x7FFF의 32KB 영역은 기본 ROM 으로 사용하고 이를 공통영역 즉 Common Area라고 한다. 0x8000 ~ 0xFFFF의 32KB 영역에 4개의 32KB ROM (이를 뱅크 메모리 즉 Bank ROM이라 한다.)을 중첩적으로 설치할 수 있다.


다시 돌아와서 하나의 플래시 페이지는 메모리 내에 지울 수 있는 가장 작은 단위이다. Writing 할 때는 좀 다른데 32비트 워드가 플래시에 쓸 때 가장 작은 단위이다. 아 그리고 쓰기전에 페이지를 삭제해야 한다. page-erage operation은 페이지 내의 모든 비트를 1로 셋팅한다. 이후 쓰기 작업을 하면 0비트는 0으로 프로그램되고 1은 무시된다.




CODE

읽기전용 프로그램 메모리. 64KB까지 어드레스 할 수 있다. 플래시에 매핑 한다.


DATA

빠른 액세스 (단일 명령). 읽기/쓰기 데이터 메모리. 256바이트까지 어드레스 하고 SRAM을 매핑한다. DATA의 하부 128바이트는 직접 또는 간접으로 어드레스 될 수 있고 DATA의 상부 128 바이트는 간접적으로만 어드레스 할 수 있다.


SFR

읽기/쓰기 레지스터 메모리. 단일 CPU 명령으로 직접 접근. XREG들은 SFR에 매핑되지 않는다. 그래서 이걸 SFR이라 부르지 않는거다.


XDATA

느린 액세스(보통 4~5 명령 사이클). 16bit wide. 읽기/쓰기 데이터 메모리. XDATA는 전체 램을 어드레스 한다. 또.. SFR, 플래시 부분들, RF 레지스터, XREG 도 어드레스 한다. 또한 CC2530에서 XDATA는 info page를 매핑한다.


정리할려고 했는데

어째.. 써놓고 보니 정리가 안 되는군.. 일단 뒤로 미루자. ㅡ..ㅡ;;;