📄 usb20.h
字号:
#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 + -