26.02.2013 Views

第1章ZLG/CF 驱动使用 - Read

第1章ZLG/CF 驱动使用 - Read

第1章ZLG/CF 驱动使用 - Read

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

}<br />

}<br />

return rt;<br />

}<br />

break;<br />

rt = DISK_READ_OK;<br />

case DISK_WRITE_SECTOR: /*写扇区*/<br />

rt = DISK_WRITE_NOT_OK;<br />

if(ATA_WriteSector(0,(uint16*)Dp->Buf, Dp->SectorIndex + Dp->RsvdForLow,1)) (4)<br />

{<br />

}<br />

default:<br />

break;<br />

rt = DISK_WRITE_OK;<br />

rt = BAD_DISK_COMMAND;<br />

break;<br />

(1) 只有当 ATA 设备 0 可用时,才进行低层驱动初始化;<br />

(2) 获取逻辑驱动器的起始扇区号,该函数源程序如程序清单 1.10 所示。<br />

(3) “Dp->SectorIndex”为文件管理系统要读取的逻辑扇区号,“Dp->RsvdForLow”为<br />

设备逻辑扇区的起始扇区号;ZLG/FS 读取的是逻辑扇区号,而逻辑扇区号与设备的实际扇<br />

区号可能不一致(与设备格式化有关),因此在读扇区操作时,应将逻辑扇区号转换为设备<br />

中的实际的物理扇区号;物理扇区号为逻辑扇区号与逻辑扇区起始扇区号之和。<br />

(4) 写扇区操作也需和读扇区操作一样,应将需要写逻辑扇区号转换为设备中的实际的<br />

物理扇区号。<br />

对于 <strong>CF</strong> 卡和 IDE 硬盘等大容量存贮器,初 FAT 文件管理系统格式化后,在逻辑盘的<br />

起始扇区前通常会包含隐藏扇区;包含隐藏扇区的 <strong>CF</strong> 卡或 IDE 硬盘,在设备的物理扇区的<br />

0 号扇区(逻辑分区表)中特定的位置记录了逻辑盘的起始的物理扇区号;而 ZLG/FS 文件<br />

系统是面向逻辑盘的操作,所以在初始化低层设备驱动时,需获取逻辑盘的起始物理扇区号,<br />

如程序清单 1.10 所示。<br />

uint32 GetVolumeFirstSect(uint8 Device)<br />

{<br />

uint8 buffer[512];<br />

uint32 RelaStaSect;<br />

程序清单 1.10 获取逻辑盘的起始扇区号<br />

ATA_<strong>Read</strong>Sector(Device,(uint16 *)buffer,0,1); (1)<br />

if((buffer[510]==0x55)&&(buffer[511]==0xAA)) (2)<br />

{<br />

if(((buffer[0]==0xEB)&&(buffer[2]==0x90))||(buffer[0] == 0xE9)) (3)<br />

{<br />

}<br />

RelaStaSect = 0;

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!