저번 강좌에서 대략 플래쉬 메모리의 개념을 잡아 보았습니다.

그냥 플래쉬 메모리가 어떤것인가라는 감을 잡아보려고 쭈욱 썼던 내용이죠

하지만 우리는 리눅스에서 NAND 플래쉬 메모리를 다루어 보려는 것 아니겠습니까?

그런 고로 좀더 기술적인 내용을 알아야 겠죠?

이제 머리에 띠하나 둘르고 강좌를 읽어 주시기 바랍니다.

조금 어려워 집니다.

자... 자...

플래쉬 메모리는 3가지 동작이 있다고 했죠?

지우기, 쓰기 , 읽기

플래쉬 메모리 레퍼런스 메뉴얼에는 당근

erase, program , read 이런 식으로

설명되어 있습니다.

그러므로 저 역시 이런식으로 글을 써 나갈 것입니다.

이레이즈, 프로그램, 리딩.. 험험...

어.. 쩄.. 뜬 ... 알아서 읽어 주쇼...

아참... 잠시 딴길로 나갔다 와야 겠습니다.

이전 강좌에서 플래쉬 메모리에는 NOR 와 NAND 형이 있다고 말했습니다 .

우리가 관심을 갖는것은 NAND 형이지만 아무래도 NOR에 대해서도 조금 알고 넘어 가야 겠죠?

NOR 형 플래쉬 메모리는 읽을때는 ROM하고 똑같습니다.

쓸때만 플래쉬 메모리의 특징을 가집니다.

그래서 NOR 형 플래쉬는 보드 부팅용 프로그램을 담기 위해서 사용합니다.

대부분의 컨트롤러들은 부팅할 때 ROM이 필요하죠

그렇다고 요즘 처럼 대용량의 기억장치가 필요한 프로세스들에게
옛날의 64K 짜리 롬을 달수는 없지 않습니까?

그래서 이런 컨트롤러에 NOR형 플래쉬를 다는 겁니다.

NOR형 플래쉬에 대표적인 업체는 인텔사입니다.
그외에 인텔의 경쟁사인 AMD 가 있겠죠...
그외 도시바나 대만에서도 생산 합니다. 뭐 하이닉스나 삼성도 생산하는지는 잘 모르겠습니다만
아무래도 만들겠죠? IT 대국인데 ㅋㅋ

어쨌든 여러분은 그냥 NOR 형 플래쉬는 인텔,AMD 가 있다고 생각하시는 것이 편합니다.
가장 흔하거든요..

아무래도 개발자들은 남들이 쓰는 것을 쓰는 것이 심리적으로 안심이 되니까요.

그래도 제품은 대만산을 씁니다. 가격이 싸서리...

NOR 형은 읽을때는 ROM이지만 쓸수도 있다고 했습니다.

플래쉬 메모리니깐 당근 단일전원으로 쓸수 있습니다.

그런데 플래쉬 메모리를 ROM으로 사용해서 프로그램이 동작한다면
자기 자신이 돌고 있으므로 플래쉬에 무언가 쓰는 행위가 불가능합니다..

오호 그러면 아무 쓸모가 없잖습니까?

벗!!!

이렇게 생각하면 현대의 프로세스 흐름에 뒤쳐져 있음을 바로 들어내는 겁니다.
한마디로 무...식...한...거...죠

제가 이전에 플래쉬 메모리는 무척 느리다고 했잖습니까?

이게 무신 소리냐 하면

최근에 프로세서들은 최하가 50M Hz이고 보통 200M Hz에서 돕니다.

그런데 이런곳에 플래쉬 메모리에서 프로그램을 동작하도록 사용하면
프로세스의 속도를 전혀 활용하지 않고 16M 짜리 프로세서로 만들어 버리는 겁니다.

이 얼마나 슬픈일입니까...

근디 요즘 보드들은 램을 8M , 16M , 32M, 64M 이렇게 빵빵하게 답니다.

이램이 그냥 램이냐?

아닙니다. SDRAM 이라고 100M Hz 의 속도를 내는 고속 램입니다.
더구나 최근에는 임베디드 프로세스의 램에도 DDRAM 이 대세로 돌아 서고 있습니다.
DDRAM 은 SDRAM 보다 2배나 더 빠릅니다.

그래서 보드에서 동작하는 프로그램은 플래쉬 메모리에서 램에다 옮겨 놓고 씁니다.
그래서 프로세서의 속도를 제대로 활용하기 때문입니다.

즉!

프로그램이 플래쉬 메모리에서 동작하는 순간은 부팅순간이라는 거죠...

그뒤로는 모두 램에서 돕니다.

근데.............

지금 부터 하는 이야기는 정신 바짝 차리고 기억하십시오...

NOR 플래쉬에 무언가를 쓰려고 시도하면 ( 정확하게 쓰기모드로 진입 )
그 순간부터는 ROM이 아니고 그냥 장치일 뿐입니다.
이때부터는 무언가 쓰거나 지울수 있는 거죠
절대로 ROM이 아닙니다.

이런 상태에서 다시 ROM 으로 동작하기 위해서는 두가지 방법이 있습니다.

하나는 NOR 플래쉬 메모리의 RESET 핀에 리셋 신호를 인가하는 방법이고
또 하나는 ROM으로 동작하게 하기 위한 명령을 플래쉬 메모리에 써 넣는 겁니다.

