📄 ch374inc.h
字号:
#define M_SET_EP2_TRAN_ACK( old ) ( (old) & ~ BIT_EP2_TRAN_RESP | 0x00 ) /* 仅USB设备方式: 端点2发送响应/应答ACK */
#define M_SET_EP2_TRAN_ISO( old ) ( (old) & ~ BIT_EP2_TRAN_RESP | 0x01 ) /* 仅USB设备方式: 端点2发送响应/同步/等时传输/无需应答 */
#define M_SET_EP2_TRAN_NAK( old ) ( (old) & ~ BIT_EP2_TRAN_RESP | 0x02 ) /* 仅USB设备方式: 端点2发送响应/应答NAK */
#define M_SET_EP2_TRAN_STA( old ) ( (old) & ~ BIT_EP2_TRAN_RESP | 0x03 ) /* 仅USB设备方式: 端点2发送响应/应答STALL */
#define BIT_EP2_RECV_RESP 0x30 /* 仅USB设备方式: 端点2接收响应: 00-应答ACK, 01-同步/等时传输, 10-应答NAK, 11-应答STALL */
#define M_SET_EP2_RECV_ACK( old ) ( (old) & ~ BIT_EP2_RECV_RESP | 0x00 ) /* 仅USB设备方式: 端点2接收响应/应答ACK */
#define M_SET_EP2_RECV_ISO( old ) ( (old) & ~ BIT_EP2_RECV_RESP | 0x10 ) /* 仅USB设备方式: 端点2接收响应/同步/等时传输/不作应答 */
#define M_SET_EP2_RECV_NAK( old ) ( (old) & ~ BIT_EP2_RECV_RESP | 0x20 ) /* 仅USB设备方式: 端点2接收响应/应答NAK */
#define M_SET_EP2_RECV_STA( old ) ( (old) & ~ BIT_EP2_RECV_RESP | 0x30 ) /* 仅USB设备方式: 端点2接收响应/应答STALL */
#define BIT_EP2_TRAN_TOG 0x40 /* 仅USB设备方式: 端点2发送同步标志: 0-DATA0, 1-DATA1 */
#define BIT_EP2_RECV_TOG 0x80 /* 仅USB设备方式: 端点2接收同步标志: 0-DATA0, 1-DATA1 */
#define BIT_HOST_TRAN_ISO 0x01 /* 仅USB主机方式: 主机发送的传输类型: 0-控制/批量/中断传输, 1-同步/等时传输 */
#define BIT_HOST_NAK_RETRY 0x04 /* 仅USB主机方式: 收到NAK应答自动重试直到非NAK应答或者达到4S超时时间 */
#define BIT_HOST_START 0x08 /* 仅USB主机方式: 主机传输启动控制: 0-暂停, 1-启动传输,完成后自动清0 */
#define BIT_HOST_RECV_ISO 0x10 /* 仅USB主机方式: 主机接收的传输类型: 0-控制/批量/中断传输, 1-同步/等时传输 */
#define BIT_HOST_TRAN_TOG 0x40 /* 仅USB主机方式: 主机发送同步标志: 0-DATA0, 1-DATA1 */
#define BIT_HOST_RECV_TOG 0x80 /* 仅USB主机方式: 主机接收同步标志: 0-DATA0, 1-DATA1 */
/* 状态及命令等常量 */
#define CMD_SPI_374READ 0xC0 /* SPI读操作命令 */
#define CMD_SPI_374WRITE 0x80 /* SPI写操作命令 */
/* ********************************************************************************************************************* */
/* USB状态 */
/* 以下状态代码用于USB设备方式 */
/* 位4指示当前接收的数据包是否同步, 0=不同步, 1-同步 */
/* 位3-位2指示当前事务, 00=OUT, 10=IN, 11=SETUP */
/* 位1-位0指示当前端点, 00=端点0, 01=端点1, 10=端点2 */
#ifndef USB_INT_EP0_SETUP
#define USB_INT_EP0_SETUP 0x0C /* USB端点0的SETUP */
#define USB_INT_EP0_OUT 0x00 /* USB端点0的OUT */
#define USB_INT_EP0_IN 0x08 /* USB端点0的IN */
#define USB_INT_EP1_OUT 0x01 /* USB端点1的OUT */
#define USB_INT_EP1_IN 0x09 /* USB端点1的IN */
#define USB_INT_EP2_OUT 0x02 /* USB端点2的OUT */
#define USB_INT_EP2_IN 0x0A /* USB端点2的IN */
#endif
/* 以下状态代码用于USB主机方式 */
/* 位4指示当前接收的数据包是否同步, 0=不同步, 1-同步 */
/* 位3-位0指示USB设备的应答: 0010=ACK, 1010=NAK, 1110=STALL, 0011=DATA0, 1011=DATA1, XX00=应答错误或者超时无应答 */
#ifndef USB_INT_RET_ACK
#define USB_INT_RET_ACK DEF_USB_PID_ACK /* 错误:对于OUT/SETUP事务返回ACK */
#define USB_INT_RET_NAK DEF_USB_PID_NAK /* 错误:返回NAK */
#define USB_INT_RET_STALL DEF_USB_PID_STALL /* 错误:返回STALL */
#define USB_INT_RET_DATA0 DEF_USB_PID_DATA0 /* 错误:对于IN事务返回DATA0 */
#define USB_INT_RET_DATA1 DEF_USB_PID_DATA1 /* 错误:对于IN事务返回DATA1 */
#define USB_INT_RET_TOUT 0x00 /* 错误:应答错误或者超时无应答 */
#define USB_INT_RET_TOUT1 0x04 /* 错误:应答错误或者超时无应答 */
#define USB_INT_RET_TOUT2 0x08 /* 错误:应答错误或者超时无应答 */
#define USB_INT_RET_TOUT3 0x0C /* 错误:应答错误或者超时无应答 */
#endif
/* 以下状态代码1XH用于USB主机方式的操作状态代码, 可以自行定义任意值, 下面的定义仅为了兼容CH375 */
#ifndef USB_INT_SUCCESS
#define USB_INT_SUCCESS 0x14 /* USB事务或者传输操作成功 */
#define USB_INT_CONNECT 0x15 /* 检测到USB设备连接事件 */
#define USB_INT_DISCONNECT 0x16 /* 检测到USB设备断开事件 */
#define USB_INT_BUF_OVER 0x17 /* USB控制传输的数据太多, 缓冲区溢出 */
#define USB_INT_DISK_ERR 0x1F /* USB存储器操作失败 */
#endif
#ifndef USB_INT_CONNECT_LS
#define USB_INT_CONNECT_LS 0x13 /* 检测到低速USB设备连接事件 */
#endif
/* ********************************************************************************************************************* */
/* 常用USB结构和相关常量 */
typedef struct _USB_SETUP_REQ {
UINT8 bType;
UINT8 bReq;
UINT8 wValueL;
UINT8 wValueH;
UINT8 wIndexL;
UINT8 wIndexH;
UINT8 wLengthL;
UINT8 wLengthH;
} USB_SETUP_REQ, *PUSB_SETUP_REQ;
typedef struct _USB_DEVICE_DESCRIPTOR {
UINT8 bLength;
UINT8 bDescriptorType;
UINT8 bcdUSBL;
UINT8 bcdUSBH;
UINT8 bDeviceClass;
UINT8 bDeviceSubClass;
UINT8 bDeviceProtocol;
UINT8 bMaxPacketSize0;
UINT8 idVendorL;
UINT8 idVendorH;
UINT8 idProductL;
UINT8 idProductH;
UINT8 bcdDeviceL;
UINT8 bcdDeviceH;
UINT8 iManufacturer;
UINT8 iProduct;
UINT8 iSerialNumber;
UINT8 bNumConfigurations;
} USB_DEV_DESCR, *PUSB_DEV_DESCR;
typedef struct _USB_CONFIG_DESCRIPTOR {
UINT8 bLength;
UINT8 bDescriptorType;
UINT8 wTotalLengthL;
UINT8 wTotalLengthH;
UINT8 bNumInterfaces;
UINT8 bConfigurationValue;
UINT8 iConfiguration;
UINT8 bmAttributes;
UINT8 MaxPower;
} USB_CFG_DESCR, *PUSB_CFG_DESCR;
typedef struct _USB_INTERF_DESCRIPTOR {
UINT8 bLength;
UINT8 bDescriptorType;
UINT8 bInterfaceNumber;
UINT8 bAlternateSetting;
UINT8 bNumEndpoints;
UINT8 bInterfaceClass;
UINT8 bInterfaceSubClass;
UINT8 bInterfaceProtocol;
UINT8 iInterface;
} USB_ITF_DESCR, *PUSB_ITF_DESCR;
typedef struct _USB_ENDPOINT_DESCRIPTOR {
UINT8 bLength;
UINT8 bDescriptorType;
UINT8 bEndpointAddress;
UINT8 bmAttributes;
UINT8 wMaxPacketSize;
UINT8 wMaxPacketSize1;
UINT8 bInterval;
} USB_ENDP_DESCR, *PUSB_ENDP_DESCR;
typedef struct _USB_CONFIG_DESCRIPTOR_LONG {
USB_CFG_DESCR cfg_descr;
USB_ITF_DESCR itf_descr;
USB_ENDP_DESCR endp_descr[4];
} USB_CFG_DESCR_LONG, *PUSB_CFG_DESCR_LONG;
/* USB请求类型 */
#ifndef DEF_USB_REQ_TYPE
#define DEF_USB_REQ_READ 0x80 /* 控制读操作 */
#define DEF_USB_REQ_WRITE 0x00 /* 控制写操作 */
#define DEF_USB_REQ_TYPE 0x60 /* 控制请求类型 */
#define DEF_USB_REQ_STAND 0x00 /* 标准请求 */
#define DEF_USB_REQ_CLASS 0x20 /* 设备类请求 */
#define DEF_USB_REQ_VENDOR 0x40 /* 厂商请求 */
#define DEF_USB_REQ_RESERVE 0x60 /* 保留请求 */
#endif
/* USB标准设备请求, RequestType的位6位5=00(Standard) */
#ifndef DEF_USB_GET_DESCR
#define DEF_USB_CLR_FEATURE 0x01
#define DEF_USB_SET_FEATURE 0x03
#define DEF_USB_GET_STATUS 0x00
#define DEF_USB_SET_ADDRESS 0x05
#define DEF_USB_GET_DESCR 0x06
#define DEF_USB_SET_DESCR 0x07
#define DEF_USB_GET_CONFIG 0x08
#define DEF_USB_SET_CONFIG 0x09
#define DEF_USB_GET_INTERF 0x0A
#define DEF_USB_SET_INTERF 0x0B
#define DEF_USB_SYNC_FRAME 0x0C
#endif
/* 描述符类型 */
#ifndef USB_DEVICE_DESCR_TYPE
#define USB_DEVICE_DESCR_TYPE 0x01
#define USB_CONFIG_DESCR_TYPE 0x02
#define USB_STRING_DESCR_TYPE 0x03
#define USB_INTERF_DESCR_TYPE 0x04
#define USB_ENDP_DESCR_TYPE 0x05
#define USB_POWER_DESCR_TYPE 0x06
#define USB_HID_DESCR_TYPE 0x21
#define USB_REPORT_DESCR_TYPE 0x22
#define USB_PHYSIC_DESCR_TYPE 0x23
#endif
/* 端点类型和属性 */
#ifndef USB_ENDP_TYPE_MASK
#define USB_ENDP_DIR_MASK 0x80
#define USB_ENDP_TYPE_MASK 0x03
#define USB_ENDP_TYPE_CTRL 0x00
#define USB_ENDP_TYPE_ISOCH 0x01
#define USB_ENDP_TYPE_BULK 0x02
#define USB_ENDP_TYPE_INTER 0x03
#endif
/* 设备类别 */
#ifndef USB_DEV_CLASS_HUB
#define USB_DEV_CLASS_RESERVED 0x00
#define USB_DEV_CLASS_AUDIO 0x01
#define USB_DEV_CLASS_COMMUNIC 0x02
#define USB_DEV_CLASS_HUMAN_IF 0x03
#define USB_DEV_CLASS_MONITOR 0x04
#define USB_DEV_CLASS_PHYSIC_IF 0x05
#define USB_DEV_CLASS_POWER 0x06
#define USB_DEV_CLASS_PRINTER 0x07
#define USB_DEV_CLASS_STORAGE 0x08
#define USB_DEV_CLASS_HUB 0x09
#define USB_DEV_CLASS_VEN_SPEC 0xFF
#endif
#define DEFAULT_ENDP0_SIZE 8 /* 默认的端点0最大包长度 */
#ifdef __cplusplus
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -