페이지가 5 12 바이트보다 크면
Badblockpos = 0;;
Bad block bytes = 2;;
페이지가 5 12 바이트보다 작은 경우 ,
Badblockpos = 5;;
Bad blockbytes =1;
각 블록의 처음 두 페이지의 OOB 영역에서 badblockpos 로 시작하는 마지막 badblockbytes 바이트가 0xff 인지 읽습니다.
그렇다면 블록이 좋다. 그렇지 않으면 블록이 나쁘다 [gliethttp_20080523]!
UINT_T create_bbt
{
UINT _ T Retval
P _ flashproperties _ t pflashp = getflash properties (fbt);
UINT_T BlkSize, BlkNum
UINT _ T flash _ addr
# 페이지 크기 정의 (2048)
# 페이지 대체 크기 정의 (64)
# 블록 크기 정의 (64 * 페이지 크기)
# tmp _ buffer _ addr 정의 (0x8020000-page _ size-page _ spare _ size)
# tmp _ spare _ buffer _ addr 정의 (tmp _ buffer _ addr+page _ size)
Int I, j;
Char * bbpos
Bbpos = (char *) (tmp _ spare _ buffer _ addr+0);
BlkSize = pFlashP->. BlockSize
Blk num = pFlashP-& gt;; 디지털 블록
For(I = 0;; 나 & ltBlkNumi++)
{
Flash _ addr = I * BlkSize
For(j = 0;; J<2; J++)
{
Retval = xdfc _ read ((uint _ t *) tmp _ buffer _ addr, flash_addr+j*page_size,
다음 경우 (반환)
{
Goto _ _ create _ bbt _ mark
}
If(bbpos[0]! = 0xff) goto _ _ create _ bbt _ mark;
If(bbpos[ 1]! = 0xff) goto _ _ create _ bbt _ mark;
}
계속;
__create_bbt_mark:
블록 재배치 (I & amp;; Getfmproperties ()-> BBT, fbt);
}
}