![](/zbxe/layouts/mr_layouts_1st/images/default/blank.gif)
디바이스 드라이버
글 수 70
2007.03.30 12:16:54 (*.138.143.118)
39067
플래쉬 메모리에 관한 설명이다. 여담을 포함하여 지루하지 않게 중요한 내용만 담은 것 같아 스크립해서 올립니다. 부디 많은 도움 되시기를 ^^
◈ 플래시메모리 이해
1.0 Flash Memory
굳이 플래시메모리가 어떤 메모리인지는 설명하지 않겠다.
플래시메모리라고 불리우는 디바이스들을 살펴보자
크게 NOR 형과 NAND 형으로 구분된다.
NOR 형으로는 인텔의 Strata, Boot Block, MXIC(대만업체), 기타 많다.
NAND 형으로는 삼성, 도시바에서 생산된다.
EEPROM도 플래시라고 생각되지만 어쩐 형태인지는 모르겠다.(NOR형일꺼다)
1.1 NOR 형 플래시, 인텔제품
우리가 메모리를 읽는것 처럼 플래시를 읽는다면 NOR형이다. 즉 크기만큼의 어드레스를 지원한다.
그렇다고 메모리만큼 속도가 빠른것은 아니다.
이런 종류의 칩들은 가격이 비싸다. NAND형보다 만들기가 어렵기 때문이다.
8메가 바이트 이상의 플래시를 사용한다면 대개는 인텔제품을 사용한다.
대만이나 기타의 제조사들은 4메가 바이트정도만을 생산하기 때문이다. (인텔 플래시는 비싸다)
플래시를 읽는것은 메모리와 같지만 쓸경우는 다음과 같은 흐름으로 쓰게된다.
영역지우기(block erase) -> 쓰기(writing) -> 데이타고정(fusing or programing)
그리고 지우기시 시간은 대략 1초 ~ 5초이며 퓨징시간은 200uSec~600uSec가 소요된다.
여담1)
플래시를 지우면 모든 데이타는 0xFF로 변경된다.
그럼 0xFF 를 쓰면 되겠구나 하겠지만 다음과 같은 성질이 있다.
0xff 에 0xa0 를 썼다면 0xa0가 된다.
0x00 에 0xa0 를 썼다면 0x00가 된다.
즉 1은 0으로 바뀌지만 0은 결코 1이 될수 없는 것이다.
0x0f 라고 쓰인 곳에 0x03 을 쓰면 0x03 이된다. 이런특성을 이용하여 코딩하면 좀더 빠른 수행을 할수 있다.
NOR형 플래시는 인텔외에 MXIC 사의 플래시만을 다뤄봤기 때문에 인텔플래시만을 대상으로 말하겠다.
1.2. 스트라타 플래시/부트블럭 플래시
인텔제품은 크게 스트라타 플래시와 부트블럭플래시 이렇게 두종류로 나뉜다.
차이점을 알아보자
1.부트블럭의 경우 쓰기시에 한개의 워드만을 쓸수 있지만 스트라타는 16개의 워드를 쓸수있다.
다시말하면 퓨징시간이 그만큼 줄어들어 전체적으로 데이타를 쓰는 시간이 빠르다.
(스트라타도 한개의 워드씩 쓸수 있다.)
2.스트라타의 블럭은(지우기시에 지워지는 크기) 128KByte 이면 부트블럭은 64KByte 이다.
이차이점은 단점도 장점도 될수있다. 많은 양의 데이타를 쓴다면 블럭이 큰쪽이 시간에서 유리하지만
작은 양의 데이타를 자주 쓴다면 부트블럭이 유리하다.
쓰기위해서 지워야 하기 때문에 블럭의 데이타는 모두 소멸된다.
필요한 데이타만을 쓰려고 한다면 블럭의 데이타를 메모리로 읽어오고 변경된내용을 메모리에
적용한후 이것을 다시 플래시에 쓰게 된다면 블럭이 작은 쪽이 유리한것이다
3.부트블럭은 Bottom or Top 이라는 형태가 존재한다.
Bottom은 0x0000 주소 Top은 플래시의 마지막 블럭주소를 말하며 이곳이 16개의 작은 블럭(4KByte)으로
나뉘어 있다. 즉 4메가 바이트이 부트블럭 플래시는 63+16 개의 블럭이 있는 것이다.
스트라타는 이런 영역이 없다.
4.부트블럭 플래시의 용량은 1M-Byte, 2M-Byte, 4M-Byte
스트라타는 4M-Byte, 8M-Byte, 16M-Byte 가 출시되어 있다.(2002-03 현재)
다른 회사의 플래시는 인텔의 부트블럭 플래시와 비슷한 구조를 가지고 있다.
여담2)
2진수 계산은 여러분도 잘알것이다. 좀더 쉽게 생각해보자
메모리의 크기를 말할때 1메가 라고 말한다. 이값은 실제 1048576 이다.
1048576 이란 값은 10진수로 표현했을때이다.
메모리의 크기를 말할때 2진수로 말한다. 메모리가 128M 라고 쓰여 있다면 (칩이름에서)
이것은 128메가비트이며 이진수이다. 즉 16MByte라는 말이다.
이진수와 십진수를 비교하자
| 부 호 | 십진수에서 이진수의 값 | 십진수 |
| 1K | 1,024 | 1,000 |
| 1M | 1,048,576 | 1,000,000 |
엄연히 값은 틀리다. 그러나 about(약)하면 같다.
2의 10승은 일킬로라고 말하고 2의 20승은 일메가라고 한다.
위의 말을 잘 기억하면 메모리의 주소는 쉽게 계산할수 있다.
메모리 4K 라면 2의 2승 곱하기 2의 십승이다. 0x1000
설명이 어려운가?? 그냥 넘어가기로 하지요
여담3)
하드웨어적으로 생각하면 10000 과 10500 은 같은 값이다. 즉 저항치나 콘덴서치의 오차 만큼은
무시한다는 말이다.
저항이 5퍼센트의 오차라면 이값안에서는 같은 값이라는 것이다
나중에 초!초보 강좌의 기회가 있으면 다시 알아보자.(회로이론이다)
1.3 스트라타 회로설계 ( 28F128J3A )
nBYTE :
스트라타는 16비트 버스를 지원하며 아울러 nBYTE 핀도 있다. 즉 8비트 버스도 지원 한다.
이핀은 입력핀으로 플래시칩의 버스 폭을 결정한다(리셋시). 보통의 경우 16비트폭을 모두 사용하므로
이핀을 풀업으로 연결한다. 그리고 이경우 A0 핀은 사용되지 않는다. NC 나 GND로 연결한다.
nRP :
리셋핀이며 이 핀이 LOW가 되면 파워다운 모드로 진입한다.(전류소모가 극히 적어진다.)
Vpen :
플래시의 쓰기 방지핀이다. 이 핀이 LOW가 되면 플래시를 읽을수만 있다.
MCU에서 제어하기도 하지만 보통은 풀업으로 연결한다.
STS :
RDY/nBUSY 핀과 같다. SA1110으로 설계된 보드들은 이 핀을 사용하지 않고(NC)있다.
SA1110의 nCS0, nCS1, nCS2는 RDY를 지원하지 않는다. 더이상 설명하지 않아도 알겠죠..
VCCQ :
버스의 전원핀이다. 보통 그냥 전원과 연결한다. 왜 이핀이 VCC핀과 분리되어있는가?
크게 두가지 이유 때문이다.
데이타 버스는 고속으로 상태(1,0)가 변경된다. 그럼 이버스를 관여하는 전원은 노이즈의 영항을 받게 된다.
이 노이즈로 부터 전원을 분리 시키려는 이유가 있고 (이건 설득력이 좀 떨어진다. 지성)
둘째는 (이게 진정한 이유이다.) 포터블형의 경우 전력을 아껴야 하는 사명이 있다.
그러자면 왠만하면 사용하지 않는 칩의 경우 파워를 죽이는게 좋다. 그럼 이칩을 죽이면 데이타버스나
어드레스버스는 어케될까? 본강사도 잘 모른다. 실험해보지 않아서..
CE0,CE1,CE2 :
당연히 칩셀렉터이다. 이런 쉬운 핀을 왜 설명할까요.. ^^
이런 경우 보통은 세개의 핀을 같은 CS에 연결한다. (이지보드도 그렇다)
하지만 좀더 생각한다면 2개는 GND로 연결해야 더 타당하다. 세개의 핀을 끌어내리는 힘보다는
한개의 핀을 내리는게 더 쉽기 때문이다. 물론 칩이 여러게 연결되지는 않지만 이강의를 보는 여러분은
이렇게 연결하자.
자이제 고민을 해보자. 스트라타는 16비트 버스를 가지고 있다. 8비트 버스야 그냥하면 되는데
32비트 버스는 어떻게 연결해야 할까?? 플래시뿐만 아니고 여러개의 칩으로 넓은 폭의 버스를 지원하려면
한번쯤 생각해야 하는 문제이다.
System Address A0
System Address A1
System Address A2 ----- Chip #0 A1 ------- Chip #1 A1
System Address A3 ----- Chip #0 A2 ------- Chip #1 A2
System Address A3 ----- Chip #0 A3 ------- Chip #1 A3
: : :
주소가 하나씩 밑으로 내려간것을 볼수있다. 잠시 생각하면 알수이다.
귀찮으면 넘어가자. 필요할때 참고하면 된다.
초보를 위한 설명1)
풀업이란 말이 자주 나온다. 반대되는 개념으로 풀다운이는 말이 있다.
풀업 : 저항을 거쳐 전원으로 연결한다는 의미이다.
플다운 : 저항을 거쳐 그라운드로 연결한다는 의미이다.
여기서 저항치는 상황에 따라 다르다. 칩의 메뉴얼을 보면 저항값이 나와있다.
보통 10K 나 4.7K 또는 저전력형(포터블)에서는 100K 를 사용한다.
1.4 부트블럭 회로설계 ( 28F320C3 )
이디바이스는 16비트 버스만을 지원한다.
기타핀들은 스트라타와 동일하다. 단지 Vpp라는 핀이 특이한데 사실 플래시는 Vpp가 모두 있다.
스트라타가 없는게 이상한것이다.(아님 발전된거라서 그런가?)
Vpp는 플래시의 지우기나 쓰기시의 전원을 말한다.
플래시의 쓰기나 지우기는 횟수의 제한이 있다. 보통은 이십만번정도(?) 이다.
Vpp에 12V입력을 가하면 이천번정도로 떨어진다. 대신 쓰기, 지우기 속도는 무지하게 빨라진다.
정확한 시간은 메뉴얼을 참고한다.
플래시를 MCU가 직접 쓰기를 할거면 이핀을 전원(3.3V)고 연결하면 된다.
만일 이핀에 전원이 인가되지 않으면 쓰기와 지우기는 실패한다.
이번강의는 여기서 마치고 다음 강의에서는 플래시에 쓰는 방법과 NAND형에 대해 알아보겠습니다.
태그: *하드웨어 *디바이스드라이버
◈ 플래시메모리 이해
1.0 Flash Memory
굳이 플래시메모리가 어떤 메모리인지는 설명하지 않겠다.
플래시메모리라고 불리우는 디바이스들을 살펴보자
크게 NOR 형과 NAND 형으로 구분된다.
NOR 형으로는 인텔의 Strata, Boot Block, MXIC(대만업체), 기타 많다.
NAND 형으로는 삼성, 도시바에서 생산된다.
EEPROM도 플래시라고 생각되지만 어쩐 형태인지는 모르겠다.(NOR형일꺼다)
1.1 NOR 형 플래시, 인텔제품
우리가 메모리를 읽는것 처럼 플래시를 읽는다면 NOR형이다. 즉 크기만큼의 어드레스를 지원한다.
그렇다고 메모리만큼 속도가 빠른것은 아니다.
이런 종류의 칩들은 가격이 비싸다. NAND형보다 만들기가 어렵기 때문이다.
8메가 바이트 이상의 플래시를 사용한다면 대개는 인텔제품을 사용한다.
대만이나 기타의 제조사들은 4메가 바이트정도만을 생산하기 때문이다. (인텔 플래시는 비싸다)
플래시를 읽는것은 메모리와 같지만 쓸경우는 다음과 같은 흐름으로 쓰게된다.
영역지우기(block erase) -> 쓰기(writing) -> 데이타고정(fusing or programing)
그리고 지우기시 시간은 대략 1초 ~ 5초이며 퓨징시간은 200uSec~600uSec가 소요된다.
여담1)
플래시를 지우면 모든 데이타는 0xFF로 변경된다.
그럼 0xFF 를 쓰면 되겠구나 하겠지만 다음과 같은 성질이 있다.
0xff 에 0xa0 를 썼다면 0xa0가 된다.
0x00 에 0xa0 를 썼다면 0x00가 된다.
즉 1은 0으로 바뀌지만 0은 결코 1이 될수 없는 것이다.
0x0f 라고 쓰인 곳에 0x03 을 쓰면 0x03 이된다. 이런특성을 이용하여 코딩하면 좀더 빠른 수행을 할수 있다.
NOR형 플래시는 인텔외에 MXIC 사의 플래시만을 다뤄봤기 때문에 인텔플래시만을 대상으로 말하겠다.
1.2. 스트라타 플래시/부트블럭 플래시
인텔제품은 크게 스트라타 플래시와 부트블럭플래시 이렇게 두종류로 나뉜다.
차이점을 알아보자
1.부트블럭의 경우 쓰기시에 한개의 워드만을 쓸수 있지만 스트라타는 16개의 워드를 쓸수있다.
다시말하면 퓨징시간이 그만큼 줄어들어 전체적으로 데이타를 쓰는 시간이 빠르다.
(스트라타도 한개의 워드씩 쓸수 있다.)
2.스트라타의 블럭은(지우기시에 지워지는 크기) 128KByte 이면 부트블럭은 64KByte 이다.
이차이점은 단점도 장점도 될수있다. 많은 양의 데이타를 쓴다면 블럭이 큰쪽이 시간에서 유리하지만
작은 양의 데이타를 자주 쓴다면 부트블럭이 유리하다.
쓰기위해서 지워야 하기 때문에 블럭의 데이타는 모두 소멸된다.
필요한 데이타만을 쓰려고 한다면 블럭의 데이타를 메모리로 읽어오고 변경된내용을 메모리에
적용한후 이것을 다시 플래시에 쓰게 된다면 블럭이 작은 쪽이 유리한것이다
3.부트블럭은 Bottom or Top 이라는 형태가 존재한다.
Bottom은 0x0000 주소 Top은 플래시의 마지막 블럭주소를 말하며 이곳이 16개의 작은 블럭(4KByte)으로
나뉘어 있다. 즉 4메가 바이트이 부트블럭 플래시는 63+16 개의 블럭이 있는 것이다.
스트라타는 이런 영역이 없다.
4.부트블럭 플래시의 용량은 1M-Byte, 2M-Byte, 4M-Byte
스트라타는 4M-Byte, 8M-Byte, 16M-Byte 가 출시되어 있다.(2002-03 현재)
다른 회사의 플래시는 인텔의 부트블럭 플래시와 비슷한 구조를 가지고 있다.
여담2)
2진수 계산은 여러분도 잘알것이다. 좀더 쉽게 생각해보자
메모리의 크기를 말할때 1메가 라고 말한다. 이값은 실제 1048576 이다.
1048576 이란 값은 10진수로 표현했을때이다.
메모리의 크기를 말할때 2진수로 말한다. 메모리가 128M 라고 쓰여 있다면 (칩이름에서)
이것은 128메가비트이며 이진수이다. 즉 16MByte라는 말이다.
이진수와 십진수를 비교하자
| 부 호 | 십진수에서 이진수의 값 | 십진수 |
| 1K | 1,024 | 1,000 |
| 1M | 1,048,576 | 1,000,000 |
엄연히 값은 틀리다. 그러나 about(약)하면 같다.
2의 10승은 일킬로라고 말하고 2의 20승은 일메가라고 한다.
위의 말을 잘 기억하면 메모리의 주소는 쉽게 계산할수 있다.
메모리 4K 라면 2의 2승 곱하기 2의 십승이다. 0x1000
설명이 어려운가?? 그냥 넘어가기로 하지요
여담3)
하드웨어적으로 생각하면 10000 과 10500 은 같은 값이다. 즉 저항치나 콘덴서치의 오차 만큼은
무시한다는 말이다.
저항이 5퍼센트의 오차라면 이값안에서는 같은 값이라는 것이다
나중에 초!초보 강좌의 기회가 있으면 다시 알아보자.(회로이론이다)
1.3 스트라타 회로설계 ( 28F128J3A )
nBYTE :
스트라타는 16비트 버스를 지원하며 아울러 nBYTE 핀도 있다. 즉 8비트 버스도 지원 한다.
이핀은 입력핀으로 플래시칩의 버스 폭을 결정한다(리셋시). 보통의 경우 16비트폭을 모두 사용하므로
이핀을 풀업으로 연결한다. 그리고 이경우 A0 핀은 사용되지 않는다. NC 나 GND로 연결한다.
nRP :
리셋핀이며 이 핀이 LOW가 되면 파워다운 모드로 진입한다.(전류소모가 극히 적어진다.)
Vpen :
플래시의 쓰기 방지핀이다. 이 핀이 LOW가 되면 플래시를 읽을수만 있다.
MCU에서 제어하기도 하지만 보통은 풀업으로 연결한다.
STS :
RDY/nBUSY 핀과 같다. SA1110으로 설계된 보드들은 이 핀을 사용하지 않고(NC)있다.
SA1110의 nCS0, nCS1, nCS2는 RDY를 지원하지 않는다. 더이상 설명하지 않아도 알겠죠..
VCCQ :
버스의 전원핀이다. 보통 그냥 전원과 연결한다. 왜 이핀이 VCC핀과 분리되어있는가?
크게 두가지 이유 때문이다.
데이타 버스는 고속으로 상태(1,0)가 변경된다. 그럼 이버스를 관여하는 전원은 노이즈의 영항을 받게 된다.
이 노이즈로 부터 전원을 분리 시키려는 이유가 있고 (이건 설득력이 좀 떨어진다. 지성)
둘째는 (이게 진정한 이유이다.) 포터블형의 경우 전력을 아껴야 하는 사명이 있다.
그러자면 왠만하면 사용하지 않는 칩의 경우 파워를 죽이는게 좋다. 그럼 이칩을 죽이면 데이타버스나
어드레스버스는 어케될까? 본강사도 잘 모른다. 실험해보지 않아서..
CE0,CE1,CE2 :
당연히 칩셀렉터이다. 이런 쉬운 핀을 왜 설명할까요.. ^^
이런 경우 보통은 세개의 핀을 같은 CS에 연결한다. (이지보드도 그렇다)
하지만 좀더 생각한다면 2개는 GND로 연결해야 더 타당하다. 세개의 핀을 끌어내리는 힘보다는
한개의 핀을 내리는게 더 쉽기 때문이다. 물론 칩이 여러게 연결되지는 않지만 이강의를 보는 여러분은
이렇게 연결하자.
자이제 고민을 해보자. 스트라타는 16비트 버스를 가지고 있다. 8비트 버스야 그냥하면 되는데
32비트 버스는 어떻게 연결해야 할까?? 플래시뿐만 아니고 여러개의 칩으로 넓은 폭의 버스를 지원하려면
한번쯤 생각해야 하는 문제이다.
System Address A0
System Address A1
System Address A2 ----- Chip #0 A1 ------- Chip #1 A1
System Address A3 ----- Chip #0 A2 ------- Chip #1 A2
System Address A3 ----- Chip #0 A3 ------- Chip #1 A3
: : :
주소가 하나씩 밑으로 내려간것을 볼수있다. 잠시 생각하면 알수이다.
귀찮으면 넘어가자. 필요할때 참고하면 된다.
초보를 위한 설명1)
풀업이란 말이 자주 나온다. 반대되는 개념으로 풀다운이는 말이 있다.
풀업 : 저항을 거쳐 전원으로 연결한다는 의미이다.
플다운 : 저항을 거쳐 그라운드로 연결한다는 의미이다.
여기서 저항치는 상황에 따라 다르다. 칩의 메뉴얼을 보면 저항값이 나와있다.
보통 10K 나 4.7K 또는 저전력형(포터블)에서는 100K 를 사용한다.
1.4 부트블럭 회로설계 ( 28F320C3 )
이디바이스는 16비트 버스만을 지원한다.
기타핀들은 스트라타와 동일하다. 단지 Vpp라는 핀이 특이한데 사실 플래시는 Vpp가 모두 있다.
스트라타가 없는게 이상한것이다.(아님 발전된거라서 그런가?)
Vpp는 플래시의 지우기나 쓰기시의 전원을 말한다.
플래시의 쓰기나 지우기는 횟수의 제한이 있다. 보통은 이십만번정도(?) 이다.
Vpp에 12V입력을 가하면 이천번정도로 떨어진다. 대신 쓰기, 지우기 속도는 무지하게 빨라진다.
정확한 시간은 메뉴얼을 참고한다.
플래시를 MCU가 직접 쓰기를 할거면 이핀을 전원(3.3V)고 연결하면 된다.
만일 이핀에 전원이 인가되지 않으면 쓰기와 지우기는 실패한다.
이번강의는 여기서 마치고 다음 강의에서는 플래시에 쓰는 방법과 NAND형에 대해 알아보겠습니다.
태그: *하드웨어 *디바이스드라이버