📄 ufi.h
字号:
#ifndef _UFI_H
#define _UFI_H
#include "DataType.h"
#define CBW_SIGNATURE 0x43425355
#define CSW_SIGNATURE 0x53425355
//******************************************************************************
//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
/////////////////////////////////////////////////////////////////////
typedef struct _GENERIC_CDB {
U8 OperationCode;
U8 Reserved[15];
} GENERIC,*PGENERIC;
typedef struct _READ {
U8 Reserved1;
U8 L3;
U8 L2;
U8 L1;
U8 L0;
U8 Reserved2;
U16 ReadLength;
U8 Reserved3;
} READ, * PREAD;
//////////////////////////////////////////////////////
typedef struct _WRITE {
U8 Reserved1;
U8 L3;
U8 L2;
U8 L1;
U8 L0;
U8 Reserved2;
U16 WriteLength;
U8 Reserved3;
} WRITE, *PWRITE;
///////////////////////////////////////////
typedef struct _READ_CAPACITY {
U8 Resverd2[8];
U8 Rseverd1;
} READ_CAPACITY, *PREAD_CAPACITY;
//////////////////////////////////////////////////////
typedef struct _INQUIRY {
U8 Reserved0 ;
U8 PageCode;
U8 Reserved1;
U8 AllocationLen;
U8 Resverd2;
} INQUIRY, *PINQUIRY;
/////////////////////////////////////////////////////
typedef struct _REQUEST_SENSE {
U8 Reserved1[3];
U8 AllocationLen;
U8 Reserved2;
} REQUEST_SENSE, *PREQUEST_SENSE;
///////////////////////////////////////////////////
typedef struct _TEST_UNIT {
U8 Reserved[4];
U8 Reserved1;
} TEST_UNIT, *PTEST_UNIT;
///////////////////////////////////////////////////////
typedef union _CBWCB{
GENERIC ufi_GenRic;
READ Ufi_Read;
READ_CAPACITY Ufi_ReadCapacity;
WRITE Ufi_Write;
INQUIRY Ufi_Inquiry;
REQUEST_SENSE Ufi_RequestSense;
TEST_UNIT Ufi_TestUnit;
} 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{
U32 dCBW_Signature;
U32 dCBW_Tag;
U32 dCBW_DataXferLen;
U8 bCBW_Flag;
U8 bCBW_LUN;
U8 bCBW_CDBLen;
U8 OperationCode;
CBWCB CBWCommand;
} CBW, *PCBW;
////////////////////////////////////////////////
typedef struct _COMMAND_STATUS_WRAPPER{
U32 dCSW_Signature;
U32 dCSW_Tag;
U32 dCSW_DataResidue;
U8 bCSW_Status;
} CSW, *PCSW;
//////////////////////////////////////////////
typedef union _Block{
CBW CbwBlock;
CSW CswBlock;
} BLOCK, * PBLOCK;
//**********************************************************************************
//Functions
//
//**********************************************************************************
U8 BulkOut(U8 *pbBuffer,U16 len);
U8 BulkIn(U8 *pbBuffer,U16 len);
U8 Inquiry(void);
U8 TestUnit(void);
U8 RequestSense(void);
U8 ReadCapacity(void);
U8 Read(U32 dlba,U8 blen,U8 *pbBuffer);
U8 Write(U32 dlba,U8 blen,U8 *pbBuffer);
U8 PollDisk(void);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -