📄 ch376inc.h
字号:
UINT8 CmdSpecInfo[4];
UINT8 AdditSenseCode; /* 0CH, 附加键码 */
UINT8 AddSenCodeQual; /* 0DH, 详细的附加键码 */
UINT8 FieldReplaUnit;
UINT8 SenseKeySpec[3];
} SENSE_DATA, *P_SENSE_DATA; /* 12H */
#endif
/* ********************************************************************************************************************* */
/* 主机文件模式下的数据输入和输出结构 */
#ifndef MAX_FILE_NAME_LEN
#define MAX_FILE_NAME_LEN (13+1) /* 文件名最大长度,最大长度是1个根目录符+8个主文件名+1个小数点+3个类型名+结束符=14 */
/* 命令的输入数据和输出数据 */
typedef union _CH376_CMD_DATA {
struct {
UINT8 mBuffer[ MAX_FILE_NAME_LEN ];
} Default;
INQUIRY_DATA DiskMountInq; /* 返回: INQUIRY命令的返回数据 */
/* CMD0H_DISK_MOUNT: 初始化磁盘并测试磁盘是否就绪,首次执行时 */
FAT_DIR_INFO OpenDirInfo; /* 返回: 枚举到的文件目录信息 */
/* CMD0H_FILE_OPEN: 枚举文件和目录(文件夹) */
FAT_DIR_INFO EnumDirInfo; /* 返回: 枚举到的文件目录信息 */
/* CMD0H_FILE_ENUM_GO: 继续枚举文件和目录(文件夹) */
struct {
UINT8 mUpdateFileSz; /* 输入参数: 是否允许更新文件长度, 0则禁止更新长度 */
} FileCLose; /* CMD1H_FILE_CLOSE: 关闭当前已经打开的文件 */
struct {
UINT8 mDirInfoIndex; /* 输入参数: 指定需要读取的目录信息结构在扇区内的索引号, 0FFH则为当前已经打开的文件 */
} DirInfoRead; /* CMD1H_DIR_INFO_READ: 读取文件的目录信息 */
union {
UINT32 mByteOffset; /* 输入参数: 偏移字节数,以字节为单位的偏移量(总长度32位,低字节在前) */
UINT32 mSectorLba; /* 返回: 当前文件指针对应的绝对线性扇区号,0FFFFFFFFH则已到文件尾(总长度32位,低字节在前) */
} ByteLocate; /* CMD4H_BYTE_LOCATE: 以字节为单位移动当前文件指针 */
struct {
UINT16 mByteCount; /* 输入参数: 请求读取的字节数(总长度16位,低字节在前) */
} ByteRead; /* CMD2H_BYTE_READ: 以字节为单位从当前位置读取数据块 */
struct {
UINT16 mByteCount; /* 输入参数: 请求写入的字节数(总长度16位,低字节在前) */
} ByteWrite; /* CMD2H_BYTE_WRITE: 以字节为单位向当前位置写入数据块 */
union {
UINT32 mSectorOffset; /* 输入参数: 偏移扇区数,以扇区为单位的偏移量(总长度32位,低字节在前) */
UINT32 mSectorLba; /* 返回: 当前文件指针对应的绝对线性扇区号,0FFFFFFFFH则已到文件尾(总长度32位,低字节在前) */
} SectorLocate; /* CMD4H_SEC_LOCATE: 以扇区为单位移动当前文件指针 */
struct {
UINT8 mSectorCount; /* 输入参数: 请求读取的扇区数 */
/* 返回: 允许读取的扇区数 */
UINT8 mReserved1;
UINT8 mReserved2;
UINT8 mReserved3;
UINT32 mStartSector; /* 返回: 允许读取的扇区块的起始绝对线性扇区号(总长度32位,低字节在前) */
} SectorRead; /* CMD1H_SEC_READ: 以扇区为单位从当前位置读取数据块 */
struct {
UINT8 mSectorCount; /* 输入参数: 请求写入的扇区数 */
/* 返回: 允许写入的扇区数 */
UINT8 mReserved1;
UINT8 mReserved2;
UINT8 mReserved3;
UINT32 mStartSector; /* 返回: 允许写入的扇区块的起始绝对线性扇区号(总长度32位,低字节在前) */
} SectorWrite; /* CMD1H_SEC_WRITE: 以扇区为单位在当前位置写入数据块 */
struct {
UINT32 mDiskSizeSec; /* 返回: 整个物理磁盘的总扇区数(总长度32位,低字节在前) */
} DiskCapacity; /* CMD0H_DISK_CAPACITY: 查询磁盘物理容量 */
struct {
UINT32 mTotalSector; /* 返回: 当前逻辑盘的总扇区数(总长度32位,低字节在前) */
UINT32 mFreeSector; /* 返回: 当前逻辑盘的剩余扇区数(总长度32位,低字节在前) */
UINT8 mDiskFat; /* 返回: 当前逻辑盘的FAT类型,1-FAT12,2-FAT16,3-FAT32 */
} DiskQuery; /* CMD_DiskQuery, 查询磁盘信息 */
BULK_ONLY_CBW DiskBocCbw; /* 输入参数: CBW命令结构 */
/* CMD0H_DISK_BOC_CMD: 对USB存储器执行BulkOnly传输协议的命令 */
struct {
UINT8 mMaxLogicUnit; /* 返回: USB存储器的最大逻辑单元号 */
} DiskMaxLun; /* CMD0H_DISK_MAX_LUN: 控制传输-获取USB存储器最大逻辑单元号 */
INQUIRY_DATA DiskInitInq; /* 返回: INQUIRY命令的返回数据 */
/* CMD0H_DISK_INIT: 初始化USB存储器 */
INQUIRY_DATA DiskInqData; /* 返回: INQUIRY命令的返回数据 */
/* CMD0H_DISK_INQUIRY: 查询USB存储器特性 */
SENSE_DATA ReqSenseData; /* 返回: REQUEST SENSE命令的返回数据 */
/* CMD0H_DISK_R_SENSE: 检查USB存储器错误 */
struct {
UINT32 mDiskSizeSec; /* 返回: 整个物理磁盘的总扇区数(总长度32位,高字节在前) */
} DiskSize; /* CMD0H_DISK_SIZE: 获取USB存储器的容量 */
struct {
UINT32 mStartSector; /* 输入参数: LBA扇区地址(总长度32位,低字节在前) */
UINT8 mSectorCount; /* 输入参数: 请求读取的扇区数 */
} DiskRead; /* CMD5H_DISK_READ: 从USB存储器读数据块(以扇区为单位) */
struct {
UINT32 mStartSector; /* 输入参数: LBA扇区地址(总长度32位,低字节在前) */
UINT8 mSectorCount; /* 输入参数: 请求写入的扇区数 */
} DiskWrite; /* CMD5H_DISK_WRITE: 向USB存储器写数据块(以扇区为单位) */
} CH376_CMD_DATA, *P_CH376_CMD_DATA;
#endif
/* ********************************************************************************************************************* */
/* 主机文件模式下的文件系统变量的地址 */
#ifndef VAR_FILE_SIZE
/* 8位/单字节变量 */
#define VAR_SYS_BASE_INFO 0x20 /* 当前系统的基本信息 */
/* 位6用于指示USB存储设备的子类别SubClass-Code, 位6为0则说明子类别为6, 位6为1则说明子类别是非6的其它值 */
/* 位5用于指示USB设备方式下的USB配置状态和USB主机方式下的USB设备连接状态 */
/* USB设备方式下, 位5为1则USB配置完成, 位5位0则尚未配置 */
/* USB主机方式下, 位5为1则USB端口存在USB设备, 位5位0则USB端口没有USB设备 */
/* 位4用于指示USB设备方式下的缓冲区锁定状态, 位4为1则说明USB缓冲区处于锁定状态, 位6为1则说明已经释放 */
/* 其它位, 保留,请勿修改 */
#define VAR_RETRY_TIMES 0x25 /* USB事务操作的重试次数 */
/* 位7为0则收到NAK时不重试, 位7为1位6为0则收到NAK时无限重试(可以用CMD_ABORT_NAK命令放弃重试), 位7为1位6为1则收到NAK时最多重试3秒 */
/* 位5~位0为超时后的重试次数 */
#define VAR_FILE_BIT_FLAG 0x26 /* 主机文件模式下的位标志 */
/* 位1和位0, 逻辑盘的FAT文件系统标志, 00-FAT12, 01-FAT16, 10-FAT32, 11-非法 */
/* 位2, 当前缓冲区中的FAT表数据是否被修改标志, 0-未修改, 1-已修改 */
/* 位3, 文件长度需要修改标志, 当前文件被追加数据, 0-未追加无需修改, 1-已追加需要修改 */
/* 其它位, 保留,请勿修改 */
#define VAR_DISK_STATUS 0x2B /* 主机文件模式下的磁盘及文件状态 */
#define VAR_SD_BIT_FLAG 0x30 /* 主机文件模式下SD卡的位标志 */
/* 位0, SD卡版本, 0-只支持SD第一版,1-支持SD第二版 */
/* 位1, 自动识别, 0-SD卡, 1-MMC卡 */
/* 位2, 自动识别, 0-标准容量SD卡, 1-大容量SD卡(HC-SD) */
/* 位4, ACMD41命令超时 */
/* 位5, CMD1命令超时 */
/* 位6, CMD58命令超时 */
/* 其它位, 保留,请勿修改 */
#define VAR_UDISK_TOGGLE 0x31 /* USB存储设备的BULK-IN/BULK-OUT端点的同步标志 */
/* 位7, Bulk-In端点的同步标志 */
/* 位6, Bulk-In端点的同步标志 */
/* 位5~位0, 必须为0 */
#define VAR_UDISK_LUN 0x34 /* USB存储设备的逻辑单元号 */
/* 位7~位4, USB存储设备的当前逻辑单元号,CH376初始化USB存储设备后,默认是访问0#逻辑单元 */
/* 位3~位0, USB存储设备的最大逻辑单元号,加1后等于逻辑单元数 */
#define VAR_SEC_PER_CLUS 0x38 /* 逻辑盘的每簇扇区数 */
#define VAR_FILE_DIR_INDEX 0x3B /* 当前文件目录信息在扇区内的索引号 */
#define VAR_CLUS_SEC_OFS 0x3C /* 当前文件指针在簇内的扇区偏移,为0xFF则指向文件末尾,簇结束 */
/* 32位/4字节变量 */
#define VAR_DISK_ROOT 0x44 /* 对于FAT16盘为根目录占用扇区数,对于FAT32盘为根目录起始簇号(总长度32位,低字节在前) */
#define VAR_DSK_TOTAL_CLUS 0x48 /* 逻辑盘的总簇数(总长度32位,低字节在前) */
#define VAR_DSK_START_LBA 0x4C /* 逻辑盘的起始绝对扇区号LBA(总长度32位,低字节在前) */
#define VAR_DSK_DAT_START 0x50 /* 逻辑盘的数据区域的起始LBA(总长度32位,低字节在前) */
#define VAR_LBA_BUFFER 0x54 /* 当前磁盘数据缓冲区的数据对应的LBA(总长度32位,低字节在前) */
#define VAR_LBA_CURRENT 0x58 /* 当前读写的磁盘起始LBA地址(总长度32位,低字节在前) */
#define VAR_FAT_DIR_LBA 0x5C /* 当前文件目录信息所在的扇区LBA地址(总长度32位,低字节在前) */
#define VAR_START_CLUSTER 0x60 /* 当前文件或者目录(文件夹)的起始簇号(总长度32位,低字节在前) */
#define VAR_CURRENT_CLUST 0x64 /* 当前文件的当前簇号(总长度32位,低字节在前) */
#define VAR_FILE_SIZE 0x68 /* 当前文件的长度(总长度32位,低字节在前) */
#define VAR_CURRENT_OFFSET 0x6C /* 当前文件指针,当前读写位置的字节偏移(总长度32位,低字节在前) */
#endif
/* ********************************************************************************************************************* */
/* 常用USB定义 */
/* USB的包标识PID, 主机方式可能用到 */
#ifndef DEF_USB_PID_SETUP
#define DEF_USB_PID_NULL 0x00 /* 保留PID, 未定义 */
#define DEF_USB_PID_SOF 0x05
#define DEF_USB_PID_SETUP 0x0D
#define DEF_USB_PID_IN 0x09
#define DEF_USB_PID_OUT 0x01
#define DEF_USB_PID_ACK 0x02
#define DEF_USB_PID_NAK 0x0A
#define DEF_USB_PID_STALL 0x0E
#define DEF_USB_PID_DATA0 0x03
#define DEF_USB_PID_DATA1 0x0B
#define DEF_USB_PID_PRE 0x0C
#endif
/* 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
/* ********************************************************************************************************************* */
#ifdef __cplusplus
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -