📄 ch375hm.inc
字号:
; unsigned short mFileTime; ; 输入参数: 新的文件时间,为0FFFFH则不修改, 返回: 原时间 */
; unsigned char mFileAttr; ; 输入参数: 新的文件属性,为0FFH则不修改, 返回: 原属性 */
; } Modify; ; CMD_FileQuery, 查询当前文件的信息; CMD_FileModify, 查询或者修改当前文件的信息 */
; struct {
; unsigned long mSectorOffset; ; 输入参数: 扇区偏移,0则移动到文件头,0FFFFFFFFH则移动到文件尾, 返回: 当前文件指针对应的绝对线性扇区号, 0FFFFFFFFH则已到文件尾 */
; } Locate; ; CMD_FileLocate, 移动当前文件指针 */
; struct {
; unsigned char mSectorCount; ; 输入参数: 读取扇区数, 返回: 实际读取扇区数 */
; } Read; ; CMD_FileRead, 从当前文件读取数据 */
; struct {
; unsigned char mSectorCount; ; 输入参数: 写入扇区数, 返回: 实际写入扇区数 */
; } Write; ; CMD_FileWrite, 向当前文件写入数据 */
; struct {
; unsigned long mDiskSizeSec; ; 返回: 整个物理磁盘的总扇区数 */
; } DiskSize; ; CMD_DiskSize, 查询磁盘容量 */
; struct {
; unsigned long mByteOffset; ; 输入参数: 以字节为单位的偏移量, 以字节为单位的文件指针, 返回: 当前文件指针对应的绝对线性扇区号, 0FFFFFFFFH则已到文件尾 */
; } ByteLocate; ; CMD_ByteLocate, 以字节为单位移动当前文件指针 */
; struct {
; unsigned char mByteCount; ; 输入参数: 准备读取的字节数,不得大于MAX_BYTE_IO, 返回: 实际读出的字节数 */
; unsigned char mByteBuffer[ MAX_BYTE_IO ]; ; 返回: 读出的数据块 */
; } ByteRead; ; CMD_ByteRead, 以字节为单位从当前文件读取数据块 */
; struct {
; unsigned char mByteCount; ; 输入参数: 准备写入的字节数,不得大于MAX_BYTE_IO,如果为0则刷新文件长度而不写入,如果不为0则写入数据但不刷新文件长度, 返回: 实际写入的字节数 */
; unsigned char mByteBuffer[ MAX_BYTE_IO ]; ; 输入参数: 准备写入的数据块 */
; } ByteWrite; ; CMD_ByteWrite, 以字节为单位向当前文件写入数据块 */
; union {
; struct {
; unsigned long mCBW_Sig;
; unsigned long mCBW_Tag;
; unsigned char mCBW_DataLen; ; 输入: 数据传输长度,有效值是0到255 */
; unsigned char mCBW_DataLen1;
; unsigned char mCBW_DataLen2;
; unsigned char mCBW_DataLen3;
; unsigned char mCBW_Flag; ; 输入: 传输方向等标志 */
; unsigned char mCBW_LUN;
; unsigned char mCBW_CB_Len; ; 输入: 命令块的长度,有效值是1到16 */
; unsigned char mCBW_CB_Buf[1]; ; 输入: 命令块,该缓冲区最多为16个字节 */
; } mCBW; ; BulkOnly协议的命令块, 输入CBW结构 */
; struct {
; unsigned long mCSW_Sig;
; unsigned long mCSW_Tag;
; unsigned long mCSW_Residue; ; 返回: 剩余数据长度 */
; unsigned char mCSW_Status; ; 返回: 命令执行结果状态 */
; unsigned char mReserved;
; } mCSW; ; BulkOnly协议的命令状态块, 输出CSW结构 */
; } BOC; ; CMD_BulkOnlyCmd, 执行基于BulkOnly协议的命令, 如果有数据传输那么数据在DISK_BASE_BUF中 */
; struct {
; unsigned char mPathName[ MAX_PATH_LEN ]; ; 输入参数: 路径: [盘符,冒号,斜杠,目录名或者文件名及扩展名...,结束符00H], 其中盘符和冒号可以省略, 例如"C:\DIR1.EXT\DIR2\FILENAME.EXT",00H */
; } DirCreate; ; CMD_DirCreate, 新建目录并打开,如果目录已经存在则直接打开 */
; struct {
; unsigned char mSectorCount; ; 返回: 实际读取扇区数,为1则已经读取最后扇区,为0则没有零碎数据(文件长度是512的倍数) */
; } ReadLast; ; CMD_FileReadLast, 从当前文件的尾部读取不足一个扇区长度的零碎数据 */
; struct {
; unsigned char mAccessMode; ; 输入: 存取方式, 0=读取文件目录信息,0F0H=写入/更新文件目录信息,其它值无效 */
; unsigned char mReserved[3];
; struct { ; 该结构中的成员输入输出必须都是小端格式,如果外部单片机是大端格式,那么需要自行处理大小端格式转换 */
; unsigned char DIR_Name[11]; ; 00H,文件名,共11字节,不足处填空格 */
; unsigned char DIR_Attr; ; 0BH,文件属性,参考下面的说明 */
; bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7 */
; 只读 隐藏 系统 卷标 目录 存档 未定义 */
; unsigned char DIR_NTRes; ; 0CH */
; unsigned char DIR_CrtTimeTenth; ; 0DH,文件创建的时间,以0.1秒单位计数 */
; unsigned short DIR_CrtTime; ; 0EH,文件创建的时间,参考前面的宏MAKE_FILE_TIME,小端格式 */
; unsigned short DIR_CrtDate; ; 10H,文件创建的日期,参考前面的宏MAKE_FILE_DATE,小端格式 */
; unsigned short DIR_LstAccDate; ; 12H,最近一次存取操作的日期,参考前面的宏MAKE_FILE_DATE,小端格式 */
; unsigned short DIR_FstClusHI; ; 14H */
; unsigned short DIR_WrtTime; ; 16H,文件修改时间,参考下面的说明和前面的宏MAKE_FILE_TIME,小端格式 */
; 文件时间 UINT16: Time = (Hour<<11) + (Minute<<5) + (Second>>1) */
; unsigned short DIR_WrtDate; ; 18H,文件修改日期,参考下面的说明和前面的宏MAKE_FILE_DATE,小端格式 */
; 文件日期 UINT16: Date = ((Year-1980)<<9) + (Month<<5) + Day */
; unsigned short DIR_FstClusLO; ; 1AH */
; unsigned long DIR_FileSize; ; 1CH,文件长度,小端格式 */
; } mDir; ; 20H */
; } FileDirInfo; ; CMD_FileDirInfo, 存取当前已打开文件的目录信息 */
; struct {
; unsigned char mLastStatus; ; 返回: 上次的操作状态 */
; unsigned char mDiskStatus; ; 返回: 磁盘及文件状态 */
; unsigned char mIntStatus; ; 返回: CH375操作的中断状态 */
; unsigned char reserved;
; unsigned long mFileSize; ; 返回: 当前文件的长度 */
; unsigned long mCurrentOffset; ; 返回: 当前文件指针,当前读写位置的字节偏移 */
; } Status; ; CMD_QueryStatus, 查询当前模块的状态 */
; struct {
; unsigned long mFileSize; ; 输入: 指定新的文件长度变量,只修改子程序库的变量,只在更新文件长度后影响实际文件长度 */
; } SetFileSize; ; CMD_SetFileSize, 修改模块系统内子程序库的文件长度变量 */
; struct {
; unsigned char mFileLibVer; ; 返回: 子程序库的版本号 */
; unsigned char mModuleVer; ; 返回: 模块的版本号 */
; unsigned char mUsbIcVer; ; 返回: USB芯片版本:10H-CH375S,2xH-CH375A */
; } GetVer; ; CMD_GetVer, 获取当前模块的版本号 */
; struct {
; unsigned char mDivisor; ; 输入参数: 通讯波特率除数 */
; } BaudRate; ; CMD_BaudRate, 设置串口通讯波特率 */
; struct {
; unsigned char mSetup; ; 输入参数: 模块配置值 */
; 位7位6: 数据字节顺序: 00-保持当前格式, 01-设置小端格式LITTLE_ENDIAN, 10-设置大端格式BIG_ENDIAN, 11-保留/保持当前格式 */
; 位4: 向文件写入数据后自动更新文件长度(设置CH375LibConfig的位4):0禁止,1允许 */
; 位0: 空闲时查询U盘连接状态并自动中断通知:0禁止,1允许 */
; } Setup; ; CMD_SetupModule, 设置模块配置 */
; struct {
; unsigned char mData; ; 输入参数或者返回: 字节数据 */
; } Direct; ; CMD_DirectWrCmd, 直接传递给CH375,写命令; CMD_DirectRdDat, 直接传递给CH375,读数据; CMD_DirectWrDat, 直接传递给CH375,写数据 */
; struct {
; unsigned char mStringSN[16]; ; 返回: 产品序列号字符串 */
; } GetSN; ; CMD_GetStringSN, 获取产品序列号字符串 */
; struct {
; unsigned char mVidLow; ; 输入参数: 厂商ID低字节 */
; unsigned char mVidHigh; ; 输入参数: 厂商ID高字节 */
; unsigned char mPidLow; ; 输入参数: 产品ID低字节 */
; unsigned char mPidHigh; ; 输入参数: 产品ID高字节 */
; } SetUsbId; ; CMD_SetUsbId, USB设备模式: 设置USB设备的厂商VID和产品PID */
; struct {
; unsigned char mUsbMode; ; 输入参数: 工作模式代码, 0=空闲, 2=USB设备模式, 6=USB主机模式 */
; } SetUsbMode; ; CMD_SetUsbMode, USB设备模式: 设置USB主机/设备工作模式,只支持串口 */
; struct {
; unsigned char mByteCount; ; 返回: 读出的字节数 */
; unsigned char mByteBuffer[ MAX_BYTE_IO ]; ; 返回: 读出的数据块 */
; } ReadUsbData; ; CMD_ReadUsbData, USB设备模式: 从模块的数据下传端点读取数据块 */
; struct {
; unsigned char mByteCount; ; 输入参数: 准备写入的字节数,不得大于MAX_BYTE_IO,不得大于CH375_MAX_DATA_LEN */
; unsigned char mByteBuffer[ MAX_BYTE_IO ]; ; 输入参数: 准备写入的数据块 */
; } WriteUsbData; ; CMD_WriteUsbData, USB设备模式: 向模块的数据上传端点写入数据块 */
;} CMD_PARAM;
;
; ********************************************************************************************************************* */
; 并口CH421A芯片的空间定义 */
PARA_COMMAND_ADDR EQU 0x40 ; 命令码的单元地址,该单元为操作命令码,该单元由单片机在操作前设置,由模块在操作完成后清除,查询该单元可代替查询INT#引脚 */
PARA_STATUS_ADDR EQU 0x41 ; 状态码的单元地址,该单元为操作结果状态码 */
PARA_CMD_LEN_ADDR EQU 0x42 ; 命令包长度的单元地址,该单元低7位为后续参数的长度,最高位用于通知模块,为1则激活/继续,为0则结束/应答 */
PARA_STS_LEN_ADDR EQU 0x43 ; 状态包长度的单元地址,该单元低7位为后续参数的长度 */
PARA_CMD_BIT_ACT EQU 0x80 ; 命令包长度的最高位,用于通知模块,激活/继续 */
PARA_CMD_BIT_INACT EQU 0x00 ; 命令包长度的最高位,用于通知模块,结束/应答 */
PARA_BUFFER_ADDR EQU 0x00 ; 后续参数的起始单元地址,从该单元开始的64个字节为数据缓冲区 */
; ********************************************************************************************************************* */
; 三线串口的命令同步,用两个串口同步码代替STA#引脚的下降沿进行命令码同步 */
SER_SYNC_CODE1 EQU 057H ; 启动操作的第1个串口同步码 */
SER_SYNC_CODE2 EQU 0ABH ; 启动操作的第2个串口同步码 */
; ********************************************************************************************************************* */
; 数据流模式读写文件,只支持串口,只支持文本,默认文件名是"/模块数据.TXT" */
SER_STREAM_END EQU 01AH ; 数据流模式文件读写:结束 */
SER_STREAM_ERROR EQU 015H ; 数据流模式文件读写:错误 */
SER_STREAM_ACK EQU 006H ; 数据流模式文件读写:应答 */
SER_STREAM_FLUSH EQU 000H ; 数据流模式文件读写:刷新 */
; ********************************************************************************************************************* */
; 模块的预设说明,用于功能配置 */
; 程序空间3F00H开始的4个字节必须是"$HMS",说明下面的预设参数有效 */
; 程序空间3F08H字节是工作模式: */
; 位7: 数据字节顺序: 0-小端LITTLE_ENDIAN,1-大端BIG_ENDIAN */
; 位6: 保留,必须为0 */
; 位5: 空闲时查询U盘连接状态并自动中断通知:0禁止,1允许 */
; 位4: 向文件写入数据后自动更新文件长度:0禁止,1允许 */
; 位3: 保留,必须为0 */
; 位2: 看门狗使能/串口超时使能: 0-禁止超时检查, 1-允许超时检查 */
; 位1位0: 接口方式: 00-8位并口, 01-专用接口/定制I2C或SPI等,10-4+1线制串口,11-3线制串口 */
; 程序空间3F09H字节是串口通讯波特率除数 */
; 程序空间3F10H开始的16个字节是产品序列号字符串 */
; ********************************************************************************************************************* */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -