第1章ZLG/CF 驱动使用 - Read
第1章ZLG/CF 驱动使用 - Read
第1章ZLG/CF 驱动使用 - Read
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;