저만 그런가요^^; 또한 FAT32 고지에 어느 정도 다다랐는지 궁금하기도 합니다.^^
FAT32의 전체 구조는 아래의 그림과 같습니다. (지난번에 봤던 그 그림입니다.^^)
위의 그림을 보면서 하나씩 나열해 보면, FAT32는
[MBR] + [예약된 공간] + [PBR] + [예약된 공간]+ [FAT #1] + [FAT #2] + [클러스터] 구조로 되어 있습니다.
==============================> =============================================>
여기서 파란색 화살표 부분까지가 여태껏 알아본 내용입니다.^^
간략히 살펴보면,
MBR 섹터에는 파티션테이블이 4개 들어 있고, 그 중에서 Partition1만 사용된다고 했습니다.^^
Partition1은 16 바이트 구조로 4바이트 크기의 LBA Begin 항목이 들어 있습니다.
LBA Begin에는 주소값이 들어 있고, 이 주소로 가보면, 그곳이 PBR 섹터라고 했습니다.^^
PBR 섹터에는 Volume ID란 영역이 있으며 이 값을 참조하면 [FAT #1] [FAT #2] 영역을 찾을 수 있습니다.
[FAT #1] [FAT #2] 영역에는 [클러스터]가 위치하는 정보를 담고 있습니다. 클러스터에는 그토록 찾고 싶었던 MP3 파일이 들어 있습니다.^^
이처럼 FAT32는 꼬리에 꼬리를 무는 구조로 되어 있습니다.
간단히 나타내면, [MBR -> PBR -> FAT #1, FAT #2 -> 클러스터]로서 이런 식으로 MP3 파일을 찾아가게 됩니다.
즉 , MBR(SD메모리의 0번섹터)을 찾았으면 이를 참조해서 PBR을 찾고 이를 참고해서 FAT #1, FAT#2를 찾고 이를 참고해서 클러스터 영역을 찾아가게 되는 것입니다. 이해가 되셨나요?^^
--------------------------------------------------------------------------------------------------
이제 FAT 엔트리에 대해 알아보겠습니다.^^
FAT 엔트리는 FAT 정보가 위치한 FAT #1, FAT #2 영역을 말합니다. 나무가 모여 숲을 이루듯, FAT 엔트리가 여러개 모여서 FAT #1과 FAT #2를 이룹니다. 적절한 비교인가요?^^; 아래의 그림이 FAT 엔트리입니다.^^
FAT 엔트리의 첫번째 섹터는 부트레코드 섹터(PBR)와 예약섹터(Reserved Sectors) 다음의 섹터에 위치하므로 부트레코드 주소와 예약섹터의 값을 더하면 FAT의 시작 위치를 알 수 있습니다.^^
FAT 정보가 있는 첫 번째 섹터의 위치(FAT 엔트리의 첫 번째 섹터)를 계산해 보면,
[FAT 시작주소] = [PBR 어드레스] + [예약섹터개수]가 됩니다. (예약섹터개수는 PBR 섹터를 포함한 값입니다.) 다시 나타내면
[FAT Begin ] = [LBA Begin] + [Reserved Sectors]가 됩니다. 앞에서 64MB SD메모리를 예로 들었으므로, 그 수치를 넣어보면,
[FAT 시작주소] = [0x00000027] + [0x26] = 0x4D가 나오네요.^^
따라서 64MB SD카드의 FAT 시작 주소(FAT #1)는 = 0x4D 임을 알았습니다. 즉, FAT 엔트리의 첫 번째 섹터는 = 0x4D 입니다.
----------------------------------------------------------------------------------------------------
FAT 시작 섹터 주소가 0x4D 임을 알았으니, 0x4D 섹터를 읽어보도록 하겠습니다.^^
FAT 시작 섹터 (FAT 엔트리의 첫 번째 섹터)
위의 데이터는 FAT 엔트리의 첫 번째 섹터에 들어 있는 값입니다. SD메모리를 FAT32 형식으로 포맷을 한 후에,
SD메모리에 아무런 파일도 저장해 놓지 않았다면 위와 같이 한 줄을 제외하고는 모두 0으로 나옵니다.^^ 사실 저도 놀랐습니다.^^; 왜 다 영이지?^^; MP3 파일을 SD메모리에 저장한 후 다시 FAT의 첫 번째 섹터를 읽으면, 아래와 같이 데이터가 출력됩니다. 데이터에 일정한 패턴이 보이는군요.^^
FAT 시작 섹터 (FAT 엔트리의 첫 번째 섹터)
FAT 엔트리는 위의 데이터에 보이는 패턴처럼, 4바이트 구조로 되어 있습니다. 다시 말하면 아래와 같이
<-4바이트-><-4바이트-><-4바이트-><-4바이트->
[FAT엔트리][FAT엔트리][FAT엔트리][FAT엔트리]
[FAT엔트리][FAT엔트리][FAT엔트리][FAT엔트리]
[FAT엔트리][FAT엔트리][FAT엔트리][FAT엔트리]
...
...
이런식으로 4바이트 크기를 가진 [FAT엔트리]가 모여서 FAT#1, FAT#2를 이루게 됩니다.^^