www.pudn.com > ARM+SL811.rar > massstorage.c


#include "ezusb.h" 
#include "ezregs.h" 
#include "massstorage.h" 
 
#include "host_811.h" 
#include "..\target\def.h" 
#include "..\target\44blib.h" 
 
#define OutPayLoad 64 
#define InPayLoad 64 
 
 
 
 
CBW MassStorageCBW; 
CSW MassStorageCSW; 
BYTE MassStorageDataBuf[512]; 
BYTE MassStorageStatusBuf[13]; 
 
BYTE UFI_Inquiry()//查询,获取设备信息 
{ 
 BYTE  i; 
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,epbulkout&0x0f,PID_OUT,0,OutPayLoad,31,(BYTE *)&MassStorageCBW)) //发送命令 
{ 
//ErrorCode=0x01; 
return FALSE; 
} 
EZUSB_Delay(20000);//严时200MS 
if(!usbXfer(1,epbulkin&0x0f,PID_IN,0,InPayLoad,36,(BYTE *)&MassStorageDataBuf)) //设备到主机的数据传输,在此句无数据返回 
{ 
//ErrorCode=0x01; 
return FALSE; 
} 
if(!usbXfer(1,epbulkin&0x0f,PID_IN,0,InPayLoad,13,(BYTE *)&MassStorageStatusBuf)) 
{ 
//ErrorCode=0x01; 
return FALSE; 
} 
if(MassStorageStatusBuf[12]!=0x00) 
{ 
//ErrorCode=0x01; 
return FALSE; 
} 
return TRUE; 
}