📄 usb.h
字号:
/********************************************************/
/* */
/* 库 名 称:USB接口函数库 */
/* 功 能 描 述:提供USB接口初始化,配置等操作。 */
/* */
/********************************************************/
#ifndef _TYPE_DEFINE
#define _TYPE_DEFINE
typedef bit BOOL;
typedef unsigned char BYTE;
typedef unsigned char CHAR;
typedef unsigned int WORD;
typedef unsigned long DWORD;
#endif
#ifndef _USB_DEFINE
#define _USB_DEFINE
//中断类型
#define USB_INT_SPINT 0x01
#define USB_INT_SOFINT 0x08
#define USB_INT_EORINT 0x10
#define USB_INT_WUPCPU 0x20
#define USB_INT_EP0 0x01
#define USB_INT_EP1 0x02
#define USB_INT_EP2 0x04
#define USB_INT_TXCMP 0x01
#define USB_INT_RXOUTB0 0x02
#define USB_INT_RXOUTB1 0x40
#define USB_INT_RXSETUP 0x04
#define USB_INT_STLCRC 0x08
#define USB_INT_NAKOUT 0x20
#define USB_INT_NAKIN 0x10
//EndPoint模式
#define USB_EPMOD_DISABLE 0x00
#define USB_EPMOD_COLTROL 0xC0
#define USB_EPMOD_BULK_IN 0xC6
#define USB_EPMOD_BULK_OUT 0xC2
#define USB_EPMOD_INTERRUPT_IN 0x87
#define USB_EPMOD_INTERRUPT_OUT 0x85
#define USB_EPMOD_ISOCHRONOUS_IN 0x83
#define USB_EPMOD_ISOCHRONOUS_OUT 0x81
//中断控制
#define USB_ENABLE_INT_USB SET_BIT_6(IEN1)
#define USB_DISABLE_INT_USB CLEAR_BIT_6(IEN1)
#define USB_ENABLE_INT_WUPCPU SET_BIT_5(USBIEN)
#define USB_DISABLE_INT_WUPCPU CLEAR_BIT_5(USBIEN)
#define USB_ENABLE_INT_EORINT SET_BIT_4(USBIEN)
#define USB_DISABLE_INT_EORINT CLEAR_BIT_4(USBIEN)
#define USB_ENABLE_INT_SOFINT SET_BIT_3(USBIEN)
#define USB_DISABLE_INT_SOFINT CLEAR_BIT_3(USBIEN)
#define USB_ENABLE_INT_SPINT SET_BIT_0(USBIEN)
#define USB_DISABLE_INT_SPINT CLEAR_BIT_0(USBIEN)
#define USB_ENABLE_INT_NAK SET_BIT_6(UEPCONX)
#define USB_DISABLE_INT_NAK CLEAR_BIT_6(UEPCONX)
#define USB_ENABLE_INT_EP0 SET_BIT_0(UEPIEN)
#define USB_DISABLE_INT_EP0 CLEAR_BIT_0(UEPIEN)
#define USB_ENABLE_INT_EP1 SET_BIT_1(UEPIEN)
#define USB_DISABLE_INT_EP1 CLEAR_BIT_1(UEPIEN)
#define USB_ENABLE_INT_EP2 SET_BIT_2(UEPIEN)
#define USB_DISABLE_INT_EP2 CLEAR_BIT_2(UEPIEN)
//Endpoint reset
#define USB_EP0_RESET SET_BIT_0(UEPRST);CLEAR_BIT_0(UEPRST)
#define USB_EP1_RESET SET_BIT_1(UEPRST);CLEAR_BIT_1(UEPRST)
#define USB_EP2_RESET SET_BIT_2(UEPRST);CLEAR_BIT_2(UEPRST)
#define USB_GET_STATUS 0x00
#define USB_CLEAR_FEATURE 0x01
#define USB_SET_FEATURE 0x03
#define USB_SET_ADDRESS 0x05
#define USB_GET_DESCRIPTOR 0x06
#define USB_SET_DESCRIPTOR 0x07
#define USB_GET_CONFIGURATION 0x08
#define USB_SET_CONFIGURATION 0x09
#define USB_GET_INTERFACE 0x0a
#define USB_SET_INTERFACE 0x0b
#define USB_SYNCH_FRAME 0x0c
#define USB_GET_DESC_DEVICE 0x01
#define USB_GET_DESC_CONFIGURATION 0x02
#define USB_GET_DESC_STRING 0x03
#define USB_GET_DESC_INTERFACE 0x04
#define USB_GET_DESC_ENDPOINT 0x05
//类代码
#define USB_CLASS_RESERVED 0x00
#define USB_CLASS_AUDIO 0x01
#define USB_CLASS_COMMUNICATIONS 0x02
#define USB_CLASS_HUMAN_INTERFACE 0x03
#define USB_CLASS_MONITOR 0x04
#define USB_CLASS_PHYSICAL_INTERFACE 0x05
#define USB_CLASS_POWER 0x06
#define USB_CLASS_PRINTER 0x07
#define USB_CLASS_STORAGE 0x08
#define USB_CLASS_HUB 0x09
#define USB_CLASS_VENDOR_SPECIFIC 0xFF
//子类代码
#define USB_SUBCLASS_RBC 0x01
#define USB_SUBCLASS_SFF8020I 0x02
#define USB_SUBCLASS_QIC157 0x03
#define USB_SUBCLASS_UFI 0x04
#define USB_SUBCLASS_SFF8070I 0x05
#define USB_SUBCLASS_SCSI 0x06
//协议代码
#define USB_PROTOCOL_CBI0 0x00
#define USB_PROTOCOL_CBI1 0x01
#define USB_PROTOCOL_BULK 0x50
#define USB_SEND_ZERO_PACKET SET_BIT_4(UEPSTAX);/*设置TXRDY*/while(!( UEPSTAX & 0x01 ));/*等待TXCM*/ CLEAR_BIT_0(UEPSTAX)/*清除TXCMP*/
#define USB_SEND_STALL_PACKET CLEAR_BIT_2(UEPSTAX);/*RXSETUP*/CLEAR_BIT_4(UEPSTAX);/*TXRDY*/CLEAR_BIT_0(UEPSTAX);/*TXCMPL*/CLEAR_BIT_1(UEPSTAX);/*RXOUTB0*/CLEAR_BIT_6(UEPSTAX);/*RXOUTB1*/SET_BIT_5(UEPSTAX)/*SET STALLRQ*/
code BYTE USBDeviceDescriptor[] = //设备描述符
{
0x12, //bLength 描述表大小 (18 bytes)
0x01, //bDescriptorType 设备描述表类型
0x10, 0x01, //bcdUSB 兼容设备版本号(BCD码)
0x00, //bDeviceClass 设备类码
0x00, //bDeviceSubClass 子类码
0x00, //bDeviceProtocol 协议码
0x20, //bMaxPacketSize0 端点0最大包大小(8,16,32,64)
0x00, 0x03, //idVendor 厂商ID
0x01, 0x00, //idProduct 产品ID
0x00, 0x01, //bcdDevice 设备发行号(BCD码)
0x00, //iManuFacturer 厂商信息字符串索引
0x00, //iProduct 产品信息字符串索引
0x00, //iSerialNumber 设备序列号字符串索引(不支持设为0)
0x01 //bNumConfiguration 配置数
};
code BYTE USBConfigurationDescriptor[]= //配置描述符
{
0x09, //bLength 描述表达小9 bytes
0x02, //bDescriptorType 描述表类型
0x20,0x00 , //wTotalLength 描述表总长度
0x01, //bNumInterfaces 设备支持的接口数
0x01, //bConfiguration Configuration 标志
0x00, //iConfiguration 字符串描述指针
0xc0, //bmAttributes 供电设置
0x64 //MaxPower 最大电流
};
code BYTE USBInterfaceDescriptor[]= //接口描述符
{
0x09, //bLlength 描述表达小9 bytes
0x04, //bDescriptorType 描述表类型
0x00, //bInterfaceNumber 接口号
0x00, //bAlternateSetting 可替换的设置接口
0x02, //bNumEndpoints 端口数
USB_CLASS_STORAGE, //bInterfaceClass 类代码
USB_SUBCLASS_SCSI, //bInterfaceSubClass子类
USB_PROTOCOL_BULK, //bInterfaceProtocol协议
0x00 //bInterface 字符串描述符指针
};
code BYTE USBEndpoint1Descriptor[]= //终端1描述符
{
0x07, //bLength 描述符长度 7 bytes
0x05, //bDescriptorType 描述符类型
0x01, //bEndpointAddress 终端号和方向 终端 OUT 方式
0x02, //bmAttributes 传输类型 BULK方式
0x40,0x00, //wMaxPacketSize 最大包尺寸
0x00 //bInterval 查询间隔时间
};
code BYTE USBEndpoint2Descriptor[]= //终端2描述符
{
0x07, //bLength 描述符长度 7 bytes
0x05, //bDescriptorType 描述符类型
0x82, //bEndpointAddress 终端号和方向 终端2 IN 方式
0x02, //bmAttributes 传输类型 BULK方式
0x40,0x00, //wMaxPacketSize 最大包尺寸
0x00 //bInterval 查询间隔时间
};
code char USBString1Descriptor[]=
{
0x04, //bLength
0x03, //bDescriptorType
0x09,04 //bLANGID
};
code char USBString2Descriptor[]=
{
0x10, //bLength
0x03, //bDescriptorType
'U',0,'S',0,'B',0,' ',0,'M',0,'P',0,'3',0 //bLANGID
};
code char USBString3Descriptor[]=
{
0x10, //bLength
0x03, //bDescriptorType
0,'U',0,'S',0,'B',0,' ',0,'M',0,'P',0,'3' //bLANGID
};
code char USBString4Descriptor[]=
{
0x10, //bLength
0x03, //bDescriptorType
'U',0,'S',0,'B',0,' ',0,'M',0,'P',0,'3',0 //bLANGID
};
code BYTE USBStringDescriptor[]=
{
0x10, //bLength 描述符长度
0x03, //bDescriptorType 描述符类型
"asfasdfasdfasdf" //bSTRING 字符串
};
struct SetupStr
{
BYTE bmRequestType;
BYTE bRequest;
WORD wValue;
WORD wIndex;
WORD wLength;
};
struct USBBufferStr
{
BYTE In[64];
BYTE *Out;
BYTE InLength;
BYTE OutLength;
};
xdata struct USBBufferStr USBBuffer;
xdata struct SetupStr *USBSetup=(struct SetupStr *)USBBuffer.In;
#endif
extern void InitUSB(void);
extern void USBReadPacket(void);
extern void USBWritePacket(void);
extern void USBSetAddress(void);
extern void USBGetDescriptor(void);
extern void USBSetConfig(void);
extern void USBClearFeature(void);
extern void USBSetupDevice(void);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -