?? usb.h
字號(hào):
/********************************************************/
/* */
/* 庫 名 稱:USB接口函數(shù)庫 */
/* 功 能 描 述:提供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
//協(xié)議代碼
#define USB_PROTOCOL_CBI0 0x00
#define USB_PROTOCOL_CBI1 0x01
#define USB_PROTOCOL_BULK 0x50
#define USB_SEND_ZERO_PACKET SET_BIT_4(UEPSTAX);/*設(shè)置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[] = //設(shè)備描述符
{
0x12, //bLength 描述表大小 (18 bytes)
0x01, //bDescriptorType 設(shè)備描述表類型
0x10, 0x01, //bcdUSB 兼容設(shè)備版本號(hào)(BCD碼)
0x00, //bDeviceClass 設(shè)備類碼
0x00, //bDeviceSubClass 子類碼
0x00, //bDeviceProtocol 協(xié)議碼
0x20, //bMaxPacketSize0 端點(diǎn)0最大包大小(8,16,32,64)
0x00, 0x03, //idVendor 廠商ID
0x01, 0x00, //idProduct 產(chǎn)品ID
0x00, 0x01, //bcdDevice 設(shè)備發(fā)行號(hào)(BCD碼)
0x00, //iManuFacturer 廠商信息字符串索引
0x00, //iProduct 產(chǎn)品信息字符串索引
0x00, //iSerialNumber 設(shè)備序列號(hào)字符串索引(不支持設(shè)為0)
0x01 //bNumConfiguration 配置數(shù)
};
code BYTE USBConfigurationDescriptor[]= //配置描述符
{
0x09, //bLength 描述表達(dá)小9 bytes
0x02, //bDescriptorType 描述表類型
0x20,0x00 , //wTotalLength 描述表總長(zhǎng)度
0x01, //bNumInterfaces 設(shè)備支持的接口數(shù)
0x01, //bConfiguration Configuration 標(biāo)志
0x00, //iConfiguration 字符串描述指針
0xc0, //bmAttributes 供電設(shè)置
0x64 //MaxPower 最大電流
};
code BYTE USBInterfaceDescriptor[]= //接口描述符
{
0x09, //bLlength 描述表達(dá)小9 bytes
0x04, //bDescriptorType 描述表類型
0x00, //bInterfaceNumber 接口號(hào)
0x00, //bAlternateSetting 可替換的設(shè)置接口
0x02, //bNumEndpoints 端口數(shù)
USB_CLASS_STORAGE, //bInterfaceClass 類代碼
USB_SUBCLASS_SCSI, //bInterfaceSubClass子類
USB_PROTOCOL_BULK, //bInterfaceProtocol協(xié)議
0x00 //bInterface 字符串描述符指針
};
code BYTE USBEndpoint1Descriptor[]= //終端1描述符
{
0x07, //bLength 描述符長(zhǎng)度 7 bytes
0x05, //bDescriptorType 描述符類型
0x01, //bEndpointAddress 終端號(hào)和方向 終端 OUT 方式
0x02, //bmAttributes 傳輸類型 BULK方式
0x40,0x00, //wMaxPacketSize 最大包尺寸
0x00 //bInterval 查詢間隔時(shí)間
};
code BYTE USBEndpoint2Descriptor[]= //終端2描述符
{
0x07, //bLength 描述符長(zhǎng)度 7 bytes
0x05, //bDescriptorType 描述符類型
0x82, //bEndpointAddress 終端號(hào)和方向 終端2 IN 方式
0x02, //bmAttributes 傳輸類型 BULK方式
0x40,0x00, //wMaxPacketSize 最大包尺寸
0x00 //bInterval 查詢間隔時(shí)間
};
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 描述符長(zhǎng)度
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);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -