기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

안녕하세요.

 

현재 K9F1G08UOC(1G bit)로 개발중입니다.

이번에 양산대비 gang을 구입했습니다.

그래서 사용하던 개발품의 nand를 떼서 gang에서 read하여 파일로 저장시킨후 buffer를 읽었더니

U-boot이나 kernel은 정상적으로 badblock아님(0xFF) 표시가되는데 yaffs2를 사용하는 부분은 spare BI에 이상한 값들이 들어가있습니다.

spare의 6번 byte가 BI로 알고있는데요. yaffs2에서는 BI 공간도 사용을하나요?

 

문제가 U-boot,kernel은 BI가 제대로 표시가되어 gang에서 BB면 skip하게하면되는데

yaffs2의 BI는 FF가 아니라서 gang에서 다 skip을 합니다.ㅠㅠ

 

H/W라 모르는게 많습니다. 부탁드립니다.


funmoney

2011.08.15 20:09:16
*.169.251.167

다음의 2가지 사항을 고려하여 방법을 찾아보셔야 할듯.

 

1. NAND flash 의 OOB(spare) 영역의 기본단위크기가 16Bytes 냐, 64Bytes 냐, 128Bytes 냐에 따라서

   OOB map 이 달라집니다. 1G08 의 경우 데이터 쉬트를 보니 OOB 가 16bytes 더군요.

   그러면 OOB 영역을 배열로 표현할 경우(zero base) OOB[4], OOB[5] 영역에 Bad marking 이 위치합니다.

   ( Good block 이면 일반적으로 0xFF,0xFF 가 위치하고 bad 이면 0x00,0x00 이 위치합니다. )

 

2. OOB 영역이 데이터 영역으로 사용되는 경우도 있고 그렇지 않은 경우도 있습니다.

    a) u-boot 에서 제공하는 nand write.jffs2 의 경우 OOB 영역을 ECC 와 Bad marking 으로만

        사용하고 데이터 영역으로는 활용하지 않습니다.

    b) 즉, u-boot / kernel 이미지를 nand write.jffs2 로 구우셨다면 위의 방식(관습적으로 일반화된 방식)을 따랐을 것인데

         이방법이 gang 에서 지원하는 방식일 것입니다. ( 이 방식을 사용한다는 전제로 NAND flash 제조업체에서도

         bad blocking 마킹을 출하전 검사에서 미리 해두는 것으로 알고 있습니다. )

 

 3. 파일시스템에 따라서 OOB 영역의  free 영역에 데이터를 기록하는 것들도 있습니다.

      바로 yaff / yaffs2 가 그 경우에 해당합니다.

 

       yaffs2 에서 OOB 크기가 16byte 인경우를 예로 들면

       Bad block marking 은 OOB[4],OOB[5] 에 표시가 되고

       ECC 계산 값은 OOB[0], OOB[1], OOB[2], OOB[3], OOB[6], OOB[7] 에 6바이트로 기록됩니다.

       그리고 나머지 8Bytes OOB[8..15] 에는 filesystem 의 이미지데이터가 위치하게 됩니다.

 

구체적은 양산이미지 적용방법은 직접 고민해보는 것도 재미 있겠네요 ...

나영훈

2011.08.17 07:01:45
*.101.241.220

제가 알기에는 128M nand이구 data(2k)+spare(64bytes)로 구성되어 있습니다.

gang으로 이미지를 만드실 때 mkyaffs2image를 사용하셨을 겁니다.

그 이미지를 그대로 읽어서 ECC 부분만 바꿔주시면 됩니다.


참고로 bad block은 6번째가 아니구 첫번째로 알고 있습니다.

bootloader에서 nand dump로 확인 해보세요.


도움이 되셨으면 좋겠습니다.


List of Articles
번호 제목 글쓴이 날짜 조회 수
» yaffs2 fs를 gang으로 nand write 질문 [2] 최승훈 2011-08-13 1819

사용자 로그인