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

📄 tpbulk.h

📁 smartARM2400 USB OTG例程
💻 H
📖 第 1 页 / 共 2 页
字号:
/****************************************Copyright (c)****************************************************
**                            Guangzhou ZHIYUAN electronics Co.,LTD.
**                                      
**                                 http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name:               Tpbulk.h
** Latest modified Date:    2007-10-8
** Latest Version:          1.0
** Descriptions:            这部分代码实现大容量类USB批量传输规范
**
**--------------------------------------------------------------------------------------------------------
** Created by:              Lizhenming
** Created date:            2007-09-17
** Version:                 1.0
** Descriptions:            The original version
**
*********************************************************************************************************/
#ifndef __TPBULK_H__
#define __TPBULK_H__


#define __CSW_GOOD        0x00                                          /*  命令通过                */
#define __CSW_FAIL        0x01                                          /*  命令失败                */  
#define __CSW_PHASE_ERROR 0x02                                          /*  命令有误                */


#define __CBW_SIGNATURE   0x43425355		                            /*  CBW后固有的特征码       */
#define __CSW_SIGNATURE   0x53425355		                            /*  CSW后固有的特征码       */
#define __CBW_FLAG_IN     0x80			                                /*  后面固有的标志码        */
#define __MAX_CDBLEN      0x10			                                /*  最长的CBWCB             */

typedef struct _COMMAND_BLOCK_WRAPPER{		                            /*  命令数据包(CBW)结构     */
    __uint32   dwCBWSignature;                                          /*  CBW标记:43425355h(小端) */
    __uint32   dwCBWTag;                                                /*  主机发送的命令块标签    */
    __uint32   dwCBWDataXferLen;                                        /*  主机要求传输的字节数    */
    __uint8    bCBWFlag;                                                /*  bit7:0-DataOut,1-DataIn */
    __uint8    bCBWLUN;                                                 /*  设备逻辑单元号码        */
    __uint8    bCBWCDBLen;                                              /*  命令块的有效长度        */
	__uint8    bOperationCode;                                          /*  命令块操作码            */
    __CDB_RBC  cdbRBC;                                                  /*  设备将执行的命令块      */
} __CBW, *__PCBW;

typedef  __packed struct _COMMAND_STATUS_WRAPPER{		                /*  命令状态数据包结构      */
    __uint32   dwCSWSignature;                                          /*  CSW标记:53425355h(小端) */
    __uint32   dwCSWTag;                                                /*  相应CBW的dCBWTag字段值  */
    __uint32   dwCSWDataResidue;                                        /*  剩余未接收/发送的字节数 */    
    __uint8    bCSWStatus;                                              /*  命令块状态值            */
} __CSW, *__PCSW;

typedef union _TPBULK_STRUC {                                           /*  定义批量传输命令包和状  */
    __CBW     tpbulkCommandBlock;                                       /*  态包联合体              */
    __CSW     tpbulkCommandStatus;
    __uint8   TEMP[31];  
}__TPBLK_STRUC, * __PTPBLK_STRUC;

typedef __packed union {                                                /*  定义8bit的位域          */
	 __packed struct
	{
		unsigned b0 :1;
		unsigned b1 :1;
		unsigned b2 :1;
		unsigned b3 :1;
		unsigned b4 :1;
		unsigned b5 :1;
		unsigned b6 :1;
		unsigned b7 :1;
	}bit_;
	__uint8 char_;
}__char_bit,*__pchar_bit;

/*********************************************************************************************************
  大容量存储类USB批量传输的命令块数据包和命令状态包
*********************************************************************************************************/
extern      __TPBLK_STRUC		__GtpbulkBlock;                         /*  大容量存储类命令块数据包和  */
                                                                        /*  命令状态包共用同一片RAM     */        
#define     __GtpbulkCBW		__GtpbulkBlock.tpbulkCommandBlock       /*  大容量存储类命令块数据包31B */
#define	    __GdwCBWXferLen		__GtpbulkCBW.dwCBWDataXferLen           /*  批量输入或批量输出端点传输  */
                                                                        /*  的数据字节数                */ 
#define     __RBC_OPCODE        __GtpbulkCBW.bOperationCode             /*  设备要执行的命令块操作码    */                                                                       
#define	    __RBC_CDB		    __GtpbulkCBW.cdbRBC                     /*  设备要执行的命令块          */                                     
#define     __GtpbulkCSW		__GtpbulkBlock.tpbulkCommandStatus      /*  大容量存储类命令状态包(13B) */

/*********************************************************************************************************
   批量传输端点标志
*********************************************************************************************************/
extern      __char_bit                  __GcbitTpbulkFlags;
#define     __GbitBOTStallAtBulkOut  	__GcbitTpbulkFlags.bit_.b0      /*  批量输出端点停止(=1)        */
#define     __GbitBOTStallAtBulkIn  	__GcbitTpbulkFlags.bit_.b1      /*  批量输入端点停止(=1)        */
#define     __GbitBOTXferAbort  	    __GcbitTpbulkFlags.bit_.b2      /*  批量输出/输入端点停止(=1)   */

/*********************************************************************************************************
  批量传输参数
*********************************************************************************************************/
typedef __packed struct _TPBULK_PARA_ {
    __char_bit  __GcbitBOTFsmState;                                     /*  批量传输状态机              */
    __char_bit 	__GcbitBOTXferSpace;                                    /*  传输数据的存储类型          */
    __uint8     reserver[2];
    __uint32   __GdwBOTXferResidue;                                     /*  批量传输数据剩余字节数      */
    __uint8   *__GpucBOTXferData;                                       /*  批量传输的数据指针          */
} __TPBULK_PARA;

extern __TPBULK_PARA    __tpbulkPara[];                                 /*  批量传输参数                */

/*********************************************************************************************************
   批量传输状态机   Finite State Machine [One-Hot] for Bulk-Only Transfer
    
    IDLE Stage  ->  CBW     -> CBW Proc -> DATA OUT Stage -> CSW Proc -> CSW Stage -> IDLE
    IDLE Stage  ->  CBW     -> CBW Proc -> DATA IN Stage  -> CSW Proc -> CSW Stage -> IDLE
    STALL Stage ->  IDLE

*********************************************************************************************************/

#define __USBFSM4BOT_IDLE             0x01
#define __USBFSM4BOT_CBWPROC          0x02
#define __USBFSM4BOT_DATAIN           0x04
#define __USBFSM4BOT_DATAOUT          0x08
#define __USBFSM4BOT_CSWPROC          0x10
#define __USBFSM4BOT_CSW              0x20
#define __USBFSM4BOT_STALL            0x80

#define     __GcbitBOTFsmState      __tpbulkPara[__GbCurLun].__GcbitBOTFsmState
#define 	__GcBOTFsmState		    __GcbitBOTFsmState.char_ 
#define 	__GbitBOTFsmIdle 	    __GcbitBOTFsmState.bit_.b0
#define     __GbitBOTFsmCBWProc     __GcbitBOTFsmState.bit_.b1
#define     __GbitBOTFsmDataIn 	    __GcbitBOTFsmState.bit_.b2
#define     __GbitBOTFsmDataOut     __GcbitBOTFsmState.bit_.b3
#define     __GbitBOTFsmCSWProc     __GcbitBOTFsmState.bit_.b4
#define     __GbitBOTFsmCSW 		__GcbitBOTFsmState.bit_.b5
#define     __GbitBOTFsmStall 	    __GcbitBOTFsmState.bit_.b7

/*********************************************************************************************************
  传输数据的存储类型   
*********************************************************************************************************/

#define     __BOTXFERSPACE_MASK         0x0F
#define   	__BOTXferAtRAM 		        0x10
#define   	__BOTXferAtATA 		        0x20
#define    	__BOTXferAtROM 		        0x40

#define     __GcbitBOTXferSpace     __tpbulkPara[__GbCurLun].__GcbitBOTXferSpace
#define     __GcBOTXferSpace        __GcbitBOTXferSpace.char_ 		
#define   	__GbitBOTXferatRAM      __GcbitBOTXferSpace.bit_.b4         /*  传输数据在RAM里             */
#define   	__GbitBOTXferatATA      __GcbitBOTXferSpace.bit_.b5         /*  传输数据在存储器            */
#define    	__GbitBOTXferatROM 	    __GcbitBOTXferSpace.bit_.b6         /*  传输数据在ROM里             */


/*********************************************************************************************************
  批量传输参数
*********************************************************************************************************/

#define __GdwBOTXferResidue __tpbulkPara[__GbCurLun].__GdwBOTXferResidue/*  批量传输数据剩余字节数      */
#define __GpucBOTXferData   __tpbulkPara[__GbCurLun].__GpucBOTXferData  /*  批量传输的数据指针          */


/*
 *  Host Device Disagreement Matrix
 */

enum __HOST_DEV_DISAGREE {
__CASEOK = 0,
__CASE1,
__CASE2,
__CASE3,
__CASE4,
__CASE5,
__CASE6,
__CASE7,
__CASE8,
__CASE9,
__CASE10,
__CASE11,
__CASE12,
__CASE13,
__CASECBW,
__CASECMDFAIL
};

/*********************************************************************************************************
  C[ommand]D[ata]S[tatus] architecture for mass storage device over Bulk
  only Transport
*********************************************************************************************************/

/*********************************************************************************************************
** Function name:           __tpbulkGetMaxLUN
**
** Descriptions:            设备支持的最大逻辑单元数目
**

⌨️ 快捷键说明

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