하드웨어
휴...
NAND 플래쉬에 대한 동작 설명이 막바지에 이르는 군요 ^^
NAND 배드 블록
NAND 칩 고를때 바로 이말이 사용될수 있습니다.
NAND 플래쉬 메모리를 구매 했는데
배드 블럭이 몇개 나온다고 합니다. 즉 사용이 불가능한 블럭이라는 거지요
배드 페이지도 아니고 배드 블럭입니다.
더구나 어느 정도까지는 정상 제품이라고 합니다.
이런 경우 교환을 요청해도
삼성은 그건 정상 제품이라고 우기죠...
그래서 NAND 플래쉬 레퍼런스 매뉴얼을 보면
거기에 이런 문구가 떡 하니 써 있습니다.
VALID BLOCK
최대 4096 개인데 최소 4026 개 블럭이 유효한 블럭이다.
즉 60 개 정도는 배드 블럭이 나올수 있으니 사기 싫으면 관더라..
뭐 이런 말입죠...
대 삼성이 이러니 그 칩을 쓰는 회사 역시 버틸수 밖에요
여러분이 쓰는 MP3 니 평가 보드 같은 곳에 NAND 가 쓰일 때
배드 블럭 몇개 ...
이런식으로 나온다고 해서 환불 요청 하면 안된다는 거죠...
쩝...
이 놈의 배드 블럭은 프로그래머를 무척 괴롭히죠...
뭘 괴롭히는 지는 조금 있다가 알아보고..
우선
이 배드 블럭은 삼성에서 생산 시점에 검사합니다
문제는 배드 블럭이란 표시를 해야 하지 않겠습니까?
그래서 각 블럭의 첫번째 페이지와 두번째 페이지의
스페어 영역의 6번째에 표기 합니다.
메뉴얼을 보면 이 곳을 읽어서 0xFF 가 나오지 않으면
배드 블록으로 보아야 한다는 거지요...
물론 처음 사서 한번도 지우거나 쓰지 않아야 하는 조건입니다.
배드 블록 표시가 된 영역을 지우거나 써 버리면
그냥 지워지거나 써 져 버립니다.
그러므로 프로그램을 작성할 때 배드 블럭이 표시되는 블럭은
사용하지 않도록 해야 하죠...
근데 최소한 0 번 블록은 배드 블록이 아님을 삼성은 보장해
줍니다.
그나마 다행이지요...
그럼 정리하면서 기억 합시다.
- NAND 플래쉬는 생산시 20 개 이하의 BAD BLOCK 이 포함된 제품을 생산 판매한다.
- 생산 검사시 BAD 블록 표시는
BLOCK 의 첫번째 페이지 와 두번째 페이지의 517 번째 바이트를 읽었을때 0xFF가
나오지 않으면 배드 블록이다. - 배드 블럭이 검출된 블럭은 절대로 쓰거나 지우지 말아야 한다.
- 0 번 블럭은 절대로 배드 블록이 아니다.
자...
배드 블록이 이렇게 표시 되기도 하기 때문에 스페어 영역은
대부분의 경우 데이터 저장용으로 사용하지 않고 정보 저장용으로
사용합니다.
또 배드 블록 때문에
NAND는 1:1 복사가 불가능합니다.
어?
그렇다면 NAND 복사기들은 어떻게 작동하는데요?
흠...
전 잘 모릅니다. NAND 복사기를 써 본적이 없어서
하지만 뭔가 조치를 하나 봅니다.
어쨌든 1:1 복사를 하려면 배드 블록이 하나도 없는 놈들만 골라서 하시면 됩니다.
그나마 다행인것은 최근에 배드 블록이 발생하는 NAND 플래쉬가 거의 없다는 겁니다.
하지만
재수 없으면 배드 블록이 있는 놈을 구매 할수도 있다는 점 기억하십시오...
그래서 NAND 복사기도 이런 것에 대처방법이 있겠죠..
저희 회사는 NAND를 다룰때
배드 블록이 있는 놈들은 안 지웁니다.
그리고 물리적 블록과 논리적 블록을 별도로 취급하는 구조로 해서 작성하죠
논리적 블록은 배드 블록을 제외한 블록을 의미 합니다.
아마도 여러분이 펌웨어를 작성한다면 이렇게 해야 하겠죠...
어쨌든 오늘은 기쁘게도 짧게 끊습니다. (음하하하~~~)
다음 강좌는 아마도 좀 골치 아프실겁니다 .
ㅋㅋ
ECC 거든요...
그때 봅시당...
그 뒤로 정말 하드웨어에 관련된 강좌는 끝납니다.
바바이...
NAND 복사 방식은 사용하는 FTL(Flash Translation Layer)에 따라서 틀려집니다. ( 저도 정확히는.. 공부하는 중이어서.. )
bad block을 단순히 skip하는 방식도 사용하고
bad block에 대한 정보를 기록하기도 하는데 그 방법이 단순하기도 복잡하기도 합니다.
아래 링크에 보시면 삼성에서 사용하는 XSR 이라는 FTL의 복잡한 복사 방식이 설명되어 있는데 참고 하시면 좋겠네요.
http://www.samsung.com/global/business/semiconductor/products/flash/Products_XSR_PreProgrammingGuide.html
강의 감사합니다~