主要包含4个C文件和和三个头文件CH376INC.H与CH376HFT.C为u盘主文件SPI_SW.C为对硬件操作文件单片机与SPI接口FILE_SYS.H与FILE_SYS.C为ch376接口函数分别列出CH376INC.H文件:/*CDefineforCH376*//*Website:*//*Email:tech@wch.cn*//*Author:W.ch2008.10*//*V1.0forCH376*/#ifndef__CH376INC_H__#define__CH376INC_H__#ifdef__cplusplusexternC{#endif/***********************************************************************************************************************//*常用类型和常量定义*/#ifndefTRUE#defineTRUE1#defineFALSE0#endif#ifndefNULL#defineNULL0#endif#ifndefUINT8typedefunsignedcharUINT8;#endif#ifndefUINT16typedefunsignedshortUINT16;#endif#ifndefUINT32typedefunsignedlongUINT32;#endif#ifndefPUINT8typedefunsignedchar*PUINT8;#endif#ifndefPUINT16typedefunsignedshort*PUINT16;#endif#ifndefPUINT32typedefunsignedlong*PUINT32;#endif#ifndefUINT8VtypedefunsignedcharvolatileUINT8V;#endif#ifndefPUINT8Vtypedefunsignedcharvolatile*PUINT8V;#endif/***********************************************************************************************************************//*硬件特性*/#defineCH376_DAT_BLOCK_LEN0x40/*USB单个数据包,数据块的最大长度,默认缓冲区的长度*//***********************************************************************************************************************//*命令代码*//*部分命令兼容CH375芯片,但是输入数据或者输出数据的可能局部不同)*//*一个命令操作顺序包含:一个命令码(对于串口方式,命令码之前还需要两个同步码),若干个输入数据(可以是0个),产生中断通知或者若干个输出数据(可以是0个),二选一,有中断通知则一定没有输出数据,有输出数据则一定不产生中断仅CMD01_WR_REQ_DATA命令例外,顺序包含:一个命令码,一个输出数据,若干个输入数据命令码起名规则:CMDxy_NAME其中的x和y都是数字,x说明最少输入数据个数(字节数),y说明最少输出数据个数(字节数),y如果是H则说明产生中断通知,有些命令能够实现0到多个字节的数据块读写,数据块本身的字节数未包含在上述x或y之内*//*本文件默认会同时提供与CH375芯片命令码兼容的命令码格式(即去掉x和y之后),如果不需要,那么可以定义_NO_CH375_COMPATIBLE_禁止*//***********************************************************************************************************************//*主要命令(手册一),常用*/#defineCMD01_GET_IC_VER0x01/*获取芯片及固件版本*//*输出:版本号(位7为0,位6为1,位5~位0为版本号)*//*CH376返回版本号的值为041H即版本号为01H*/#defineCMD21_SET_BAUDRATE0x02/*串口方式:设置串口通讯波特率(上电或者复位后的默认波特率为9600bps,由D4/D5/D6引脚选择)*//*输入:波特率分频系数,波特率分频常数*//*输出:操作状态(CMD_RET_SUCCESS或CMD_RET_ABORT,其它值说明操作未完成)*/#defineCMD00_ENTER_SLEEP0x03/*进入睡眠状态*/#defineCMD00_RESET_ALL0x05/*执行硬件复位*/#defineCMD11_CHECK_EXIST0x06/*测试通讯接口和工作状态*//*输入:任意数据*//*输出:输入数据的按位取反*/#defineCMD20_CHK_SUSPEND0x0B/*设备方式:设置检查USB总线挂起状态的方式*//*输入:数据10H,检查方式*//*00H=不检查USB挂起,04H=以50mS为间隔检查USB挂起,05H=以10mS为间隔检查USB挂起*/#defineCMD20_SET_SDO_INT0x0B/*SPI接口方式:设置SPI的SDO引脚的中断方式*//*输入:数据16H,中断方式*//*10H=禁止SDO引脚用于中断输出,在SCS片选无效时三态输出禁止,90H=SDO引脚在SCS片选无效时兼做中断请求输出*/#defineCMD14_GET_FILE_SIZE0x0C/*主机文件模式:获取当前文件长度*//*输入:数据68H*//*输出:当前文件长度(总长度32位,低字节在前)*/#defineCMD50_SET_FILE_SIZE0x0D/*主机文件模式:设置当前文件长度*//*输入:数据68H,当前文件长度(总长度32位,低字节在前)*/#defineCMD11_SET_USB_MODE0x15/*设置USB工作模式*//*输入:模式代码*//*00H=未启用的设备方式,01H=已启用的设备方式并且使用外部固件模式(串口不支持),02H=已启用的设备方式并且使用内置固件模式*//*03H=SD卡主机模式/未启用的主机模式,用于管理和存取SD卡中的文件*//*04H=未启用的主机方式,05H=已启用的主机方式,06H=已启用的主机方式并且自动产生SOF包,07H=已启用的主机方式并且复位USB总线*//*输出:操作状态(CMD_RET_SUCCESS或CMD_RET_ABORT,其它值说明操作未完成)*/#defineCMD01_GET_STATUS0x22/*获取中断状态并取消中断请求*//*输出:中断状态*/#defineCMD00_UNLOCK_USB0x23/*设备方式:释放当前USB缓冲区*/#defineCMD01_RD_USB_DATA00x27/*从当前USB中断的端点缓冲区或者主机端点的接收缓冲区读取数据块*//*输出:长度,数据流*/#defineCMD01_RD_USB_DATA0x28/*设备方式:从当前USB中断的端点缓冲区读取数据块,并释放缓冲区,相当于CMD01_RD_USB_DATA0+CMD00_UNLOCK_USB*//*输出:长度,数据流*/#defineCMD10_WR_USB_DATA70x2B/*设备方式:向USB端点2的发送缓冲区写入数据块*//*输入:长度,数据流*/#defineCMD10_WR_HOST_DATA0x2C/*向USB主机端点的发送缓冲区写入数据块*//*输入:长度,数据流*/#defineCMD01_WR_REQ_DATA0x2D/*向内部指定缓冲区写入请求的数据块*//*输出:长度*//*输入:数据流*/#defineCMD20_WR_OFS_DATA0x2E/*向内部缓冲区指定偏移地址写入数据块*//*输入:偏移,长度,数据流*/#defineCMD10_SET_FILE_NAME0x2F/*主机文件模式:设置将要操作的文件的文件名*//*输入:以0结束的字符串(含结束符0在内长度不超过14个字符)*//***********************************************************************************************************************//*主要命令(手册一),常用,以下命令总是在操作结束时产生中断通知,并且总是没有输出数据*/#defineCMD0H_DISK_CONNECT0x30/*主机文件模式/不支持SD卡:检查磁盘是否连接*//*输出中断*/#defineCMD0H_DISK_MOUNT0x31/*主机文件模式:初始化磁盘并测试磁盘是否就绪*//*输出中断*/#defineCMD0H_FILE_OPEN0x32/*主机文件模式:打开文件或者目录(文件夹),或者枚举文件和目录(文件夹)*//*输出中断*/#defineCMD0H_FILE_ENUM_GO0x33/*主机文件模式:继续枚举文件和目录(文件夹)*//*输出中断*/#defineCMD0H_FILE_CREATE0x34/*主机文件模式:新建文件,如果文件已经存在那么先删除*//*输出中断*/#defineCMD0H_FILE_ERASE0x35/*主机文件模式:删除文件,如果已经打开则直接删除,否则对于文件会先打开再删除,子目录必须先打开*//*输出中断*/#defineCMD1H_FILE_CLOSE0x36/*主机文件模式:关闭当前已经打开的文件或者目录(文件夹)*//*输入:是否允许更新文件长度*//*00H=禁止更新长度,01H=允许更新长度*//*输出中断*/#defineCMD1H_DIR_INFO_READ0x37/*主机文件模式:读取文件的目录信息*//*输入:指定需要读取的目录信息结构在扇区内的索引号*//*索引号范围为00H~0FH,索引号0FFH则为当前已经打开的文件*//*输出中断*/#defineCMD0H_DIR_INFO_SAVE0x38/*主机文件模式:保存文件的目录信息*//*输出中断*/#defineCMD4H_BYTE_LOCATE0x39/*主机文件模式:以字节为单位移动当前文件指针*//*输入:偏移字节数(总长度32位,低字节在前)*//*输出中断*/#defineCMD2H_BYTE_READ0x3A/*主机文件模式:以字节为单位从当前位置读取数据块*//*输入:请求读取的字节数(总长度16位,低字节在前)*//*输出中断*/#defineCMD0H_BYTE_RD_GO0x3B/*主机文件模式:继续字节读*//*输出中断*/#defineCMD2H_BYTE_WRITE0x3C/*主机文件模式:以字节为单位向当前位置写入数据块*//*输入:请求写入的字节数(总长度16位,低字节在前)*//*输出中断*/#defineCMD0H_BYTE_WR_GO0x3D/*主机文件模式:继续字节写*//*输出中断*/#defineCMD0H_DISK_CAPACITY0x3E/*主机文件模式:查询磁盘物理容量*//*输出中断*/#defineCMD0H_DISK_QUERY0x3F/*主机文件模式:查询磁盘空间信息*//*输出中断*/#defineCMD0H_DIR_CREATE0x40/*主机文件模式:新建目录(文件夹)并打开,如果目录已经存在那么直接打开*//*输出中断*/#defineCMD4H_SEC_LOCATE0x4A/*主机文件模式:以扇区为单位移动当前文件指针*//*输入:偏移扇区数(总长度32位,低字节在前)*