질   문: 삼성 CPU에는 왜 NOR 플래시 메모리가 없나요?
난이도: 별3개

대게 CPU 란 말은 단순히 어드레스버스와 데이타버스정도만을 지원하는 프로세서를 말합니다.
이경우는 삼성 MCU 란 말이 맞는 말이죠.
MCU 라고 말하면 어드레스,데이타버스 이외에 시리얼이나 타이머 등등 많은 주변장치가 칩안에 내장되어 있는것을 말하죠.

일반적인 MCU 들은 리셋이 되면 reset 번지로 점프하여 프로그램이 시작됩니다. reset 번지는 대부분 0 번지 이지만
i386 core 나 mips core 는 좀 틀립니다. 여하튼 특정 리셋번지로 부터 시작하게 되는건 아실겁니다.

특정번지를 삼성MCU 의 ARM 코어에 맞춰 0번지라고 하겠습니다. 리셋이 된 이후 프로세서는 0번지를 읽기 위해 외부의
어드레스버스에 0을 출력한 후 데이타를 읽으려고 합니다. 이런 과정을 부팅이라고도 하죠
그리고 이 0번지에 메모리가 연결되어 있고 정상적인 코드가 있다면 프로세서는 잘 동작할 겁니다.

우리가 말하는 일반적인 메모리는 전원이 꺼지면 데이타가 날아가는 SRAM, DRAM 입니다.
전원이 꺼져도 데이타가 남았는 메모리를 플래시, ROM 이라고 말합니다.
그중에 메모리비트의 구성을 NotOR 형으로 설계한 플래시를 NOR 플래시라고 말합니다.
이런 NOR 플래시는 어드레스버스와 데이타버스가 모두 핀으로 나와 있어 MCU 의 동일한 핀에 연결하면 됩니다.

말씀하신 삼성의 S3C2410, S3C2440 MCU 도 이런 NOR플래시를 붙일 수 있습니다.
하지만 NOR 플래시를 단 보드들은 보시기 힘듭니다.

왜 NOR플래시가 없을까요? 이유는 간단합니다. NOR 플래시가 비싸기 때문입니다.

32비트 MCU 를 쓰는 시스템에는 대게 OS 가 올라갑니다. 그러다보니 지워지지 않는 플래시 용량이 많이 필요하게 된거죠.

그러다가 MP3 플레이어 덕분에 빠르게 발전한 NAND 메모리가 등장하였습니다. 용량에 비해 가격이 너무너무 싼 플래시죠.

아 그리고 NAND 플래시는 내부비트를 NotAND 형태로 설계한 플래시입니다.
하지만 NAND 플래시는 가격이 싼 장점외에 단점이 있습니다. 바로 서두에 말씀드린 어드레스, 데이타버스중에 어드레스 버스가
없다는 것입니다. (NAND 플래시를 제어하는 방법은 강좌중에 있으니 참고하세요)

어드레스 버스가 없다보니 MCU 가 리셋시에 데이타를 읽어올 방법이 없으니 큰일이죠. 해서 몇몇보드는 적은 용량의 NOR플래시와
고 용량의 NAND 플래시 2개를 모두 포함한 보드가 나왔습니다
.

그 대표적인 보트가 EZ-x5 보드입니다. EZ-X5 보드는 인텔의 PXA255 MCU 를 내장한 보드지요
하지만 이러다보니 PCB 공간도 많이 차지하고 가격도 약간 증가하게 되버렸죠.. 소형화에는 치명적인 단점이 된것이죠..

이때 혜성처럼 나타난 MCU 가 삼성의 S3C2410 입니다. 이 MCU 의 최대 장점은 바로 NAND 플래시를 이용한 부팅을 지원한다는 점이었습니다.

어떻게 이런일이 가능할까요.. S3C2410 은 리셋시에 NAND 플래시에서 4KByte 를 내부에 있는 SRAM 에 읽어 들입니다. 이 SRAM 의 번지는
바로 리셋번지 즉 ARM 코어이므로 0번지입니다. 자 이제 부팅은 문제가 없게죠.. 하지만 여기도 치명적인 단점이 있었습니다.
NAND 플래시에서 읽어오는 데이타의 크기가 4KByte 라는 점입니다. 프로그래머는 이 4Kbyte안에 반드시 필요한 기능을 넣어야 하는 것이지요
반드시 필요한 작업이란 SDRAM 을 활성화 한 후 NAND 플래시에서 보통 64KByte 정도를 SDRAM 에 복사하는 작업 입니다.
(여기서 SDRAM 은 MCU 내부적으로 주소로써 엑세스가 가능하게 설계됩니다.)

S3C2410 이 나오면서 32bit MCU 들은 일대 변혁이 일어났습니다. 여러 MCU들이 이 NAND 부팅을 지원한 것이죠
하지만 불행하게도 복병이 나타났습니다. NAND 플래시는 꽤 오래된 플래시 입니다. 90년대 초부터 사용된 플래시니까요
큰용량의 플래시가 나오면서 용량이 작은 플래시하고는 호환이 안되는 문제가 생긴겁니다.
하지만 근래에 나온 MCU 들은 128MByte 이상 LargeBlock Flash 라는 플래시를 모두 지원하고 있습니다.
S3C2440 도 이 LB 플래시를 지원하는 걸로 알고 있습니다.

제가 요즘 사용하는 AU1200 도 NAND 부팅을 지원하지만 칩 버그가 있어 사용할수는 없구요..
기타 다른 칩들중에는 LB 플래시를 지원하지 않는것들이 있으니 조심하여야 합니다.

NAND 부팅을 지원하는 칩들은 부트 코드가 약간 복잡합니다.
그러다 보니 프로그래머들이 NOR 플래시를 선호하더군요 ..
특히나 wince 하시는 분들.. 미워요

우리가 사용하는 PC 를 보시게되면 300-GB 하드디스크들이 있지않나요..
마찬가지로 임베디드 보드의 NAND 플래시를 하드디스크라고 생각하시면 이해가 쉬울꺼에요

이제 답이 보이시죠. 삼섬 MCU 보드들은 가격이나 공간상의 이유로 NOR플래시를 사용하지 않고
NAND 플래시를 사용합니다.