阅读:1081回复:1
read10
老师提供的资料(51+Sl811,读写CF卡)
INPUT PARA. FOR FUNCTION para[7]=0 init CF card para[7]=1 read the status of CF card para[7]=2 read data from CF card to buffer(LBA) para[7]=3 write data to CF card (LBA) para[7]=4 verify sector para[7]=82h read data from CF card to buffer(non LBA) para[7]=83h write data to CF card (non LBA) para[7]=5 format cf card para[7]=6 identify drive PARA. FOR READ/WRITE/FORMAT para[1]=feature para[2]=Sector Count para[3]=Sector Number(LBA 7-0) para[4]=Cylinder Low (LBA 15-8) para[5]=Cylinder High (LBA 23-16) para[6]=Head (LBA 27-24) BX=Adress of Buffer OUTPUT Function Return status of operation CY=0 successful of operation CY=1 failed operation unsigned char CF_IO() { switch(para[7]) { case 0: CF_INIT();break; case 1: return cf_status; case 2: CF_READ();break; case 3: CF_WRITE();break; case 4: CF_VERIFY();break; case 5: CF_FORMAT();break; case 6: CF_IDENTIFY();break; default:{cf_status=bad_cmd;CY=1;return cf_status;}/*bad_cmd equ 1 */ } if(cf_status>=1) CY=1; return cf_status; } 程序中 CF_READ()和我写的程序 READ10() 有什么区别? 我想CF_READ()应该和我的READ10()差不多吧! unsigned char READ10() { MassStorageCBW.dCBW_Signature=CBW_SIGNATURE; MassStorageCBW.dCBW_Tag=0x60a624de; MassStorageCBW.dCBW_DataXferLen=? MassStorageCBW.bCBW_Flag=0x80;//从机到主机 MassStorageCBW.bCBW_LUN=?; MassStorageCBW.bCBW_CDBLen=0x0C; //////////////////////////////////////////// MassStorageCBW.cdbRBC.READ10.OperationCode=READ;//28H 其他值............. LBA之不能确定? //////////////////////////////////////////// if(!BULK_Transfer_OUT((unsigned char *)&MassStorageCBW,sizeof(MassStorageCBW))) return FALSE; DelayMs(5); if(!BULK_Transfer_IN(pBuffer,......))//需要修改 return FALSE; if(!BULK_Transfer_IN((unsigned char *)&MassStorageCSW,13)) return FALSE; return TRUE } 还有几个参数我不能确定:LUN是多少? CBW中dCBWDataTransferLength不能确定?。 para[3] para[4] para[5]和para[6]与LBA是什么关系?我搞不懂。 |
|
|
沙发#
发布于:2004-05-10 17:17
lun是盘符,0就可
dCBWDataTransferLength指需要返回的bytes数目 para3-6在LBA寻址时,就是LBA的位置。否则就是由磁头、柱面、扇区去寻址。在DEVICE寄存器中决定哪中方式寻址。 |
|