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

📄 udisk.h

📁 AVR单片机平台Atmega32+CH375A芯片读写U盘代码
💻 H
字号:
#define uchar unsigned char
#define UINT8 unsigned char
#define ulong unsigned long
#define uint  unsigned int


#define SLAVE_ADDR 0x60

//主机向模块发送的指令码
#define R_UDISK_READY  0x80    //查询优盘是否准备好
#define R_DEL_FILE     0x81    //删除文件
#define R_OPEN_FILE    0x83    //打开文件
#define R_SET_OFFSETBYTE   0x84 //设置文件指针
#define R_RD_FILE_DATA 0x85     //读取文件内容
#define R_WR_FILE_DATA 0x86     //写入文件内容
#define R_RD_FILE_ATTR 0x87     //读取文件属性
#define R_CLOSEFILE    0x88     //关闭文件
#define R_NEW_FILE     0x89     //新建文件
#define R_RD_DISK_ATTR 0x8A     //读取磁盘容量
#define R_MODIFY_ATTR  0x8B     //修改打开文件的属性
#define R_NEW_DIR      0x8C     //新建文件夹
#define R_RD_FILE_SECTOR 0x8D    //扇区方式读文件
#define R_WR_FILE_SECTOR 0x8E    //扇区方式写文件
#define R_RESET          0x8F    //重启动模块
#define R_SET_OFFSETSECTOR 0x90   //设置扇区模式下的文件指针

//从机返回值
#define A_SUCCESS      0x40       //操作成功
#define A_CONTINUE     0x41       //继续,未使用
#define A_FAIL         0x42       //失败
#define A_NOTOPEN      0x43       //操作文件没有打开
#define A_REPLACE_REQ  0x44      //新建文件有重名是否替换之,未使用
#define A_BUSY         0x45      //操作忙
#define A_NOTREADY     0x46      //优盘未准备好
#define A_READY        0x47      //准备好
#define A_OPEN         0x48      //打开状态
#define A_BYTEMODE     0x49      //字节模式打开,不能进行扇区的读写

//大状态变量:B_STATUS的取值
#define S_NOTREADY    0x01  //优盘未连接
#define S_READY       0x02     //优盘已连接但未进行数据交换
#define S_OPEN        0x03    //优盘有文件打开,但未读写数据
#define S_BUSY        0x04    //正在忙

#define LOCATE_BYTE_MODE 0
#define LOCATE_SECTOR_MODE 0xff
//模块的数据最大传输字节数
#define MAX_BYTE_TRANS 512
#define MAX_BYTE_IO 255

typedef union _COM_BUFF
{
	uchar FrameBuff[MAX_BYTE_TRANS+5];
	struct
    {
	    uint FrameLen;            //此数据帧长度
	    uchar Com;             //指令或者应答
		union
        {
			uchar FileName[MAX_BYTE_IO];
			ulong SetOffset;                //设置文件字节偏移指针
			uint  ReadBytes;                //读取字节数
			struct
            {
				uint Bytes;                //写入文件字节数
				uchar DataBuff[MAX_BYTE_TRANS];
			}WriteDataVer;
			struct
            {                          //用于属性修改
				ulong FileSize;                //文件大小
				uint FileDate;                 //文件日期
				uint FileTime;                 //文件时间
				uchar FileAttr;                //文件属性
			}ModifyFileAttrVer;
		}VeryData;                        //真正的数据
	}ReqData;                            //请求方数据
	struct
    {
		uint FrameLen;               //此帧数据长度
		uchar Ack;               //应答
		union
        {
		    uint RealWriteByte;              //真正写入的字节数
            ulong RealOffset;
            struct
            {
			    uint ReadBytes;
			    uchar DataBuff[MAX_BYTE_TRANS];
			}ReadDataVer;
			struct
            {
			    ulong FileSize;                //文件大小
			    uint FileDate;                 //文件日期
			    uint FileTime;                 //文件时间
			    uchar FileAttr;                //文件属性
			}ReadFileAttrVer;
			
			struct
            {
				ulong DiskSize;                //磁盘大小,KB
				ulong TotalSize;               //当前分区大小,KB
				ulong FreeSize;                //当前分区空闲大小,KB
				uchar DiskFat;                 //当前分区类型
			}ReadDiskAttrVer;
			struct
            {                          //用于属性修改
				ulong FileSize;                //文件大小
				uint FileDate;                 //文件日期
				uint FileTime;                 //文件时间
				uchar FileAttr;                //文件属性
			}ModifyFileAttrVer;
		}VeryData;                        //真正的数据
	}AckData;                           //应答方数据
}COM_BUFF;






⌨️ 快捷键说明

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