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

📄 hal.h

📁 USB驱动程序,和NANDflash的驱动, 包括文件系统,cpu是arm
💻 H
📖 第 1 页 / 共 2 页
字号:
#define INT8    unsigned char
#define INT16   unsigned short
#define INT32   unsigned int
#define WordSwap(input)	(((input&0x00FF)<<8)|((input&0xFF00)>>8))
#define DWordSwap(input) ((input&0xFF)<<24|(input&0xFF00)<<8|(input&0xFF0000)>>8|(input&0xFF000000)>>24)
typedef struct
{
	unsigned p0:1;
	unsigned p1:1;
	unsigned p2:1;
}PORTDATA;
void SL811ReSet(void);
int SL811Read(int a);
void SL811Write(int a, int d);
void SL811_Init(void);
#define SL811_ADDR_PORT		0x08000000
#define SL811_DATA_PORT		0x08000004

#define EP0Control      0x00
#define EP0Address      0x01
#define EP0XferLen      0x02
#define EP0Status       0x03
#define EP0Counter      0x04
//0x07寄存器保留
#define EP1Control      0x08
#define EP1Address      0x09
#define EP1XferLen      0x0a
#define EP1Status       0x0b
#define EP1Counter      0x0c

#define CtrlReg         0x05
#define IntEna          0x06
                               
#define IntStatus       0x0d
#define cDATASet        0x0e
#define cSOFcnt         0x0f   

#define USB_A_DONE		0x01
#define USB_B_DONE		0x02
#define BABBLE_DETECT		0x04
#define INT_RESERVE		0x08
#define SOF_TIMER		0x10
#define INSERT_REMOVE		0x20
#define USB_RESET		0x40
#define USB_DPLUS		0x80
#define INT_CLEAR		0xFF

#define MAX_EP    	0x05     // maximum number of endpoints (Ep0 + max of 4 data endpoints)
#define DEVICE          0x01
#define CONFIGURATION   0x02
#define STRING          0x03
#define INTERFACE       0x04
#define ENDPOINT        0x05

#define GET_STATUS      0x00																  
#define CLEAR_FEATURE   0x01
#define SET_FEATURE     0x03
#define SET_ADDRESS     0x05
#define GET_DESCRIPTOR  0x06
#define SET_DESCRIPTOR  0x07
#define GET_CONFIG      0x08
#define SET_CONFIG      0x09
#define GET_INTERFACE   0x0a
#define SET_INTERFACE   0x0b
#define SYNCH_FRAME     0x0c

#define DATA0_WR    0x07   // 0000 0111 (      Data0 +       OUT + Enable + Arm)
#define sDATA0_WR   0x27   // 0010 0111 (      Data0 + SOF + OUT + Enable + Arm)
//#define pDATA0_WR   0x87   // 1000 0111 (Pre + Data0 +       OUT + Enable + Arm)
//#define psDATA0_WR  0xA7   // 1010 0111 (Pre + Data0 + SOF + OUT + Enable + Arm)

#define DATA0_RD    0x03   // 0000 0011 (      Data0 +       IN +  Enable + Arm)
#define sDATA0_RD   0x23   // 0010 0011 (      Data0 + SOF + IN +  Enable + Arm)
//#define pDATA0_RD   0x83   // 1000 0011 (Pre + Data0 +       IN +  Enable + Arm)
//#define psDATA0_RD  0xA3   // 1010 0011 (Pre + Data0 + SOF + IN +  Enable + Arm)

#define PID_SETUP   0xD0 
#define PID_IN      0x90
#define PID_OUT     0x10

#define EP0_Buf		    0x10	// define start of EP0 64-byte buffer
#define EP1_Buf		    0x40	// define start of EP1 64-byte buffer

#define EP0_ACK			0x01	// EPxStatus bits mask during a read
#define EP0_ERROR		0x02
#define EP0_TIMEOUT		0x04
#define EP0_SEQUENCE	0x08
#define EP0_SETUP		0x10
#define EP0_OVERFLOW	0x20
#define EP0_NAK			0x40
#define EP0_STALL		0x80

#define TIMEOUT_RETRY		0x06	// Maximum no. of timeout retry during USB xfer


/*
// SPC-2 commands
*/
#define SPC_CMD_INQUIRY					0x12
#define SPC_CMD_MODESELECT6				0x15
#define SPC_CMD_MODESENSE6				0x1A
#define SPC_CMD_PERSISTANTRESERVIN			0x5E
#define SPC_CMD_PERSISTANTRESERVOUT			0x5F
#define SPC_CMD_PRVENTALLOWMEDIUMREMOVAL		0x1E
#define SPC_CMD_RELEASE6				0x17
#define SPC_CMD_REQUESTSENSE				0x03
#define SPC_CMD_RESERVE6				0x16
#define SPC_CMD_TESTUNITREADY				0x00
#define SPC_CMD_WRITEBUFFER				0x3B
#define SPC_CMD_READLONG				0x23

typedef union _XXG_FLAGS
{
	struct _FLAGS
	{
		unsigned SLAVE_IS_ATTACHED	:1;
		unsigned SLAVE_REMOVED		:1;
		unsigned SLAVE_FOUND		:1;	// Slave USB device found
		unsigned SLAVE_ENUMERATED	:1;	// slave USB device enumeration done
		unsigned SLAVE_ONLINE		:1;
		unsigned TIMEOUT_ERR		:1;				// timeout error during data endpoint transfer
		unsigned DATA_STOP		:1;					// device unplugged during data transfer
		unsigned bData1			:1;
		unsigned bUartInDone		:1;
		unsigned bMassDevice		:1;
	} bits;
	//unsigned short nValue;
} XXGFLAGS;
#define WORD unsigned short
#define BYTE unsigned char
typedef struct
{
    WORD  wVID, wPID;       // Vendor ID and Product ID
    BYTE  bClass;           // 
    BYTE  bNumOfEPs;        // actual number endpoint from slave
    BYTE  iMfg;				// Manufacturer ID
    BYTE  iPdt;				// Product ID
    BYTE  bId1;
    BYTE  bId2;
    BYTE  bEPAddr[MAX_EP];   // bit 7 = 1 = use PID_IN, 
    BYTE  bAttr[MAX_EP];     // ISO | Bulk | Interrupt | Control
    WORD  wPayLoad[MAX_EP];  // ISO range: 1-1023, Bulk: 1-64, etc
    WORD  bInterval[MAX_EP]; // polling interval (for LS)
    BYTE  bData1[MAX_EP];    // DataToggle value
} pUSBDEV, *PUSBDEV;

// USB specific request
typedef struct
{
    BYTE bmRequest;
    BYTE bRequest;
    WORD wValue;
    WORD wIndex;
    WORD wLength;
} SetupPKG, *pSetupPKG;

typedef struct
{
    unsigned char usbaddr;
    unsigned char endpoint;
    unsigned char pid;
    unsigned char wPayload;
    unsigned int wLen;
    unsigned char *buffer;	
    SetupPKG setup;
    unsigned char epbulkin;
    unsigned char epbulkout;
 
} XXGPKG, *pXXGPKG;
// Standard Device Descriptor
typedef struct
{   BYTE bLength;
    BYTE bDescriptorType;
    WORD bcdUSB;
    BYTE bDeviceClass;
    BYTE bDeviceSubClass;
    BYTE bDeviceProtocol;
    BYTE bMaxPacketSize0;
    WORD idVendor;
    WORD idProduct;
    WORD bcdDevice;
    BYTE iManufacturer;
    BYTE iProduct;
    BYTE iSerialNumber;
    BYTE bNumConfigurations;
} sDevDesc, *pDevDesc;

// Standard Configuration Descriptor
typedef struct
{	
    BYTE bLength;                 // Size of descriptor in Byte
	BYTE bType;					 // Configuration
	WORD wLength;                // Total length
	BYTE bNumIntf;				 // Number of interface
	BYTE bCV;             		 // bConfigurationValue
	BYTE bIndex;          		 // iConfiguration
	BYTE bAttr;                  // Configuration Characteristic
	BYTE bMaxPower;				 // Power config
} sCfgDesc, *pCfgDesc;

// Standard Interface Descriptor
typedef struct
{	BYTE bLength;
	BYTE bType;
	BYTE iNum;
	BYTE iAltString;
	BYTE bEndPoints;
	BYTE iClass;
	BYTE iSub; 
	BYTE iProto;
	BYTE iIndex; 
} sIntfDesc, *pIntfDesc;

// Standard EndPoint Descriptor
typedef struct
{	BYTE bLength;
	BYTE bType;
	BYTE bEPAdd;
	BYTE bAttr;
	WORD wPayLoad;               // low-speed this must be 0x08
	BYTE bInterval;
} sEPDesc, *pEPDesc;


#define NULL		0
#define TRUE   		1
#define FALSE  		0

#define UARTBUF_LENGTH  16384
#define BUFFER_LENGTH	8192
#define MAX_READ_LENGTH 16384
#define MAX_WRITE_LENGTH 2048

typedef union {
    struct 
    {
        unsigned char    Type;
        unsigned char    Index;
    } Descriptor;

    struct 
    {
        unsigned char tx0;  // MSB for 8051 Keil C
        unsigned char tx1;   
        unsigned char endp;   
        unsigned char c0;   // LSB for 8051 Keil C
    } chars;

    struct 
    {
        unsigned char c3;  // MSB for 8051 Keil C
        unsigned char c2;   
        unsigned char c1;   
        unsigned char c0;   // LSB for 8051 Keil C
    } chars0;

    struct
    {
        unsigned short i1;    // MSW for 8051 keil C
        unsigned short i0;    // LSW for 8051 Keil C
    } ints;

    unsigned int u0;

} FLEXI_INT32;

typedef union  {
    struct 
    {
        unsigned char c1;   // MSB for 8051 Keil C
        unsigned char c0;   // LSB for 8051 Keil C
    } chars;

    unsigned short i0;
} FLEXI_INT16, * PFLEXI_INT16;



/* RBC commands */
#define RBC_CMD_FORMAT					0x04
#define RBC_CMD_READ10					0x28
#define RBC_CMD_READCAPACITY				0x25
#define RBC_CMD_STARTSTOPUNIT				0x1B
#define RBC_CMD_SYNCCACHE				0x35
#define RBC_CMD_VERIFY10				0x2F
#define RBC_CMD_WRITE10					0x2A

/*
// SPC-2 commands
*/
#define SPC_CMD_INQUIRY					0x12
#define SPC_CMD_MODESELECT6				0x15
#define SPC_CMD_MODESENSE6				0x1A
#define SPC_CMD_PERSISTANTRESERVIN			0x5E
#define SPC_CMD_PERSISTANTRESERVOUT			0x5F
#define SPC_CMD_PRVENTALLOWMEDIUMREMOVAL		0x1E
#define SPC_CMD_RELEASE6				0x17
#define SPC_CMD_REQUESTSENSE				0x03
#define SPC_CMD_RESERVE6				0x16
#define SPC_CMD_TESTUNITREADY				0x00
#define SPC_CMD_WRITEBUFFER				0x3B
#define SPC_CMD_READLONG				0x23
/*
// ATAPI Command Descriptor Block
*/

typedef struct _READ_10 {
		unsigned char OperationCode;
		unsigned char Reserved1;
		unsigned char LBA_3;
		unsigned char LBA_2;
        	unsigned char LBA_1;
		unsigned char LBA_0;
		unsigned char Reserved2;
		unsigned char XferLen_1;
		unsigned char XferLen_0;
		unsigned char Reserved3[3];
} READ_10, * PREAD_10;
typedef struct _WRITE_10 {
		unsigned char OperationCode;
		unsigned char Reserved1;
		unsigned char LBA_3;
		unsigned char LBA_2;
        	unsigned char LBA_1;
		unsigned char LBA_0;
		unsigned char Reserved2;
		unsigned char XferLen_1;
		unsigned char XferLen_0;
		unsigned char Reserved3[3];
} WRITE_10, *PWRITE_10;

typedef struct _MODE_SENSE_10 {
		unsigned char OperationCode;
		unsigned char Reserved1;
		unsigned  PageCode : 6;
		unsigned  Pc : 2;
		unsigned char Reserved2[4];
		unsigned char ParameterListLengthMsb;
		unsigned char ParameterListLengthLsb;
		unsigned char Reserved3[3];
} MODE_SENSE_10, *PMODE_SENSE_10;

typedef struct _MODE_SELECT_10 {
		unsigned char OperationCode;
		unsigned  Reserved1 : 4;
		unsigned  PFBit : 1;
		unsigned  Reserved2 : 3;
		unsigned char Reserved3[5];
		unsigned char ParameterListLengthMsb;
		unsigned char ParameterListLengthLsb;
		unsigned char Reserved4[3];
} MODE_SELECT_10, *PMODE_SELECT_10;

typedef struct _GENERIC_CDB {
	unsigned char OperationCode;
    	unsigned char Reserved[15];
} GENERIC_CDB,*PGENERIC_CDB;

