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

📄 usb20.h

📁 瑞芯微RK2608固件源代码
💻 H
📖 第 1 页 / 共 3 页
字号:
#define 		TEST_J						(0x02 << 8)
#define 		TEST_NAK					(0x01 << 8)


//mainloop.h
#define 		MAX_ENDPOINTS      			(uint8)0x3
#define 		EP0_TX_FIFO_SIZE   			64
#define 		EP0_RX_FIFO_SIZE   			64
#define 		EP0_PACKET_SIZE    			64

#define 		FS_BULK_RX_SIZE    			64
#define 		FS_BULK_TX_SIZE    			64
#define 		HS_BULK_RX_SIZE    			512
#define 		HS_BULK_TX_SIZE    			512


#define 		USB_IDLE           				0
#define 		USB_TRANSMIT       			1
#define 		USB_RECEIVE        			2

#define 		USB_CLASS_CODE_TEST_CLASS_DEVICE		0xdc
#define 		USB_SUBCLASS_CODE_TEST_CLASS_D12		0xa0
#define 		USB_PROTOCOL_CODE_TEST_CLASS_D12		0xb0


#define 		USB_RECIPIENT            		(uint8)0x1F
#define 		USB_RECIPIENT_DEVICE     	(uint8)0x00
#define 		USB_RECIPIENT_INTERFACE  	(uint8)0x01
#define 		USB_RECIPIENT_ENDPOINT   	(uint8)0x02

#define 		USB_REQUEST_TYPE_MASK    	(uint8)0x60
#define 		USB_STANDARD_REQUEST     	(uint8)0x00
#define 		USB_CLASS_REQUEST        	(uint8)0x20
#define 		USB_VENDOR_REQUEST       	(uint8)0x40

#define 		USB_REQUEST_MASK         	(uint8)0x0F
#define 		DEVICE_ADDRESS_MASK      	0x7F

#define 		IN_TOKEN_DMA 				1
#define 		OUT_TOKEN_DMA 			0

#define 		DMA_BUFFER_SIZE			256

#define 		DMA_IDLE					0
#define 		DMA_RUNNING				1
#define 		DMA_PENDING				2

//厂商请求代码
#define 		SETUP_DMA_REQUEST 		0x0471
#define 		GET_FIRMWARE_VERSION    	0x0472
#define 		GET_SET_TWAIN_REQUEST   	0x0473
#define 		GET_BUFFER_SIZE		    	0x0474


//usb100.h
#define 		MAXIMUM_USB_STRING_LENGTH 				255

// values for the bits returned by the USB GET_STATUS command
#define 		USB_GETSTATUS_SELF_POWERED                	0x01
#define 		USB_GETSTATUS_REMOTE_WAKEUP_ENABLED	0x02


#define 		USB_DEVICE_DESCRIPTOR_TYPE                		0x01
#define 		USB_CONFIGURATION_DESCRIPTOR_TYPE         	0x02
#define 		USB_STRING_DESCRIPTOR_TYPE                		0x03
#define 		USB_INTERFACE_DESCRIPTOR_TYPE             	0x04
#define 		USB_ENDPOINT_DESCRIPTOR_TYPE              	0x05
#define 		USB_DEVICE_QUALIFIER_DESCRIPTOR_TYPE 	0x06
#define 		USB_OTHER_SPEED_CONF_DESCRIPTOR_TYPE 	0x07
#define 		USB_INTERFACE_POWER_DESCRIPTOR_TYPE 	0x08
#define 		USB_OTG_DESCRIPTOR_TYPE 					0x09
#define 		USB_DEBUG_DESCRIPTOR_TYPE 				0x0A
#define 		USB_IF_ASSOCIATION_DESCRIPTOR_TYPE 		0x0B

#define 		USB_DESCRIPTOR_MAKE_TYPE_AND_INDEX(d, i) ((uint16)((uint16)d<<8 | i))

// Values for bmAttributes field of an
// endpoint descriptor

#define 		USB_ENDPOINT_TYPE_MASK                    		0x03
#define 		USB_ENDPOINT_TYPE_CONTROL                 		0x00
#define 		USB_ENDPOINT_TYPE_ISOCHRONOUS             	0x01
#define 		USB_ENDPOINT_TYPE_BULK                    		0x02
#define 		USB_ENDPOINT_TYPE_INTERRUPT               		0x03


// definitions for bits in the bmAttributes field of a 
// configuration descriptor.
#define 		USB_CONFIG_POWERED_MASK                   		0xc0
#define 		USB_CONFIG_BUS_POWERED                    		0x80
#define 		USB_CONFIG_SELF_POWERED                   		0x40
#define 		USB_CONFIG_REMOTE_WAKEUP                  		0x20

// Endpoint direction bit, stored in address
#define 		USB_ENDPOINT_DIRECTION_MASK               	0x80

// test direction bit in the bEndpointAddress field of
// an endpoint descriptor.
#define 		USB_ENDPOINT_DIRECTION_OUT(addr)          	(!((addr) & USB_ENDPOINT_DIRECTION_MASK))
#define 		USB_ENDPOINT_DIRECTION_IN(addr)           	((addr) & USB_ENDPOINT_DIRECTION_MASK)

// USB defined request codes
#define 		USB_REQUEST_GET_STATUS                    		0x00
#define 		USB_REQUEST_CLEAR_FEATURE                 		0x01
#define 		USB_REQUEST_SET_FEATURE                   		0x03
#define 		USB_REQUEST_SET_ADDRESS                   		0x05
#define 		USB_REQUEST_GET_DESCRIPTOR                		0x06
#define 		USB_REQUEST_SET_DESCRIPTOR                		0x07
#define 		USB_REQUEST_GET_CONFIGURATION             	0x08
#define 		USB_REQUEST_SET_CONFIGURATION             	0x09
#define 		USB_REQUEST_GET_INTERFACE                 		0x0A
#define 		USB_REQUEST_SET_INTERFACE                 		0x0B
#define 		USB_REQUEST_SYNC_FRAME                    		0x0C


// defined USB device classes
#define 		USB_DEVICE_CLASS_RESERVED           			0x00
#define 		USB_DEVICE_CLASS_AUDIO              			0x01	//音频设备
#define 		USB_DEVICE_CLASS_COMMUNICATIONS     		0x02	//通讯设备
#define 		USB_DEVICE_CLASS_HUMAN_INTERFACE    		0x03	//人机接口
#define 		USB_DEVICE_CLASS_MONITOR            			0x04	//显示器
#define 		USB_DEVICE_CLASS_PHYSICAL_INTERFACE 	0x05	//物理接口
#define 		USB_DEVICE_CLASS_POWER              			0x06	//电源
#define 		USB_DEVICE_CLASS_PRINTER            			0x07	//打印机
#define 		USB_DEVICE_CLASS_STORAGE            			0x08	//海量存储
#define 		USB_DEVICE_CLASS_HUB                			0x09	//HUB
#define 		USB_DEVICE_CLASS_VENDOR_SPECIFIC    		0xFF	//

//define	USB subclass
#define		USB_SUBCLASS_CODE_RBC					0x01
#define		USB_SUBCLASS_CODE_SFF8020I				0x02
#define		USB_SUBCLASS_CODE_QIC157					0x03
#define		USB_SUBCLASS_CODE_UFI					0x04
#define		USB_SUBCLASS_CODE_SFF8070I				0x05
#define		USB_SUBCLASS_CODE_SCSI					0x06

//define	USB protocol
#define		USB_PROTOCOL_CODE_CBI0					0x00
#define		USB_PROTOCOL_CODE_CBI1					0x01
#define		USB_PROTOCOL_CODE_BULK					0x50


// USB defined Feature selectors
#define 		USB_FEATURE_ENDPOINT_STALL          		0x0000
#define 		USB_FEATURE_REMOTE_WAKEUP           		0x0001
#define 		USB_FEATURE_POWER_D0                			0x0002
#define 		USB_FEATURE_POWER_D1                			0x0003
#define 		USB_FEATURE_POWER_D2                			0x0004
#define 		USB_FEATURE_POWER_D3                			0x0005

//values for bmAttributes Field in USB_CONFIGURATION_DESCRIPTOR
#define 		BUS_POWERED                           				0x80
#define 		SELF_POWERED                          				0x40
#define 		REMOTE_WAKEUP                         				0x20

// USB power descriptor added to core specification
#define 		USB_SUPPORT_D0_COMMAND      				0x01
#define 		USB_SUPPORT_D1_COMMAND      				0x02
#define 		USB_SUPPORT_D2_COMMAND      				0x04
#define 		USB_SUPPORT_D3_COMMAND      				0x08
#define 		USB_SUPPORT_D1_WAKEUP       				0x10
#define 		USB_SUPPORT_D2_WAKEUP       				0x20



//1全局变量
#undef	EXT
#ifdef	IN_USB_ISR
		#define	EXT
#else
		#define	EXT		extern
#endif		
		
#ifdef USB
EXT		CONTROL_XFER 	ControlData		DRAM_USB;
EXT		EPPFLAGS 		bEPPflags			DRAM_USB;
EXT		uint8 			Ep2Status		DRAM_USB;
EXT		uint16 			BulkEndpSize		DRAM_USB;
EXT		uint8 			EpBuf[64]		DRAM_USB;
EXT		bool 	volatile	UsbConnected		DRAM_USB;
EXT		bool 	volatile	UsbHsEn			DRAM_USB;
EXT		uint8 	volatile	UsbResetCnt		DRAM_USB;
#endif



//1函数原型声明
//mainloop.c

//usbCtrl.c
extern	void 	USBIdle(void);
extern	void 	USBInit(void);
extern	void 	stall_ep0(void);
extern	void 	disconnect_USB(void);
extern	void 	connect_USB(void);
extern	void 	reconnect_USB(void);
extern	void 	init_unconfig(void);
extern	void 	init_config(void);
extern	void 	single_transmit(uint8 * buf, uint8 len);
extern	void 	code_transmit(uint8 * pRomData, uint16 len);
extern	void 	control_handler(void);

//chap_9.c
extern	void 	get_status(void);
extern	void 	clear_feature(void);
extern	void 	set_feature(void);
extern	void 	set_address(void);
extern	void 	get_descriptor(void);
extern	void 	get_configuration(void);
extern	void 	set_configuration(void);
extern	void 	get_interface(void);
extern	void 	set_interface(void);
extern	void 	reserved(void);
extern	void 	wait_ep0tx(void);
extern	void 	ep0in_ack(void);

//d12ci.c
extern	void 	MUSBHSFC_InitSFR(void);
extern	void 	MUSBHSFC_InitEndp(void);

extern	void 	MUSBHSFC_SetAddressEnable(uint8 bAddress);
extern	void 	MUSBHSFC_SetEndpointEnable(uint8 bEnable);
extern	uint8	MUSBHSFC_SelectEndpoint(uint8 bEndp);
extern	void 	MUSBHSFC_SetEndpointStatus(uint8 bEndp, uint8 bStalled);
extern	uint16 	MUSBHSFC_ReadEndpoint(uint8 endp, uint16 len, uint8 * buf);
extern	uint16 	MUSBHSFC_WriteEndpoint(uint8 endp, uint16 len, uint8 * buf);

//isr.c
extern	void 	usb_isr(void);
extern 	void 	bus_reset(void);
extern 	void 	setup(void);
extern 	void 	ep0_txdone(void);
extern 	void 	ep0_rxdone(void);
extern 	void 	main_txdone(void);
extern 	void 	main_rxdone(void);

//protodma.c
extern 	void 	get_firmware_version(void);
extern 	void 	get_buffer_size(void);
extern 	void 	read_write_register(void);

//epphal.c


//1表格定义
#ifdef USB
#ifdef	IN_USB_ISR
//设备描述符
USB_DEVICE_DESCRIPTOR DeviceDescr DRAM_USB_TABLE=
{
	sizeof(USB_DEVICE_DESCRIPTOR),				//描述符的大小18(1B)
	USB_DEVICE_DESCRIPTOR_TYPE,				//描述符的类型01(1B)
#ifdef __C51__	
	SWAP(0x0110),								//USB规划分布号(2B)
#endif
#ifdef __ZSP__
	LSB(0x0110),MSB(0x0110),						//USB规划分布号(2B)
#endif
	0,//	USB_CLASS_CODE_TEST_CLASS_DEVICE,					//1类型代码(由USB指定)(1B),0x00
	0, 0,											//子类型和协议(由USB分配)(2B)
	EP0_PACKET_SIZE,							//端点0最大包长(1B)
#ifdef __C51__
	SWAP(0x071b),
	SWAP(0x3203),
	SWAP(0x0100),								// 设备系列号

//	SWAP(0x0693),
//	SWAP(0x0003),
//	SWAP(0x0100),               						// 设备系列号

//	SWAP(0x0471),								//供应商ID(由USB分配)(2B)
//	SWAP(0x0666),								//产品ID(由厂商分配)(2B)
//	SWAP(0x0100),								//设备出厂编号(2B)
#endif
#ifdef __ZSP__
	LSB(0x071b),MSB(0x071b),
	LSB(0x3203),MSB(0x3203),
	LSB(0x0100),MSB(0x0100),
#endif
	iManufactuer, iProduct, iSerialNumber,				//厂商,产品,设备序列号字符串索引(3B)
	1											//可能的配置数(1B)
};

//配置描述符
USB_CONFIGURATION_DESCRIPTOR ConfigDescr DRAM_USB_TABLE=
{
	sizeof(USB_CONFIGURATION_DESCRIPTOR),		//描述符的大小9(1B)
	USB_CONFIGURATION_DESCRIPTOR_TYPE,		//描述符的类型02(1B)
#ifdef __C51__	
	SWAP(CONFIG_DESCRIPTOR_LENGTH),			//返回整个数据的长度(配置,接口,端点和类型或供应商)(2B)
#endif
#ifdef __ZSP__
	LSB(CONFIG_DESCRIPTOR_LENGTH),MSB(CONFIG_DESCRIPTOR_LENGTH),
#endif
	1,											//配置所支持的接口数(1B)
	1,											//作为Set configuration的一个参数选择配置值(1B)
	iConfiguration,								//用于描述配置字符串的索引(1B)
	0x80,										//位图,总线供电&远程唤醒(1B)
	200											//最大消耗电流*2mA(1B)
};

//接口描述符
USB_INTERFACE_DESCRIPTOR InterfaceDescr DRAM_USB_TABLE=
{
	sizeof(USB_INTERFACE_DESCRIPTOR),			//描述符的大小9(1B)
	USB_INTERFACE_DESCRIPTOR_TYPE,				//描述符的类型04(1B)
	0,											//接口的编号(1B)
	0,											//用于为上一个字段可供替换的设置(1B)
	NUM_ENDPOINTS,								//使用的端点数(端点0除外)(1B)
	USB_DEVICE_CLASS_STORAGE,					//1类型代码(由USB分配)(1B),USB_DEVICE_CLASS_STORAGE=Mass Storage
	USB_SUBCLASS_CODE_SCSI,					//1子类型代码(由USB分配)(1B),"0x06=Reduced Block Commands(RBC)"
	USB_PROTOCOL_CODE_BULK,					//1协议代码(由USB分配)(1B),"0X50=Mass Storage Class Bulk-Only Transport"
	iInterface										//字符串描述的索引(1B)
};


USB_ENDPOINT_DESCRIPTOR MainEP_TXDescr DRAM_USB_TABLE=
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),
	USB_ENDPOINT_DESCRIPTOR_TYPE,
	0x81,
	USB_ENDPOINT_TYPE_BULK,
#ifdef __C51__	
	SWAP(FS_BULK_RX_SIZE),
#endif
#ifdef __ZSP__
	LSB(FS_BULK_RX_SIZE),MSB(FS_BULK_RX_SIZE),
#endif
	0		//bulk trans invailed
};

USB_ENDPOINT_DESCRIPTOR MainEP_RXDescr DRAM_USB_TABLE=
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),
	USB_ENDPOINT_DESCRIPTOR_TYPE,
	0x01,
	USB_ENDPOINT_TYPE_BULK,
#ifdef __C51__	
	SWAP(FS_BULK_RX_SIZE),
#endif
#ifdef __ZSP__
	LSB(FS_BULK_RX_SIZE),MSB(FS_BULK_RX_SIZE),
#endif
	0		//bulk trans invailed
};

#ifdef OT2
//配置描述符集合
uint8 FSConfigDescrs[] DRAM_USB_TABLE=
{
	sizeof(USB_CONFIGURATION_DESCRIPTOR),		//描述符的大小9(1B)
	USB_CONFIGURATION_DESCRIPTOR_TYPE,		//描述符的类型02(1B)
	LSB(CONFIG_DESCRIPTOR_LENGTH),MSB(CONFIG_DESCRIPTOR_LENGTH),
	1,											//配置所支持的接口数(1B)
	1,											//作为Set configuration的一个参数选择配置值(1B)
	iConfiguration,								//用于描述配置字符串的索引(1B)
	0x80,										//位图,总线供电&远程唤醒(1B)
	200,											//最大消耗电流*2mA(1B)

//接口描述符
	sizeof(USB_INTERFACE_DESCRIPTOR),			//描述符的大小9(1B)
	USB_INTERFACE_DESCRIPTOR_TYPE,				//描述符的类型04(1B)
	0,											//接口的编号(1B)
	0,											//用于为上一个字段可供替换的设置(1B)
	NUM_ENDPOINTS,								//使用的端点数(端点0除外)(1B)
	USB_DEVICE_CLASS_STORAGE,					//1类型代码(由USB分配)(1B),USB_DEVICE_CLASS_STORAGE=Mass Storage
#if (CD_ROM==1)
	USB_SUBCLASS_CODE_SFF8070I,				//1子类型代码(由USB分配)(1B),"0x05=SFF8070i"
#else
	USB_SUBCLASS_CODE_SCSI,					//1子类型代码(由USB分配)(1B),"0x06=Reduced Block Commands(RBC)"
#endif	
	USB_PROTOCOL_CODE_BULK,					//1协议代码(由USB分配)(1B),"0X50=Mass Storage Class Bulk-Only Transport"
	iInterface,										//字符串描述的索引(1B)

//端点描述符
	sizeof(USB_ENDPOINT_DESCRIPTOR),
	USB_ENDPOINT_DESCRIPTOR_TYPE,
	0x81,
	USB_ENDPOINT_TYPE_BULK,
	LSB(FS_BULK_RX_SIZE),MSB(FS_BULK_RX_SIZE),
	0,		//bulk trans invailed

//端点描述符
	sizeof(USB_ENDPOINT_DESCRIPTOR),
	USB_ENDPOINT_DESCRIPTOR_TYPE,
	0x01,
	USB_ENDPOINT_TYPE_BULK,
	LSB(FS_BULK_RX_SIZE),MSB(FS_BULK_RX_SIZE),
	0		//bulk trans invailed

⌨️ 快捷键说明

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