⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch375hf(4).h

📁 USB 1.1 U Device for CH375 & USB 2.0 for CH375A 读写usb超精简的程序
💻 H
📖 第 1 页 / 共 5 页
字号:
#define	CMD_SetupModule			0xA6	/* 设置模块配置 */
#define	CMD_DirectWrCmd			0xB9	/* 直接传递给CH375,写命令 */
#define	CMD_DirectRdDat			0xB5	/* 直接传递给CH375,读数据 */
#define	CMD_DirectWrDat			0xB6	/* 直接传递给CH375,写数据 */
#define	CMD_GetStringSN			0xA0	/* 获取产品序列号字符串 */

//-------------------------------------------------------------------------------------------------
// 外部命令参数 
//-------------------------------------------------------------------------------------------------
// 
typedef union _CMD_PARAM {
	struct {
		UINT8	mBuffer[ MAX_PATH_LEN ];
	} Other;
	struct {
		UINT32	mDiskSizeSec;			/* 返回: 整个物理磁盘的总扇区数 */
		UINT32	mTotalSector;			/* 返回: 当前逻辑盘的总扇区数 */
		UINT32	mFreeSector;			/* 返回: 当前逻辑盘的剩余扇区数 */
		UINT8	mDiskFat;				/* 返回: 当前逻辑盘的FAT类型 */
	} Query;							/* CMD_DiskQuery, 查询磁盘信息 */
	struct {
		UINT8	mPathName[ MAX_PATH_LEN ];	/* 输入参数: 路径: [盘符,冒号,斜杠,目录名或者文件名及扩展名...,结束符00H], 其中盘符和冒号可以省略, 例如"C:\DIR1.EXT\DIR2\FILENAME.EXT",00H */
	} Open;								/* CMD_FileOpen, 打开文件 */
	struct {
		UINT8	mPathName[ MAX_PATH_LEN ];	/* 输入参数: 路径: [盘符,冒号,斜杠,目录名或者文件名及扩展名(含通配符*)...,枚举序号], 其中盘符和冒号可以省略, 例如"C:\DIR1.EXT\DIR2\FILE*",00H */
	} Enumer;							/* CMD_FileEnumer, 枚举文件,返回文件名 */
	struct {
		UINT8	mUpdateLen;				/* 输入参数: 是否允许更新长度: 0禁止,1允许 */
	} Close;							/* CMD_FileClose, 关闭当前文件 */
	struct {
		UINT8	mPathName[ MAX_PATH_LEN ];	/* 输入参数: 路径: [盘符,冒号,斜杠,目录名或者文件名及扩展名...,结束符00H], 其中盘符和冒号可以省略, 例如"C:\DIR1.EXT\DIR2\FILENAME.EXT",00H */
	} Create;							/* CMD_FileCreate, 新建文件并打开,如果文件已经存在则先删除后再新建 */
	struct {
		UINT8	mPathName[ MAX_PATH_LEN ];	/* 输入参数: 路径: [盘符,冒号,斜杠,目录名或者文件名及扩展名...,结束符00H], 其中盘符和冒号可以省略, 例如"C:\DIR1.EXT\DIR2\FILENAME.EXT",00H */
	} Erase;							/* CMD_FileErase, 删除文件并关闭 */
	struct {
		UINT32	mFileSize;				/* 输入参数: 新的文件长度,为0FFFFFFFFH则不修改, 返回: 原长度 */
		UINT16	mFileDate;				/* 输入参数: 新的文件日期,为0FFFFH则不修改, 返回: 原日期 */
		UINT16	mFileTime;				/* 输入参数: 新的文件时间,为0FFFFH则不修改, 返回: 原时间 */
		UINT8	mFileAttr;				/* 输入参数: 新的文件属性,为0FFH则不修改, 返回: 原属性 */
	} Modify;							/* CMD_FileQuery, 查询当前文件的信息; CMD_FileModify, 查询或者修改当前文件的信息 */
	struct {
		UINT32	mSectorOffset;			/* 输入参数: 扇区偏移,0则移动到文件头,0FFFFFFFFH则移动到文件尾, 返回: 当前文件指针对应的绝对线性扇区号, 0FFFFFFFFH则已到文件尾 */
	} Locate;							/* CMD_FileLocate, 移动当前文件指针 */
	struct {
		UINT8	mSectorCount;			/* 输入参数: 读取扇区数, 返回: 实际读取扇区数 */
	} Read;								/* CMD_FileRead, 从当前文件读取数据 */
	struct {
		UINT8	mSectorCount;			/* 输入参数: 写入扇区数, 返回: 实际写入扇区数 */
	} Write;							/* CMD_FileWrite, 向当前文件写入数据 */
	struct {
		UINT8	mSectorCount;			/* 输入参数: 读取扇区数, 返回: 实际读取扇区数 */
		UINT8	mReserved[7];
		PUINT8X	mDataBuffer;			/* 输入参数: 缓冲区起始地址, 返回: 缓冲区当前地址 */
	} ReadX;							/* CMD_FileReadX, 从当前文件读取数据到指定缓冲区 */
	struct {
		UINT8	mSectorCount;			/* 输入参数: 写入扇区数, 返回: 实际写入扇区数 */
		UINT8	mReserved[7];
		PUINT8X	mDataBuffer;			/* 输入参数: 缓冲区起始地址, 返回: 缓冲区当前地址 */
	} WriteX;							/* CMD_FileWriteX, 向当前文件写入指定缓冲区的数据 */
	struct {
		UINT32	mDiskSizeSec;			/* 返回: 整个物理磁盘的总扇区数 */
	} DiskSize;							/* CMD_DiskSize, 查询磁盘容量 */
	struct {
		UINT32	mByteOffset;			/* 输入参数: 以字节为单位的偏移量, 以字节为单位的文件指针, 返回: 当前文件指针对应的绝对线性扇区号, 0FFFFFFFFH则已到文件尾 */
	} ByteLocate;						/* CMD_ByteLocate, 以字节为单位移动当前文件指针 */
	struct {
		UINT8	mByteCount;				/* 输入参数: 准备读取的字节数,不得大于MAX_BYTE_IO, 返回: 实际读出的字节数 */
		UINT8	mByteBuffer[ MAX_BYTE_IO ];	/* 返回: 读出的数据块 */
	} ByteRead;							/* CMD_ByteRead, 以字节为单位从当前文件读取数据块 */
	struct {
		UINT8	mByteCount;				/* 输入参数: 准备写入的字节数,不得大于MAX_BYTE_IO, 返回: 实际写入的字节数 */
		UINT8	mByteBuffer[ MAX_BYTE_IO ];	/* 输入参数: 准备写入的数据块 */
	} ByteWrite;						/* CMD_ByteWrite, 以字节为单位向当前文件写入数据块 */
	union {
		struct {
			UINT32	mCBW_Sig;
			UINT32	mCBW_Tag;
			UINT8	mCBW_DataLen;		/* 输入: 数据传输长度,有效值是0到255 */
			UINT8	mCBW_DataLen1;
			UINT8	mCBW_DataLen2;
			UINT8	mCBW_DataLen3;
			UINT8	mCBW_Flag;			/* 输入: 传输方向等标志 */
			UINT8	mCBW_LUN;
			UINT8	mCBW_CB_Len;		/* 输入: 命令块的长度,有效值是1到16 */
			UINT8	mCBW_CB_Buf[6];		/* 输入: 命令块,该缓冲区最多为16个字节 */
		} mCBW;							/* BulkOnly协议的命令块, 输入CBW结构 */
		struct {
			UINT32	mCSW_Sig;
			UINT32	mCSW_Tag;
			UINT32	mCSW_Residue;		/* 返回: 剩余数据长度 */
			UINT8	mCSW_Status;		/* 返回: 命令执行结果状态 */
			UINT8	mReserved;
		} mCSW;							/* BulkOnly协议的命令状态块, 输出CSW结构 */
	} BOC;								/* CMD_BulkOnlyCmd, 执行基于BulkOnly协议的命令, 如果有数据传输那么数据在DISK_BASE_BUF中 */
	//-------------------------------------------
	// 以下为 CH375HM.H(U盘文件读写模块) 中的参数 
	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;

//-------------------------------------------------------------------------------------------------
// 
typedef CMD_PARAM idata CMD_PARAM_I;
typedef CMD_PARAM data *P_CMD_PARAM;

//=================================================================================================
// 以下为 CH375HM.H(U盘文件读写模块) 中的参数 
//=================================================================================================
// 
// 三线串口的命令同步,用两个串口同步码代替STA#引脚的下降沿进行命令码同步 
#define	SER_SYNC_CODE1			0x57	// 启动操作的第1个串口同步码 
#define	SER_SYNC_CODE2			0xAB	// 启动操作的第2个串口同步码 

// 数据流模式读写文件,只支持串口,只支持文本,默认文件名是"/模块数据.TXT" 
#define	SER_STREAM_END			0x1A	// 数据流模式文件读写:结束 
#define	SER_STREAM_ERROR		0x15	// 数据流模式文件读写:错误 
#define	SER_STREAM_ACK			0x06	// 数据流模式文件读写:应答 
#define	SER_STREAM_FLUSH		0x00	// 数据流模式文件读写:刷新 

// 模块的预设说明,用于功能配置 
// 程序空间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-保留,10-4+1线制串口,11-3线制串口 
// 程序空间3F09H字节是串口通讯波特率除数 
// 程序空间3F10H开始的16个字节是产品序列号字符串 

//----------------------------------------------------------------------------------------------------------------
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//----------------------------------------------------------------------------------------------------------------

//****************************************************************************************************************
//****************************************************************************************************************
//----------------------------------------------------------------------------------------------------------------
// FILE: CH375HF.C 
//----------------------------------------------------------------------------------------------------------------
//****************************************************************************************************************
//****************************************************************************************************************
// 
//-------------------------------------------------------------------------------------------------
// 子程序库默认配置 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -