阅读:920回复:1
我修改了read_10函数,大家觉得有没有问题
请看下面read_10函数.我的参数dCBW_DataXferLen,bCBW_LUN,XferLength有没有错误?
同时对我的read函数有什么意见? /* 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) */ unsigned char CF_WRITE() { //下面是CBW MassStorageCBW.dCBW_Signature=CBW_SIGNATURE; MassStorageCBW.dCBW_Tag=0x60a624de; MassStorageCBW.dCBW_DataXferLen=para[2]*512; MassStorageCBW.bCBW_Flag=0x00; MassStorageCBW.bCBW_LUN=0; MassStorageCBW.bCBW_CDBLen=sizeof(WRITE_RBC);//0x0C //下面是CBWCB MassStorageCBW.cdbRBC.WRITE_RBC.OperationCode=write10;//0x2A MassStorageCBW.cdbRBC.WRITE_RBC.VendorSpecific=0;// MassStorageCBW.cdbRBC.WRITE_RBC.LBA.LBA_W8.LBA_3=para[6]; MassStorageCBW.cdbRBC.WRITE_RBC.LBA.LBA_W8.LBA_2=para[5]; MassStorageCBW.cdbRBC.WRITE_RBC.LBA.LBA_W8.LBA_1=para[4]; MassStorageCBW.cdbRBC.WRITE_RBC.LBA.LBA_W8.LBA_0=para[3]; MassStorageCBW.cdbRBC.WRITE_RBC.Reserved=0; MassStorageCBW.cdbRBC.WRITE_RBC.XferLength=para[2]; MassStorageCBW.cdbRBC.WRITE_RBC.Reserved1[0]=0; MassStorageCBW.cdbRBC.WRITE_RBC.Reserved1[1]=0; MassStorageCBW.cdbRBC.WRITE_RBC.Reserved1[2]=0; //三步,发CBW,发数据,接收CSW. if(!BULK_Transfer_OUT((unsigned char *)&MassStorageCBW,sizeof(MassStorageCBW))) return FALSE; DelayMs(15); if(!BULK_Transfer_OUT(BX,para[2])) return FALSE; //DelayMs(10); if(!BULK_Transfer_IN((unsigned char *)&MassStorageCSW,13)) return FALSE; return TRUE; } |
|
最新喜欢:![]()
|
沙发#
发布于:2004-05-11 20:28
我发现错误了。
“发数据”的程序,参数para[2]应该改为512 错误程序: if(!BULK_Transfer_OUT(BX,para[2])) return FALSE; 正确程序: if(!BULK_Transfer_OUT(BX,512)) return FALSE; |
|
|