📄 usb.h
字号:
#ifndef _usb_h_
#define _usb_h_
#define UCHAR unsigned char
#define USHORT unsigned short
#define SWAP1(x) ((x&0xf0)<<4)|((x>>4)&0x0f) //高低4位互换
#define SWAP(x) ((x&0xff)<<8)|((x>>8)&0xff) //高低8位互换
#define MSB(x) ((x>>8) & 0xff) //获取高八位
#define LSB(x) (x & 0xff) //获取低八位
#define DISABLE cli()
#define ENABLE sei()
//***********************************
#define USB_REQUSET_TYPE_MASK 0x60
#define USB_REQUSET_MASK 0x0f
#define USB_STANDERD_REQUEST 0x00
#define USB_VENDOR_REQUEST 0x40
//***********************************
#define MAX_CONTROLDATA_SIZE 0x08 //请求的数据最大值
#define DMA_BUFFER_SIZE 16000
#define DMA_IDLE 0
#define DMA_RUNNING 1
#define DMA_PENDING 2
//*********************************
#define D12_NOLAZYCLOCK 0x02
#define D12_CLOCKRUNNING 0x04
#define D12_INTERRUPTMODE 0x08
#define D12_SOFTCONNECT 0x10
#define D12_ENDP_NONISO 0x00
#define D12_ENDP_ISOOUT 0x40
#define D12_ENDP_ISOIN 0x80
#define D12_ENDP_ISOIO 0xC0
#define D12_CLOCK_12M 0x05 //0x03
#define D12_CLOCK_8M 0x05
#define D12_CLOCK_4M 0x0b
#define D12_SETTOONE 0x40
#define D12_SOFONLY 0x80
//**************************************
#define SETUP_DMA_REQUEST 0x0471
#define GET_FIRMWARE_VERSION 0x0472
#define GET_BUFFER_SIZE 0x0474
#define TRANS_REQUEST 0x0471
//定义标准的描述符类型,也就是USB分配的各种描述符的标号,即bDescriptorType字段的值
#define DEVICE_DESCRIPTOR 0x01 //设备描述符
#define CONFIGURATION_DESCRIPTOR 0x02 //配置描述符
#define STRING_DESCRIPTOR 0x03 //字符串描述符
#define INTERFACE_DESCRIPTOR 0x04 //接口描述符
#define ENDPOINT_DESCRIPTOR 0x05 //端点描述符
//定义标准的USB请求命令,即USB分配的各种请求的编号,即bRequest字段的值
#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_CONFIGURATION 0x08 //获取配置请求
#define SET_CONFIGURATION 0x09 //设置配置请求
#define GET_INTERFACE 0x0A //获取接口请求
#define SET_INTERFACE 0x0B //设置接口请求
#define SYNCH_FRAME 0x0C //同步帧请求
//**************************************
#define EP0_PACKET_SIZE 0x10 //端点0最大数据包大小,=10H
#define EP1_PACKET_SIZE 0x04 //端点最大包的大小=10H
#define EP2_PACKET_SIZE 0x0040 //端点最大包的大小,=40H
//**************************************
#define USB_ENDPOINT_DIRECTION_MASK 0x80 //端点数据传输方向
//USB标准设备请求
#define NUM_ENDPOINTS 0x04 //除端点0的端点索引数目,=04H
#define MAX_ENDPOINTS 0x03 //除端点0的端点索引数目,=04H
//中断标志位定义
#define D12_INT_ENDP0OUT 0x01 //控制输入端点
#define D12_INT_ENDP0IN 0x02 //控制输出端点
#define D12_INT_ENDP1OUT 0x04 //端点1输入
#define D12_INT_ENDP1IN 0x08 //端点1输出
#define D12_INT_ENDP2OUT 0x10 //主输入端点
#define D12_INT_ENDP2IN 0x20 //主输出端点
#define D12_INT_BUSREST 0x40 //总线复位
#define D12_INT_SUSPENDCHANGE 0x80 //挂起改变
#define D12_INT_EOT 0x0100 //DMA EOT
//端点上一状态标志
#define D12_SETUPPACKET 0x20 //设置包
//控制端点处理状态
#define USB_IDLE 0x00 //0:IDEL 空闲状态
#define USB_TRANSMIT 0x01 //1:TRANSMIT 数据发送状态
#define USB_RECEIVE 0x02 //2:RECEIVE 数据接收状态
//*******************************************
#define CONFIG_DESCRIPTOR_LENGTH (unsigned long int)(sizeof(USB_CONFIGURATION_DESCRIPTOR)+ sizeof(USB_INTERFACE_DESCRIPTOR)+(NUM_ENDPOINTS * sizeof(USB_ENDPOINT_DESCRIPTOR))) //描述符总长度,=2EH
#define USB_DEVICE_DESCRIPTOR_TYPE 0x01 //设备描述符类型,=01H
#define USB_CLASS_CODE_TEST_CLASS_DEVICE 0x0DC //测试设备类型,=0DCH
#define USB_CONFIGURATION_DESCRIPTOR_TYPE 0x02 //配置描述符类型,=02H
#define USB_INTERFACE_DESCRIPTOR_TYPE 0x04 //接口描述符类型,=04H
#define USB_CLASS_CODE_TEST_CLASS_DEVICE 0x0DC //测试设备类型,=0DCH
#define USB_SUBCLASS_CODE_TEST_CLASS_D12 0xA0 //之类代码,=0A0H
#define USB_PTOTOCL_CODE_TEST_CLASS_D12 0xB0 //协议代码,=0B0H
#define USB_ENDPOINT_DESCRIPTOR_TYPE 0x05 //端点描述符类型,=05H
#define USB_ENDPOINT_TYPE_INTERRUPT 0x03 //中断传输,=03H
#define USB_ENDPOINT_TYPE_BULK 0x02 //批量传输,=02H
//********************************************
#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
#define USB_DEVICE_CLASS_VENDOR_SPECIFIC 0xFF
//*****************************************
//USB标准设备请求
#define D12_STALL 0x02 //端点停止标志位
#define USB_RECIPIENT 0x1f
#define DEVICE_ADDRESS_MASK 0x7f
#define USB_RECIPIENT_DEVICE 0x00 //设备
#define USB_RECIPIENT_INTERFACE 0x01 //接口
#define USB_RECIPIENT_ENDPOINT 0x02 //端点
#define USB_FEATURE_REMOTE_WAKEUP 0x01 //设备远程唤醒
#define USB_FEATURE_ENDPOINT_STALL 0
//USB事件标志
typedef union _epp_flags
{
struct _flags
{
UCHAR timer :1; //时间溢出
UCHAR bus_reset :1; //总线复位标志
UCHAR suspend :1; //挂起改变标志
UCHAR setup_packet :1; //收到setup包
UCHAR remote_wakeup :1; //远程唤醒标志(未使用)
UCHAR in_isr :1; //USB中断服务标志
UCHAR control_state :2; //控制端点处理状态
//0:IDEL 空闲状态
//1:TRANSMIT 数据发送状态
//2:RECEIVE 数据接收状态
UCHAR configuration :1; //
UCHAR command :1; //
UCHAR ep1_rxdone :1; //
UCHAR ep2_rxdone :1; //
UCHAR ep2buf_full :1; //
}bits;
USHORT value;
}EPPFLAGS;
//USB标准设备请求
typedef struct _device_request
{
UCHAR bmRequestType; //请求类型
UCHAR bRequest; //USB请求
USHORT wValue; //USB数值
USHORT wIndex; //USB请求索引
USHORT wLength; //长度
}DEVICE_REQUEST;
typedef struct _control_xfer
{
DEVICE_REQUEST DeviceRequest; //USB设备请求结构体,8个字节
USHORT wLength; //传输数据的总字节数
USHORT wCount; //传输字节数统计
UCHAR *pData; //传输数据的指针
UCHAR dataBuffer[MAX_CONTROLDATA_SIZE];//请求的数据
}CONTROL_XFER;
//定义标准的描述符类型
typedef struct _USB_DEVICE_DESCRIPTOR {
UCHAR bLength;
UCHAR bDescriptorType;
USHORT bcdUSB;
UCHAR bDeviceClass;
UCHAR bDeviceSubClass;
UCHAR bDeviceProtocol;
UCHAR bMaxPacketSize0;
USHORT idVendor;
USHORT idProduct;
USHORT bcdDevice;
UCHAR iManufacturer;
UCHAR iProduct;
UCHAR iSerialNumber;
UCHAR bNumConfigurations;
} USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR;
//配置描述符
typedef struct _USB_CONFIGURATION_DESCRIPTOR {
UCHAR bLength;
UCHAR bDescriptorType;
USHORT wTotalLength;
UCHAR bNumInterfaces;
UCHAR bConfigurationValue;
UCHAR iConfiguration;
UCHAR bmAttributes;
UCHAR MaxPower;
} USB_CONFIGURATION_DESCRIPTOR, *PUSB_CONFIGURATION_DESCRIPTOR;
//接口描述符
typedef struct _USB_INTERFACE_DESCRIPTOR {
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bInterfaceNumber;
UCHAR bAlternateSetting;
UCHAR bNumEndpoints;
UCHAR bInterfaceClass;
UCHAR bInterfaceSubClass;
UCHAR bInterfaceProtocol;
UCHAR iInterface;
} USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR;
//端点描述符
typedef struct _USB_ENDPOINT_DESCRIPTOR {
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bEndpointAddress;
UCHAR bmAttributes;
USHORT wMaxPacketSize;
UCHAR bInterval;
} USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR;
//字符串描述符
typedef struct _USB_STRING_DESCRIPTOR {
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bString[1];
} USB_STRING_DESCRIPTOR, *PUSB_STRING_DESCRIPTOR;
unsigned char *EpBuf,GenEpBuf[64];
EPPFLAGS bEPPflags;
CONTROL_XFER ControlData;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -