📄 myudisk.h
字号:
#ifndef __MYUDISK_H__
#define __MYUDISK_H__
//11个USB标准请求
#define get_status 0x00
#define clear_feature 0x01
#define reserved 0x02
#define set_feature 0x03
#define set_address 0x05
#define get_descriptor 0x06
#define get_configuration 0x08
#define set_configuration 0x09
#define get_interface 0x0a
#define set_interface 0x0b
//SCSI指令集中的几个指令
#define Inquiry 0x12
#define Mode_Sense 0x1A
#define Read10 0x28
#define Read_Capacity 0x25
#define Read_Format_Capacities 0x23
#define Test_Unit_Ready 0x00
#define Verify 0x2F
#define Write10 0x2A
#define Medium_Removal 0x1E
#define SCSI_MSPGCD_TPP 0x1C
#define SCSI_MSPGCD_RETALL 0x3F
typedef struct _STRUCT_CBW
{
unsigned char CBWCB[12]; //UFI Command all have 12bit
}struct_CBW;
int DbgPrintfLoop(void);
void DbgPrintf(char *fmt,...);
void __irq IsrUsbd(void);
void InitUsbd(void);
void PrintEp0Pkt(U8 *pt);
void Ep0Handler(void);
void Ep1Handler(void);
void Ep3Handler(void);
void TransmitCSW(void);
void SCSI_Read_Format_Capacities(void);
void SCSI_Read10(void);//FLASH读处理函数
void SCSI_Write10(void); //FLASH写操作
void SCSI_Mode_Sense(void);
void SCSI_Get_Inquery(void);
void SCSI_Read_Capacity(void);
// ===================================================================
// All following commands will operate only in case
// - ep0_csr is valid.
// ===================================================================
#define CLR_EP0_OUT_PKT_RDY() rEP0_CSR=( ep0_csr & (~EP0_WR_BITS)| \
EP0_SERVICED_OUT_PKT_RDY )
#define CLR_EP0_OUTPKTRDY_DATAEND() rEP0_CSR=( ep0_csr & (~EP0_WR_BITS)| \
(EP0_SERVICED_OUT_PKT_RDY|EP0_DATA_END) )
#define SET_EP0_IN_PKT_RDY() rEP0_CSR=( ep0_csr & (~EP0_WR_BITS)| \
(EP0_IN_PKT_READY) )
#define SET_EP0_INPKTRDY_DATAEND() rEP0_CSR=( ep0_csr & (~EP0_WR_BITS)| \
(EP0_IN_PKT_READY|EP0_DATA_END) )
#define CLR_EP0_SETUP_END() rEP0_CSR=( ep0_csr & (~EP0_WR_BITS)| \
(EP0_SERVICED_SETUP_END) )
#define CLR_EP0_SENT_STALL() rEP0_CSR=( ep0_csr & (~EP0_WR_BITS)& \
(~EP0_SENT_STALL) )
#define FLUSH_EP0_FIFO() {while(rOUT_FIFO_CNT1_REG)rEP0_FIFO;}
// ===================================================================
// All following commands will operate in case
// - in_csr1 is valid.
// ===================================================================
#define SET_EP1_IN_PKT_READY() rIN_CSR1_REG= ( in_csr1 &(~ EPI_WR_BITS)\
| EPI_IN_PKT_READY )
#define SET_EP1_SEND_STALL() rIN_CSR1_REG= ( in_csr1 & (~EPI_WR_BITS)\
| EPI_SEND_STALL) )
#define CLR_EP1_SENT_STALL() rIN_CSR1_REG= ( in_csr1 & (~EPI_WR_BITS)\
&(~EPI_SENT_STALL) )
#define FLUSH_EP1_FIFO() rIN_CSR1_REG= ( in_csr1 & (~EPI_WR_BITS)\
| EPI_FIFO_FLUSH) )
// ===================================================================
// All following commands will operate in case
// - out_csr3 is valid.
// ===================================================================
#define CLR_EP3_OUT_PKT_READY() rOUT_CSR1_REG= ( out_csr3 &(~ EPO_WR_BITS)\
&(~EPO_OUT_PKT_READY) )
#define SET_EP3_SEND_STALL() rOUT_CSR1_REG= ( out_csr3 & (~EPO_WR_BITS)\
| EPO_SEND_STALL) )
#define CLR_EP3_SENT_STALL() rOUT_CSR1_REG= ( out_csr3 & (~EPO_WR_BITS)\
&(~EPO_SENT_STALL) )
#define FLUSH_EP3_FIFO() rOUT_CSR1_REG= ( out_csr3 & (~EPO_WR_BITS)\
|EPO_FIFO_FLUSH) )
#define EP0_STATE_INIT (0)
//NOTE: The ep0State value in a same group should be added by 1.
#define EP0_STATE_GD_DEV_0 (10) //10-10=0
#define EP0_STATE_GD_DEV_1 (11) //11-10=1
#define EP0_STATE_GD_DEV_2 (12) //12-10=2
#define EP0_STATE_GD_CFG_0 (20)
#define EP0_STATE_GD_CFG_1 (21)
#define EP0_STATE_GD_CFG_2 (22)
#define EP0_STATE_GD_CFG_3 (23)
#define EP0_STATE_GD_CFG_4 (24)
#define EP0_STATE_GD_CFG_ONLY_0 (40)
#define EP0_STATE_GD_CFG_ONLY_1 (41)
#define EP0_STATE_GD_IF_ONLY_0 (42)
#define EP0_STATE_GD_IF_ONLY_1 (43)
#define EP0_STATE_GD_EP0_ONLY_0 (44)
#define EP0_STATE_GD_EP1_ONLY_0 (45)
#define EP0_INTERFACE_GET (46)
#define EP0_STATE_GD_STR_I0 (30)
#define EP0_STATE_GD_STR_I1 (31)
#define EP0_STATE_GD_STR_I2 (32)
#define EP0_CONFIG_SET (33)
#define EP0_GET_STATUS0 (35)
#define EP0_GET_STATUS1 (36)
#define EP0_GET_STATUS2 (37)
#define EP0_GET_STATUS3 (38)
#define EP0_GET_STATUS4 (39)
//USB建立数据包的结构//具体各个字段的含义,详见USB协议中的说明
struct USB_SETUP_DATA{
U8 bmRequestType;
U8 bRequest;
U8 bValueL;
U8 bValueH;
U8 bIndexL;
U8 bIndexH;
U8 bLengthL;
U8 bLengthH;
};
struct USB_GET_STATUS{ //返回USB的状态
U8 Device;
U8 Interface;
U8 Endpoint0;
U8 Endpoint1;
U8 Endpoint3;
};
struct USB_INTERFACE_GET{
U8 AlternateSetting;
};
// Standard bmRequestTyje (Direction)
#define HOST_TO_DEVICE (0x00) //在Setup的数据结构中的bmRequestType字段的各位的含义
#define DEVICE_TO_HOST (0x80) //数据的传输方向
// Standard bmRequestType (Type)
#define STANDARD_TYPE (0x00) //请求的类型
#define CLASS_TYPE (0x20)
#define VENDOR_TYPE (0x40)
#define RESERVED_TYPE (0x60)
// Standard bmRequestType (Recipient)
#define DEVICE_RECIPIENT (0) //表明请求的接收者
#define INTERFACE_RECIPIENT (1)
#define ENDPOINT_RECIPIENT (2)
#define OTHER_RECIPIENT (3)
// Feature Selectors //特性选择符
#define DEVICE_REMOTE_WAKEUP (1)
#define EP_STALL (0)
// Standard Request Codes //11个标准的请求代码
#define GET_STATUS (0)
#define CLEAR_FEATURE (1)
#define SET_FEATURE (3)
#define SET_ADDRESS (5)
#define GET_DESCRIPTOR (6)
#define SET_DESCRIPTOR (7)
#define GET_CONFIGURATION (8)
#define SET_CONFIGURATION (9)
#define GET_INTERFACE (10)
#define SET_INTERFACE (11)
#define SYNCH_FRAME (12)
#define GET_MAX_LUN (0xfe)
// Class-specific Request Codes //
#define GET_DEVICE_ID (0)
#define GET_PORT_STATUS (1)
#define SOFT_RESET (2)
// Descriptor Types //描述符类型
#define DEVICE_TYPE (1)
#define CONFIGURATION_TYPE (2)
#define STRING_TYPE (3)
#define INTERFACE_TYPE (4)
#define ENDPOINT_TYPE (5)
//configuration descriptor: bmAttributes
#define CONF_ATTR_DEFAULT (0x80) //Spec 1.0 it was BUSPOWERED bit.
#define CONF_ATTR_REMOTE_WAKEUP (0x20)
#define CONF_ATTR_SELFPOWERED (0x40)
//endpoint descriptor
#define EP_ADDR_IN (0x80)
#define EP_ADDR_OUT (0x00)
#define EP_ATTR_CONTROL (0x0)
#define EP_ATTR_ISOCHRONOUS (0x1)
#define EP_ATTR_BULK (0x2)
#define EP_ATTR_INTERRUPT (0x3)
//string descriptor
#define LANGID_US_L (0x09)
#define LANGID_US_H (0x04)
#endif //__MYUDISK_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -