www.pudn.com > MyUDisk.rar > 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__