📄 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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -