⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ufi.#1

📁 sl811 c8051F驱动程序 保证绝对可以使用 USB通信协议USB1.1
💻 #1
字号:
//************************************************************************
//author:dragon
//web:8dragon.com
//2004.2.5完成于桃龙源
//*************************************************************************
#define CBW_SIGNATURE   0x55534243
#define CSW_SIGNATURE   0x55534253
#define BYTE	unsigned char
#define WORD	unsigned short
#define DWORD	unsigned long
#define UINT	unsigned int
//******************************************************************************
//The macroinstruction of USB Mass Storage Class -UFI Command Specification
//*****************************************************************************
#define UFI_CMD_FORMAT			0x04
#define UFI_CMD_INQUIRY			0x12
#define UFI_CMD_MODESELECT		0x15
#define UFI_CMD_MODESENSE6		0x1A
#define UFI_CMD_LOCKORNOT		0x1E
#define UFI_CMD_READ			0x28
#define UFI_CMD_READCAPACITY	0x25
#define UFI_CMD_REQUESTSENSE	0x03
#define UFI_CMD_STARTSTOPUNIT	0x1B
#define UFI_CMD_TESTUNITREADY	0x00
#define UFI_CMD_VERIFY			0x2F
#define UFI_CMD_WRITE			0x2A
//****************************************************************************
// The definition of structure of UFI command
//some essential commands that can control U disk are defined here,
//and some others are not refered here.IF you want to know necessary details 
// you may read UFI Command Specification 1.0 
//****************************************************************************
typedef struct _READ {
		BYTE OperationCode;
		BYTE Reserved1;
		DWORD LBA;
		BYTE Reserved2;
		WORD ReadLength;
		BYTE Reserved3[3];
		} READ, * PREAD;
typedef struct _WRITE {
		BYTE OperationCode;
		BYTE Reserved1;
		DWORD LBA;
		BYTE Reserved2;
		WORD WriteLength;
		BYTE Reserved3[3];
		} WRITE, *PWRITE;	
typedef struct _READ_CAPACITY {
		BYTE OperationCode;
		BYTE Rseverd1;
		DWORD LBA;
		BYTE Resverd2[6];
	} READ_CAPACITY, *PREAD_CAPACITY;
typedef struct _INQUIRY {
	BYTE OperationCode;	/* 12H */
	BYTE Reserved0 ;
	BYTE PageCode;
	BYTE Reserved1;
	BYTE AllocationLen;
    BYTE Resverd2[7];		
	} INQUIRY, *PINQUIRY;
typedef struct _REQUEST_SENSE {
		BYTE OperationCode;   
		BYTE Reserved1[3];
		BYTE AllocationLen;
		BYTE Reserved2[7];
	} REQUEST_SENSE, *PREQUEST_SENSE;
typedef struct _TEST_UNIT {
		BYTE OperationCode;    
		BYTE Reserved[11];
	} TEST_UNIT, *PTEST_UNIT;
//typedef struct _GENERIC_CDB {
//	unsigned char OperationCode;
 //   unsigned char Reserved[15];
//} Standard_CDB,*PGENERIC_CDB;
//*********************************************************************************
//the structure of CBWCB.
// Usually  CBWCB include UFI COMMAND which can directly control U disks;
//*********************************************************************************
typedef union _CBWCB{    
		READ					Ufi_Read;
		READ_CAPACITY			Ufi_ReadCapacity;
		WRITE					Ufi_Write;
		INQUIRY					Ufi_Inquiry;
		REQUEST_SENSE			Ufi_RequestSense;
		TEST_UNIT				Ufi_TestUnit;
//		GENERIC_CDB				Ufi_Genric;
	} CBWCB, *PCBWCB;

//**********************************************************************************
//Defined the USB bulk transcation.
//the structure of  CBW( command Block Wrapper)and CSW(Command Status Wrapper)
//all the USB's packet are transferd by CBW,and the status are returned by 
//CSW.
//**********************************************************************************
typedef struct _COMMAND_BLOCK_WRAPPER{
		DWORD  dCBW_Signature;
		DWORD  dCBW_Tag;
		DWORD  dCBW_DataXferLen;
		BYTE   bCBW_Flag;
		BYTE   bCBW_LUN;
		BYTE   bCBW_CDBLen;	
		CBWCB  CBWCommand;		// UFI COMMAND are inclued in it;
		BYTE   Resverd[4];			//
	} CBW, *PCBW;
typedef struct _COMMAND_STATUS_WRAPPER{
		DWORD   dCSW_Signature;
		DWORD   dCSW_Tag;
		DWORD   dCSW_DataResidue;
		BYTE    bCSW_Status;
	} CSW, *PCSW;
typedef union _Block{
		CBW		CbwBlock;
		CSW		CswBlock;
	} BLOCK,*pBlock;
//**********************************************************************************
//Functions
//
//**********************************************************************************
BYTE BulkOut(BYTE *pbBuffer,WORD len,WORD lba);
BYTE BulkIn(BYTE *pbBuffer,WORD len);
BYTE Inquiry(void);
BYTE TestUnit(void);
BYTE LockMedia(void);
BYTE RequestSense(void);
BYTE ReadCapacity(void);
BYTE Read(DWORD dlba,BYTE blen,BYTE *pbBuffer);
BYTE Write(DWORD dlba,BYTE blen,BYTE *pbBuffer,BYTE bWaitTime);
BYTE PollDisk(void);
//************************************************************************
//author:dragon
//web:8dragon.com
//2004.2.5完成于桃龙源
//*************************************************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -