www.pudn.com > USBdiskRW.rar > massstorage.c


#include "ezusb.h" 
#include "ezregs.h" 
#include "massstorage.h" 
 
#include "host_811.h" 
#include "def.h" 
#include "44blib.h" 
 
#define OutPayLoad 64 
#define InPayLoad 64 
 
 
 
 
CBW MassStorageCBW; 
CSW MassStorageCSW; 
BYTE MassStorageDataBuf[512]; 
BYTE MassStorageStatusBuf[13]; 
 
BYTE UFI_Inquiry()                          //查询,获取设备信息 
{ 
 
 
 BYTE  i; 
 printf("~~~~~~~~~~~~~~~~~~~~~~\n"); 
MassStorageCBW.dCBWSignature= 0x55534243; 
MassStorageCBW.dCBWTag= 0x28fa8b87; 
MassStorageCBW.dCBWDataTransferLength[0]= 0x24; 
MassStorageCBW.dCBWDataTransferLength[1]= 0x0; 
MassStorageCBW.dCBWDataTransferLength[2]= 0x0; 
MassStorageCBW.dCBWDataTransferLength[3]= 0x0; 
MassStorageCBW.bmCBWFlags= 0x80; //D7位=0表示主机到设备的数据输出 
                                 //D7位=1表示设备到主机的数据输入 
MassStorageCBW.bCBWLUN= 0;//表示接受该命令的设备的逻辑单元号LUN 
MassStorageCBW.bCBWCBLength= 0x0C; 
                                 //表示CBWCB的长度,即将要发送的特定子类的长度 
                                 //0X0C是UFI子类中的Read(10)命令长度 
MassStorageCBW.CBWCB[0]= 0x12; 
MassStorageCBW.CBWCB[1]= 0x0; 
MassStorageCBW.CBWCB[2]= 0x0; 
MassStorageCBW.CBWCB[3]= 0x0; 
MassStorageCBW.CBWCB[4]= 0x24; 
MassStorageCBW.CBWCB[5]= 0x0; 
for(i=6;i<0x10;i++) MassStorageCBW.CBWCB[i]= 0x0; 
 
if(!usbXfer(1,0x82&0x0f,PID_OUT,0,OutPayLoad,31,(BYTE *)&MassStorageCBW)) //发送命令 
{ 
//ErrorCode=0x01;epbulkout&0x0f 
printf("@!!!!!"); 
return FALSE; 
} 
printf("@@4@@"); 
EZUSB_Delay(20000);//严时200MS 
 
 
if(!usbXfer(1,0x02,PID_IN,0,InPayLoad,36,(BYTE *)&MassStorageDataBuf)) //设备到主机的数据传输,在此句无数据返回 
 { 
//ErrorCode=0x01;epbulkin&0x0f] 
printf("@@@@@"); 
return FALSE; 
 } 
 
printf("$$5$$"); 
if(!usbXfer(1,0x01,PID_IN,0,InPayLoad,13,(BYTE *)&MassStorageStatusBuf)) 
 { 
//ErrorCode=0x01; 
printf("$$$$$"); 
return FALSE; 
 } 
 
if(MassStorageStatusBuf[12]!=0x00) 
 { 
//ErrorCode=0x01; 
return FALSE; 
 } 
 printf("READING IS CORRACT!!!"); 
return TRUE; 
}