이런 이유로 잘못 설계된 하드웨어는 보드가 부팅이 안될수 있습니다.

그게 뭐냐고요?

자 한번 상황을 만들어 봅시다.

보드에서 동작하는 프로그램이 플래쉬 메모리에 무언가 데이터를 기록하기 위해서
플래쉬 메모리를 쓰기 모드로 전환했습니다.

근데 이때 보드가 부팅 되었습니다.

문제는 하드웨어 설계하시는 분의 게으름으로 플래쉬 메모리 쪽의 RESET 신호가 처리 되지 않았습니다.

그런면 어떻게 되죠?

예 맞습니다. 먹통 됩니다. 전혀 부팅이 되지 않습니다.
이럴때 보드는 조금 오랫동안 전원을 내렸다가 키면 보드 재 부팅 됩니다.

이런 경험이 있다면 한번 여러분의 보드상에 플래쉬 메모리의 RESET 핀 쪽에
연결이 되어 있는가를 살펴봐 주십시오

자 또 다른 상황을 알아 봅시당.

리눅스 운영체제의 디바이스 드라이버에서 사용하는 것 또는 펌웨어의 인터럽트 서비스 루틴을 이용해서
플래쉬 메모리에 데이터를 쓰고 있습니다.

당근 플래쉬 메모리에 데이터를 쓰려고 하는 프로그램과 써지는 시점은 일치 하지 않을 수 있습니다.

이때 리부팅 처리를 합니다.

문제는 리부팅 처리를 하는 경우 플래쉬 메모리를 읽기 모드로 돌려 놓지 않고
웜 부팅 ...

즉 하드웨어적인 RESET 신호가 발생하지 않고 자체 프로세스만 리셋상태로 전환되면?

당근

보드 먹통됩니다.

이런 경우가 없다구요?

당신은 정말 행운아시군요...

어쨌든 NOR 플래쉬 메모리를 다룰때는 이런 경우를 고려해야 합니다.

솔찍히 NOR 플래쉬 메모리는 좀 비쌉니다.
더구나 인텔거 대따 비삽니다.

근디 요즘 임베디드 장비들 저장용 메모리 용량 엄청 큰거 요구합니다.
그거 맞추려고 하면 단가 꽤 올라갑니다.

그래서 저장용 메모리는 NAND 사용합니다.

이게 NAND 플래쉬 메모리 하면 그냥 삼성 생각하시면 됩니다.

워낙 핸드폰, MP3, 네비게이터 등등이 많이 사용하니깐

가격 쌉니다.

그래서 삼성은 잔머리를 굴리게 됩니다.

그게 뭐냐?

바로 NAND 부팅이라는 아이디어를 내 놓는 겁니다.

어쨌든 최근의 프로세서에는 플래쉬 메모리를 저장 장치로 이용하고
부팅용으로만 쓰입니다.

그렇다면 그쪽 시장도 노려 볼수 있는 거지요

그런데 기존 프로세서들은 이 NAND 부팅이라는 것이 없지요

그래서 삼성 프로세서 즉 S3C2410 이나 S3C2440 에 NAND 부팅을 지원하도록 한 겁니다.

즉 NAND 플래쉬만으로도 부팅이 되게 하는 거지요

일전에도 말했지만 NAND 는 읽는 방법이 복잡합니다.

그래서 프로세서안에 아주 작은 RAM을 집어 넣습니다.

그리고 프로세서가 부팅하고 NAND 부팅 모드 이면

자체적인 하드웨어 로직으로 NAND 의 첫번째 블럭만 읽어 오게 만들어서
그걸 RAM 에 옮깁니다.

보통 이 크기가 4K 정도 되는데 이정도면 충분하게 프로세스를 초기화 하고
NAND의 부트 프로그램을 램에다 옮길수 있는 프로그램을 만들수가 있는 겁니다.

이렇게 하면 앞에서 이야기한 NOR 플래쉬의 ROM 동작을 흉내 낼수 있고
가격이 싼 NAND 플래쉬를 사용할수 있는 겁니다.

그래서 최근의 프로세서들은 NAND 부팅을 지원합니다.

근디

인텔은 자체적으로 NOR 플래쉬 시장을 놓치기 싫어서
아직도 NAND 부팅을 지원하지 않습니다.

그냥 NOR 플래쉬를 사용하도록 하고 있습니다.

하지만 최근에 가격적인 측면 때문에 많은 업체들은 NAND 부팅을 선호 합니다.

대용량의 NAND 플래쉬가 계속 값 싸게 공급되고 굳이 부팅용 NOR 플래쉬를 쓰지 않아도
되므로 차지하는 면적이 적어지기 땜시 ...

여기서 한걸음 더 나아가 삼성에서는

지들이 만드는 3가지 솔루션

프로세서 와 SDRAM 과 NAND를 하나의 칩처럼 보이게 하는
프로세서를 판매하고 있습니다.

뭐 이름이 MSP 뭐라나 하는 겁니다.

뭐 아직은 가격이 쪼금 비쌉니다.

하지만 면적이 무척 작아서 작은 컨트롤러를 만들어야 하는 경우라면

최고의 솔루션이죠..

어쨌든 삼성 잔머리 많이 굴립니다. ㅋㅋ

아하

점심 시간이 다 되었네요

오늘의 강좌도 여기서 정지...

태그: *유영창 *디바이스드라이버