typedef struct _GENERIC_RBC {
		unsigned char OperationCode;
    		unsigned char Reserved[8];
		unsigned char Control;
} GENERIC_RBC,*PGENERIC_RBC;
typedef struct _FORMAT_RBC {
	 	unsigned char OperationCode;	/* 04H */
	 	unsigned char VendorSpecific;
		unsigned  Increment : 1;
		unsigned  PercentorTime : 1;
		unsigned  Progress : 1;
    		unsigned  Immediate : 1;
		unsigned  VendorSpecific1 : 4;
		unsigned char Reserved2[2];
		unsigned char Control;
} FORMAT_RBC, *PFORMAT_RBC;

/* Read Command */
typedef struct _READ_RBC {
	unsigned char OperationCode;	/* 10H */
	unsigned char VendorSpecific;
    	union{
        	struct
        	{
	        unsigned char LBA_3;
	        unsigned char LBA_2;
	        unsigned char LBA_1;
	        unsigned char LBA_0;
        	} LBA_W8 ;

       		unsigned int LBA_W32;
    	      }LBA;
	unsigned char Reserved;
	unsigned short XferLength;
    	unsigned char Control;
    	//INT8 Reserved1[3];
} READ_RBC, *PREAD_RBC;

/* Read Capacity Data - returned in Big Endian format*/
typedef struct _READ_CAPACITY_DATA {
    unsigned char LBA_3;
    unsigned char LBA_2;
    unsigned char LBA_1;
    unsigned char LBA_0;

    unsigned char BlockLen_3;
    unsigned char BlockLen_2;
    unsigned char BlockLen_1;
    unsigned char BlockLen_0;
} READ_CAPACITY_DATA, *PREAD_CAPACITY_DATA;

typedef struct _READ_LONG_CMD{
    unsigned char OperationCode;
    unsigned LogicalUnitNum	:3;
    unsigned RES_1		:5;
    unsigned char RES_2;
    unsigned char RES_3;
    unsigned char RES_4;
    unsigned char RES_5;
    unsigned char RES_6;
    unsigned short AllocationLen;
    unsigned char RES_7;
    unsigned char RES_8;
    unsigned char RES_9;
}READ_LONG_CMD, *PREAD_LONG_CMD;
typedef struct _READ_LONG {

    unsigned char RES_1;
    unsigned char RES_2;
    unsigned char RES_3;
    unsigned char CAP_LIST_LEN;
    
    unsigned char LBA_3;
    unsigned char LBA_2;
    unsigned char LBA_1;
    unsigned char LBA_0;

    unsigned char Descripter;
    unsigned char BlockLen_2;
    unsigned char BlockLen_1;
    unsigned char BlockLen_0;
} READ_LONG, *PREAD_LONG;

/* Read Capacity command */
typedef struct _READ_CAPACITY_RBC {
	unsigned char  OperationCode;	/* 10H */
   	union  {
		FLEXI_INT32		l0[2];
        	unsigned int               l[2];
        	READ_CAPACITY_DATA  CapData;       /* Reserved area, here is used as temp*/
    		} tmpVar;
	unsigned char      Control;
} READ_CAPACITY_RBC, *PREAD_CAPACITY_RBC;

typedef struct _READ_CAPACITY_RSP {
	unsigned int LastLBA;
	unsigned int BlockSize;
} READ_CAPACITY_RSP, *PREAD_CAPACITY_RSP;

/*
// START_STOP_UNIT
*/
typedef struct _START_STOP_RBC {
    unsigned char OperationCode;    /*1BH*/
    unsigned Immediate: 1;
    unsigned Reserved1 : 7;
    unsigned char Reserved2[2];
	union _START_STOP_FLAGS
    {
        struct
        {
            unsigned Start          : 1;
            unsigned LoadEject      : 1;
            unsigned Reserved3      : 2;
            unsigned PowerConditions: 4;
        } bits0;

        struct
        {
            unsigned MediumState    : 2;
            unsigned Reserved3      : 2;
            unsigned PowerConditions: 4;
        } bits1;
    } Flags;
    unsigned char Control;
} START_STOP_RBC, *PSTART_STOP_RBC;

/*
// Synchronize Cache
*/
typedef struct _SYNCHRONIZE_CACHE_RBC {
	unsigned char OperationCode;    /* 0x35 */
	unsigned char Reserved[8];
	unsigned char Control;
} SYNCHRONIZE_CACHE_RBC, *PSYNCHRONIZE_CACHE_RBC;

/* Write Command */
typedef struct _WRITE_RBC {

⌨️ 快捷键说明

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