📄 usb.h
字号:
///////////////////////////////////////////
//缩写,IO预定义
///////////////////////////////////////////
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define FALSE 0
#define TRUE (!FALSE)
#define DISABLE EA=0
#define ENABLE EA=1
//由硬件决定的地址映射
#define D12_COMMAND 0x0bf01
#define D12_DATA 0x0bf00
sbit MCU_LED1 = P1^0;
sbit MCU_LED2 = P1^1;
sbit MCU_LED3 = P1^2;
sbit MCU_LED4 = P1^3;
/////////////////////////////////////////////
//编译开关
////////////////////////////////////////////
#define NoRam
////////////////////////////////////////////
//算术宏
////////////////////////////////////////////
#define SWAP(x) ((((x) & 0xFF) << 8) | (((x) >> 8) & 0xFF))
#define MSB(x) (((x) >> 8) & 0xFF)
#define LSB(x) ((x) & 0xFF)
////////////////////////////////////////////
//常量
////////////////////////////////////////////
//与PC端程序有关的包头设置
#define HEAD_KEY 0x00
#define READ_FLASH_FROM 0x01
#define READ_FLASH_FROM2 0xe8 /*这两个要合在一起使用主要用于判断数据请求是否是真正的READFLASH*/
#define READ_FLASH_TO 0x02
#define HEAD_END 0xee
#define READ_FLASH_STOP 0x03
#define READ_FLASH_FINISH 0x04
//USB 状态值
#define USB_UNOPEN 0x00
#define USB_DEMOSHOW 0x01
#define USB_READER 0x02
#define USB_READFLASH 0x03
////----
//d12ci.c 使用部分
////----
#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 0x03
#define D12_CLOCK_4M 0x0b
#define D12_SETTOONE 0x40
#define D12_SOFONLY 0x80
#define D12_DMASINGLE 0x00
#define D12_BURST_4 0x01
#define D12_BURST_8 0x02
#define D12_BURST_16 0x03
#define D12_DMAENABLE 0x04
#define D12_DMA_INTOKEN 0x08
#define D12_AUTOLOAD 0x10
//==============================================
#define D12_NORMALPLUSSOF 0x20
#define D12_ENDP4INTENABLE 0x40
#define D12_ENDP5INTENABLE 0x80 // bug fixed in V2.1
#define D12_INT_ENDP0OUT 0x01
#define D12_INT_ENDP0IN 0x02
#define D12_INT_ENDP1OUT 0x04
#define D12_INT_ENDP1IN 0x08
#define D12_INT_ENDP2OUT 0x10
#define D12_INT_ENDP2IN 0x20
#define D12_INT_BUSRESET 0x40
#define D12_INT_SUSPENDCHANGE 0x80
#define D12_INT_EOT 0x0100
#define D12_SETUPPACKET 0x20
#define D12_BUFFER0FULL 0x20
#define D12_BUFFER1FULL 0x40
#define D12_FULLEMPTY 0x01
#define D12_STALL 0x02
////----
//main.h
////----
#define MAX_ENDPOINTS (uchar)0x3
//#define EP0_TX_FIFO_SIZE 16
//#define EP0_RX_FIFO_SIZE 16
#define EP0_PACKET_SIZE 16
//#define EP1_TX_FIFO_SIZE 4
//#define EP1_RX_FIFO_SIZE 4
#define EP1_PACKET_SIZE 8
//#define EP2_TX_FIFO_SIZE 64
//#define EP2_RX_FIFO_SIZE 64
#define EP2_PACKET_SIZE 64 //主端点缓冲
#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 (uchar)0x1F
#define USB_RECIPIENT_DEVICE (uchar)0x00
#define USB_RECIPIENT_INTERFACE (uchar)0x01
#define USB_RECIPIENT_ENDPOINT (uchar)0x02
#define USB_REQUEST_TYPE_MASK (uchar)0x60
#define USB_STANDARD_REQUEST (uchar)0x00
//#define USB_CLASS_REQUEST (uchar)0x20
#define USB_VENDOR_REQUEST (uchar)0x40
#define USB_REQUEST_MASK (uchar)0x0F
#define DEVICE_ADDRESS_MASK 0x7F
#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_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_POWER_DESCRIPTOR_TYPE 0x06
#define USB_DESCRIPTOR_MAKE_TYPE_AND_INDEX(d, i) ((uint)((uint)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
// see chapter 9 of the USB 1.0 specifcation for
// more information.
//
// These are the correct values based on the USB 1.0
// specification
#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
#define USB_DEVICE_CLASS_VENDOR_SPECIFIC 0xFF
//
// 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
////////////////////////////////////////////////
////结构体与变量定义
////////////////////////////////////////////////
typedef struct _USB_DEVICE_DESCRIPTOR {
uchar bLength;
uchar bDescriptorType;
uint bcdUSB;
uchar bDeviceClass;
uchar bDeviceSubClass;
uchar bDeviceProtocol;
uchar bMaxPacketSize0;
uint idVendor;
uint idProduct;
uint bcdDevice;
uchar iManufacturer;
uchar iProduct;
uchar iSerialNumber;
uchar bNumConfigurations;
} USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR;
typedef struct _USB_ENDPOINT_DESCRIPTOR {
uchar bLength;
uchar bDescriptorType;
uchar bEndpointAddress;
uchar bmAttributes;
uint wMaxPacketSize;
uchar bInterval;
} USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR;
//
// values for bmAttributes Field in
// USB_CONFIGURATION_DESCRIPTOR
//
#define BUS_POWERED 0x80
#define SELF_POWERED 0x40
#define REMOTE_WAKEUP 0x20
typedef struct _USB_CONFIGURATION_DESCRIPTOR {
uchar bLength;
uchar bDescriptorType;
uint 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_STRING_DESCRIPTOR {
uchar bLength;
uchar bDescriptorType;
uchar bString[1];
} USB_STRING_DESCRIPTOR, *PUSB_STRING_DESCRIPTOR;
typedef unsigned char BOOL;
//演示程序的辅助结构体
typedef struct _demo
{
uchar key; //DX按键值
uchar usb_state; //usb DEMO程序的当前状态
ulong read_flash_begin; //读FLASH起始地址
ulong read_flash_end; //读flash结束地址
ulong main_len; //主端点收到的数据长度
}USB_DEMO;
//usb通信状态位
typedef union _epp_flags
{
struct _flags
{
uchar timer : 1;
uchar bus_reset : 1;
uchar suspend : 1;
uchar setup_packet : 1;
uchar remote_wakeup : 1;
uchar in_isr : 1;
uchar control_state : 2;
uchar configuration : 1;
uchar verbose : 1;
uchar ep1_rxdone : 1;
uchar read_flash :1 ;//读FLASH标志
uchar power_down : 1; //
uchar main_rxdone :1 ;//主端点读
uchar main_txdone :1 ;//主端点写
} bits;
unsigned short value;
} EPPFLAGS;
typedef struct _device_request
{
uchar bmRequestType;
uchar bRequest;
unsigned short wValue;
unsigned short wIndex;
unsigned short wLength;
} DEVICE_REQUEST;
/*
typedef struct _IO_REQUEST {
unsigned short uAddressL;
uchar bAddressH;
unsigned short uSize;
uchar bCommand;
} IO_REQUEST, *PIO_REQUEST;
*/
#define MAX_CONTROLDATA_SIZE 8
//控制传输辅助结构体
typedef struct _control_xfer
{
DEVICE_REQUEST DeviceRequest;
unsigned short wLength;
unsigned short wCount;
uchar * pData;
uchar dataBuffer[MAX_CONTROLDATA_SIZE];
} CONTROL_XFER;
//
// 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
typedef struct _USB_POWER_DESCRIPTOR {
uchar bLength;
uchar bDescriptorType;
uchar bCapabilitiesFlags;
uint EventNotification;
uint D1LatencyTime;
uint D2LatencyTime;
uint D3LatencyTime;
uchar PowerUnit;
uint D0PowerConsumption;
uint D1PowerConsumption;
uint D2PowerConsumption;
} USB_POWER_DESCRIPTOR, *PUSB_POWER_DESCRIPTOR;
typedef struct _USB_COMMON_DESCRIPTOR {
uchar bLength;
uchar bDescriptorType;
} USB_COMMON_DESCRIPTOR, *PUSB_COMMON_DESCRIPTOR;
//
// Standard USB HUB definitions
//
// See Chapter 11
//
typedef struct _USB_HUB_DESCRIPTOR {
uchar bDescriptorLength; // Length of this descriptor
uchar bDescriptorType; // Hub configuration type
uchar bNumberOfPorts; // number of ports on this hub
uint wHubCharacteristics; // Hub Charateristics
uchar bPowerOnToPowerGood; // port power on till power good in 2ms
uchar bHubControlCurrent; // max current in mA
//
// room for 255 ports power control and removable bitmask
uchar bRemoveAndPowerMask[64];
} USB_HUB_DESCRIPTOR, *PUSB_HUB_DESCRIPTOR;
//////////////////////////////////////////////////
//// 函数声明
//////////////////////////////////////////////////
//--------
//d12ci.c
//--------
extern void D12_SetEndpointEnable(uchar bEnable);
extern void D12_SetAddressEnable(uchar Address);
extern void D12_SetMode(uchar bConfig, uchar bClkDiv);
extern void D12_SetDMA(uchar bMode);
extern uchar D12_GetDMA(void);
extern unsigned short D12_ReadInterruptRegister(void);
extern uchar D12_SelectEndpoint(uchar bEndp);
extern uchar D12_ReadLastTransactionStatus(uchar bEndp);
extern uchar D12_ReadEndpointStatus(uchar bEndp);
extern void D12_SetEndpointStatus(uchar bEndp, uchar bStalled);
extern void D12_SendResume(void);
extern uchar D12_ReadEndpoint(uchar endp, uchar len, uchar * buf);
extern uchar D12_WriteEndpoint(uchar endp, uchar len, uchar * buf);
extern void D12_WriteEndpointByte(uchar endp, uchar buf);
extern void D12_AcknowledgeEndpoint(uchar endp);
//----------
//chap9.h USB请求的各个解决函数
//---------
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 read_write_register(void);
extern void single_transmit(uchar * pData, uchar len);
extern void stall_ep0(void);
extern void code_transmit(uchar code * pRomData, unsigned short len);
extern void init_config(void);
extern void init_unconfig(void);
//main_loop.c
extern void reconnect_USB(void);
extern void usb_interrupt_transmit(void);
extern void control_handler(void);
extern void setup_dma(void);
extern void disconnect_USB(void);
//外部功能函数
extern void KillD12(void);
extern uchar getkey_usb(uint);
extern void show_pc_key(uchar show_key);
//////////////////////////////////////////////////////
//// 变量声明
/////////////////////////////////////////////////////
extern xdata EPPFLAGS bEPPflags;
extern xdata CONTROL_XFER ControlData;
//extern xdata IO_REQUEST ioRequest;
extern xdata USB_DEMO usbDemo; //USB实验程序辅助结构体
extern xdata unsigned long ClockTicks;
extern xdata uchar GenEpBuf[];
//extern xdata IO_REQUEST ioRequest;
//extern xdata uchar ioSize, ioCount;
//extern xdata uchar MainEpBuf[];
extern xdata uchar EpBufIN[];
extern xdata uchar EpBufOUT[];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -