u盘读写控制源程序ch376芯片之欧阳法创编.docx

上传人:b****6 文档编号:5822983 上传时间:2023-01-01 格式:DOCX 页数:76 大小:47.63KB
下载 相关 举报
u盘读写控制源程序ch376芯片之欧阳法创编.docx_第1页
第1页 / 共76页
u盘读写控制源程序ch376芯片之欧阳法创编.docx_第2页
第2页 / 共76页
u盘读写控制源程序ch376芯片之欧阳法创编.docx_第3页
第3页 / 共76页
u盘读写控制源程序ch376芯片之欧阳法创编.docx_第4页
第4页 / 共76页
u盘读写控制源程序ch376芯片之欧阳法创编.docx_第5页
第5页 / 共76页
点击查看更多>>
下载资源
资源描述

u盘读写控制源程序ch376芯片之欧阳法创编.docx

《u盘读写控制源程序ch376芯片之欧阳法创编.docx》由会员分享,可在线阅读,更多相关《u盘读写控制源程序ch376芯片之欧阳法创编.docx(76页珍藏版)》请在冰豆网上搜索。

u盘读写控制源程序ch376芯片之欧阳法创编.docx

u盘读写控制源程序ch376芯片之欧阳法创编

主要包含4个C文件和和三个头文件

时间:

2021.03.09

创作:

欧阳法

CH376INC.H与CH376HFT.C为u盘主文件

SPI_SW.C为对硬件操作文件单片机与SPI接口

FILE_SYS.H与FILE_SYS.C为ch376接口函数

分别列出

CH376INC.H文件:

/*CDefineforCH376*/

/*Website:

*/

/*Email:

tech@*/

/*Author:

W.ch.10*/

/*V1.0forCH376*/

#ifndef__CH376INC_H__

#define__CH376INC_H__

#ifdef__cplusplus

extern"C"{

#endif

/***********************************************************************************************************************/

/*常用类型和常量定义*/

#ifndefTRUE

#defineTRUE1

#defineFALSE0

#endif

#ifndefNULL

#defineNULL0

#endif

#ifndefUINT8

typedefunsignedcharUINT8;

#endif

#ifndefUINT16

typedefunsignedshortUINT16;

#endif

#ifndefUINT32

typedefunsignedlongUINT32;

#endif

#ifndefPUINT8

typedefunsignedchar*PUINT8;

#endif

#ifndefPUINT16

typedefunsignedshort*PUINT16;

#endif

#ifndefPUINT32

typedefunsignedlong*PUINT32;

#endif

#ifndefUINT8V

typedefunsignedcharvolatileUINT8V;

#endif

#ifndefPUINT8V

typedefunsignedcharvolatile*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位,低字节在前)*/

/*输出中断*/

#defineCMD1H_SEC_READ0x4B/*主机文件模式/不支持SD卡:

以扇区为单位从当前位置读取数据块*/

/*输入:

请求读取的扇区数*/

/*输出中断*/

#defineCMD1H_SEC_WRITE0x4C/*主机文件模式/不支持SD卡:

以扇区为单位在当前位置写入数据块*/

/*输入:

请求写入的扇区数*/

/*输出中断*/

#defineCMD0H_DISK_BOC_CMD0x50/*主机方式/不支持SD卡:

对USB存储器执行BulkOnly传输协议的命令*/

/*输出中断*/

#defineCMD5H_DISK_READ0x54/*主机方式/不支持SD卡:

从USB存储器读物理扇区*/

/*输入:

LBA物理扇区地址(总长度32位,低字节在前),扇区数(01H~FFH)*/

/*输出中断*/

#defineCMD0H_DISK_RD_GO0x55/*主机方式/不支持SD卡:

继续执行USB存储器的物理扇区读操作*/

/*输出中断*/

#defineCMD5H_DISK_WRITE0x56/*主机方式/不支持SD卡:

向USB存储器写物理扇区*/

/*输入:

LBA物理扇区地址(总长度32位,低字节在前),扇区数(01H~FFH)*/

/*输出中断*/

#defineCMD0H_DISK_WR_GO0x57/*主机方式/不支持SD卡:

继续执行USB存储器的物理扇区写操作*/

/*输出中断*/

/***********************************************************************************************************************/

/*辅助命令(手册二),不太常用或者是为了与CH375和CH372兼容*/

#defineCMD10_SET_USB_SPEED0x04/*设置USB总线速度,在每次CMD11_SET_USB_MODE设置USB工作模式时会自动恢复到12Mbps全速*/

/*输入:

总线速度代码*/

/*00H=12Mbps全速FullSpeed(默认值),01H=1.5Mbps(仅修改频率),02H=1.5Mbps低速LowSpeed*/

#defineCMD11_GET_DEV_RATE0x0A/*主机方式:

获取当前连接的USB设备的数据速率类型*/

/*输入:

数据07H*/

/*输出:

数据速率类型*/

/*位4为1则是1.5Mbps低速USB设备,否则是12Mbps全速USB设备*/

#defineCMD11_GET_TOGGLE0x0A/*获取OUT事务的同步状态*/

/*输入:

数据1AH*/

/*输出:

同步状态*/

/*位4为1则OUT事务同步,否则OUT事务不同步*/

#defineCMD11_READ_VAR80x0A/*读取指定的8位文件系统变量*/

/*输入:

变量地址*/

/*输出:

数据*/

/*#defineCMD11_GET_MAX_LUN=CMD11_READ_VAR8(VAR_UDISK_LUN)*//*主机方式:

获取USB存储器最大和当前逻辑单元号*/

#defineCMD20_SET_RETRY0x0B/*主机方式:

设置USB事务操作的重试次数*/

/*输入:

数据25H,重试次数*/

/*位7为0则收到NAK时不重试,位7为1位6为0则收到NAK时无限重试,位7为1位6为1则收到NAK时最多重试3秒,位5~位0为超时后的重试次数*/

#defineCMD20_WRITE_VAR80x0B/*设置指定的8位文件系统变量*/

/*输入:

变量地址,数据*/

/*#defineCMD20_SET_DISK_LUN=CMD20_WRITE_VAR8(VAR_UDISK_LUN)*//*主机方式:

设置USB存储器的当前逻辑单元号*/

#defineCMD14_READ_VAR320x0C/*读取指定的32位文件系统变量*/

/*输入:

变量地址*/

/*输出:

数据(总长度32位,低字节在前)*/

#defineCMD50_WRITE_VAR320x0D/*设置指定的32位文件系统变量*/

/*输入:

变量地址,数据(总长度32位,低字节在前)*/

#defineCMD01_DELAY_100US0x0F/*延时100uS(串口不支持)*/

/*输出:

延时期间输出0,延时结束输出非0*/

#defineCMD40_SET_USB_ID0x12/*设备方式:

设置USB厂商VID和产品PID*/

/*输入:

厂商ID低字节,厂商ID高字节,产品ID低字节,产品ID高字节*/

#defineCMD10_SET_USB_ADDR0x13/*设置USB地址*/

/*输入:

地址值*/

#defineCMD01_TEST_CONNECT0x16/*主机方式/不支持SD卡:

检查USB设备连接状态*/

/*输出:

状态(USB_INT_CONNECT或USB_INT_DISCONNECT或USB_INT_USB_READY,其它值说明操作未完成)*/

#defineCMD00_ABORT_NAK0x17/*主机方式:

放弃当前NAK的重试*/

#defineCMD10_SET_ENDP20x18/*设备方式(串口不支持):

设置USB端点0的接收器*/

/*输入:

工作方式*/

/*位7为1则位6为同步触发位,否则同步触发位不变*/

/*位3~位0为事务响应方式:

0000就绪ACK,1110正忙NAK,1111错误STALL*/

#defineCMD10_SET_ENDP30x19/*设备方式(串口不支持):

设置USB端点0的发送器*/

/*输入:

工作方式*/

/*位7为1则位6为同步触发位,否则同步触发位不变*/

/*位3~位0为事务响应方式:

0000~1000就绪ACK,1110正忙NAK,1111错误STALL*/

#defineCMD10_SET_ENDP40x1A/*设备方式(串口不支持):

设置USB端点1的接收器*/

/*输入:

工作方式*/

/*位7为1则位6为同步触发位,否则同步触发位不变*/

/*位3~位0为事务响应方式:

0000就绪ACK,1110正忙NAK,1111错误STALL*/

#defineCMD10_SET_ENDP50x1B/*设备方式(串口不支持):

设置USB端点1的发送器*/

/*输入:

工作方式*/

/*位7为1则位6为同步触发位,否则同步触发位不变*/

/*位3~位0为事务响应方式:

0000~1000就绪ACK,1110正忙NAK,1111错误STALL*/

#defineCMD10_SET_ENDP60x1C/*设置USB端点2/主机端点的接收器*/

/*输入:

工作方式*/

/*位7为1则位6为同步触发位,否则同步触发位不变*/

/*位3~位0为事务响应方式:

0000就绪ACK,1101就绪但不返回ACK,1110正忙NAK,1111错误STALL*/

#defineCMD10_SET_ENDP70x1D/*设置USB端点2/主机端点的发送器*/

/*输入:

工作方式*/

/*位7为1则位6为同步触发位,否则同步触发位不变*/

/*位3~位0为事务响应方式:

0000就绪ACK,1101就绪但无须应答,1110正忙NAK,1111错误STALL*/

#defineCMD00_DIRTY_BUFFER0x25/*主机文件模式:

清除内部的磁盘和文件缓冲区*/

#defineCMD10_WR_USB_DATA30x29/*设备方式(串口不支持):

向USB端点0的发送缓冲区写入数据块*/

/*输入:

长度,数据流*/

#defineCMD10_WR_USB_DATA50x2A/*设备方式(串口不支持):

向USB端点1的发送缓冲区写入数据块*/

/*输入:

长度,数据流*/

/***********************************************************************************************************************/

/*辅助命令(手册二),不太常用或者是为了与CH375和CH372兼容,以下命令总是在操作结束时产生中断通知,并且总是没有输出数据*/

#defineCMD1H_CLR_STALL0x41/*主机方式:

控制传输清除端点错误

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 思想汇报心得体会

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1