📄 ch375.h
字号:
#include "44blib.h"
#include "44b.h"
#include "def.h"
#define CH375_COMM (*(volatile U8 *)(0x6000002))
#define CH375_DATA (*(volatile U8 *)(0x6000000))
#define CH375_CMD_PORT (*(volatile U8 *)(0x6000002))
#define CH375_DAT_PORT (*(volatile U8 *)(0x6000000))
#define CBWIdle 0x00
#define CBWReceive 0x01
#define CBWSend 0x02
#define CSWSend 0x03
#define ISO_BIT 0x10
#define MAX_DEV 0x06 // maximum number of devices (Address #0 + Slave + 4 Hub's device)
#define MAX_EP 0x05 // maximum number of endpoints (Ep0 + max of 4 data endpoints)
#define BYTE unsigned char
#define WORD unsigned int
typedef unsigned char UCHAR;
typedef unsigned short USHORT;
#define MY_USB_VENDOR_ID 0x058f
#define MY_USB_DEVICE_ID 0x9380
typedef union _REQUEST_PACK
{
unsigned char buffer[8];
struct{
unsigned char bmReuestType; //标准请求字
unsigned char bRequest; //请求代码
unsigned short wvalue; //特性选择高
unsigned short wIndx; //索引
unsigned short wLength; //数据长度
}r;
} mREQUEST_PACKET, *mpREQUEST_PACKET;
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_DEV_DESCR, *PUSB_DEV_DESCR;
typedef struct _USB_CONFIG_DESCRIPTOR {
UCHAR bLength;
UCHAR bDescriptorType;
USHORT wTotalLength;
UCHAR bNumInterfaces;
UCHAR bConfigurationValue;
UCHAR iConfiguration;
UCHAR bmAttributes;
UCHAR MaxPower;
} USB_CFG_DESCR, *PUSB_CFG_DESCR;
typedef struct _USB_INTERF_DESCRIPTOR {
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bInterfaceNumber;
UCHAR bAlternateSetting;
UCHAR bNumEndpoints;
UCHAR bInterfaceClass;
UCHAR bInterfaceSubClass;
UCHAR bInterfaceProtocol;
UCHAR iInterface;
} USB_ITF_DESCR, *PUSB_ITF_DESCR;
typedef struct _USB_ENDPOINT_DESCRIPTOR {
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bEndpointAddress;
UCHAR bmAttributes;
USHORT wMaxPacketSize;
UCHAR 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;
#define CH375_MAX_DATA_LEN 0x40 /* 最大数据包的长度, 内部缓冲区的长度 */
#define CMD_RESET_ALL 0x05 /* 执行硬件复位 */
#define CMD_CHECK_EXIST 0x06 /* 测试工作状态 */
#define CMD_SET_USB_ID 0x12 /* 设备方式: 设置USB厂商VID和产品PID */
#define CMD_SET_USB_ADDR 0x13 /* 设置USB地址 */
#define CMD_SET_USB_MODE 0x15 /* 设置USB工作模式 */
#define CMD_SET_ENDP2 0x18 /* 设备方式: 设置USB端点0的接收器 */
#define CMD_SET_ENDP3 0x19 /* 设备方式: 设置USB端点0的发送器 */
/* 输入: 工作方式 */
/* 位7为1则位6为同步触发位, 否则同步触发位不变 */
/* 位3~位0为事务响应方式: 0000~1000-就绪ACK, 1110-正忙NAK, 1111-错误STALL */
#define CMD_SET_ENDP4 0x1A /* 设备方式: 设置USB端点1的接收器 */
/* 输入: 工作方式 */
/* 位7为1则位6为同步触发位, 否则同步触发位不变 */
/* 位3~位0为事务响应方式: 0000-就绪ACK, 1110-正忙NAK, 1111-错误STALL */
#define CMD_SET_ENDP5 0x1B /* 设备方式: 设置USB端点1的发送器 */
/* 输入: 工作方式 */
/* 位7为1则位6为同步触发位, 否则同步触发位不变 */
/* 位3~位0为事务响应方式: 0000~1000-就绪ACK, 1110-正忙NAK, 1111-错误STALL */
#define CMD_SET_ENDP6 0x1C /* 设置USB端点2/主机端点的接收器 */
/* 输入: 工作方式 */
/* 位7为1则位6为同步触发位, 否则同步触发位不变 */
/* 位3~位0为事务响应方式: 0000-就绪ACK, 1101-就绪但不返回ACK, 1110-正忙NAK, 1111-错误STALL */
#define CMD_SET_ENDP7 0x1D /* 设置USB端点2/主机端点的发送器 */
/* 输入: 工作方式 */
/* 位7为1则位6为同步触发位, 否则同步触发位不变 */
/* 位3~位0为事务响应方式: 0000-就绪ACK, 1101-就绪但无须应答, 1110-正忙NAK, 1111-错误STALL */
#define CMD_GET_TOGGLE 0x0A /* 获取OUT事务的同步状态 */
/* 输入: 数据1AH */
/* 输出: 同步状态 */
/* 位4为1则OUT事务同步, 否则OUT事务不同步 */
#define CMD_GET_STATUS 0x22 /* 获取中断状态并取消中断请求 */
/* 输出: 中断状态 */
#define CMD_UNLOCK_USB 0x23 /* 设备方式: 释放当前USB缓冲区 */
#define CMD_RD_USB_DATA 0x28 /* 从当前USB中断的端点缓冲区读取数据块, 并释放缓冲区 */
/* 输出: 长度, 数据流 */
#define CMD_WR_USB_DATA3 0x29 /* 设备方式: 向USB端点0的发送缓冲区写入数据块 */
/* 输入: 长度, 数据流 */
#define CMD_WR_USB_DATA5 0x2A /* 设备方式: 向USB端点1的发送缓冲区写入数据块 */
/* 输入: 长度, 数据流 */
#define CMD_WR_USB_DATA7 0x2B /* 向USB端点2的发送缓冲区写入数据块 */
/* 输入: 长度, 数据流 */
/* ************************************************************************** */
/* 以下命令用于USB主机方式, 只有CH375支持 */
#define CMD_SET_BAUDRATE 0x02 /* 串口方式: 设置串口通讯波特率 */
/* 输入: 波特率分频系数, 波特率分频常数 */
/* 输出: 操作状态( CMD_RET_SUCCESS或CMD_RET_ABORT, 其它值说明操作未完成 ) */
#define CMD_ABORT_NAK 0x17 /* 主机方式: 放弃当前NAK的重试 */
#define CMD_SET_RETRY 0x0B /* 主机方式: 设置USB事务操作的重试次数 */
/* 输入: 数据25H, 重试次数 */
/* 位7为1则收到NAK时无限重试, 位3~位0为超时后的重试次数 */
#define CMD_ISSUE_TOKEN 0x4F /* 主机方式: 发出令牌, 执行事务 */
/* 输入: 事务属性 */
/* 低4位是令牌, 高4位是端点号 */
/* 输出中断 */
#define CMD_CLR_STALL 0x41 /* 主机方式: 控制传输-清除端点错误 */
/* 输入: 端点号 */
/* 输出中断 */
#define CMD_SET_ADDRESS 0x45 /* 主机方式: 控制传输-设置USB地址 */
/* 输入: 地址值 */
/* 输出中断 */
#define CMD_GET_DESCR 0x46 /* 主机方式: 控制传输-获取描述符 */
/* 输入: 描述符类型 */
/* 输出中断 */
#define CMD_SET_CONFIG 0x49 /* 主机方式: 控制传输-设置USB配置 */
/* 输入: 配置值 */
/* 输出中断 */
#define CMD_DISK_INIT 0x51 /* 主机方式: 初始化USB存储器 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -