xWriteCH376Cmd(CMD14_READ_VAR32);
xWriteCH376Data(VAR_FAT_DIR_LBA); /* 当前文件目录信息所在的扇区LBA地址 */
这是CMD14_READ_VAR32的用法,需要输入一个字节的变量地址,VAR_FAT_DIR_LBA代表是当前打开文件的目录信息的地址,然后输入4个字节的文件系统变量。
问一下长文件名和短文件明在U盘内是怎么存储的?
你可以去参考FAT文件系统协议,内容也不复杂。目前U盘FAT32的文件系统较多,你看下FAT32就行。
能不能解释一下文件系统变量是什么?
文件系统变量指的是当前打开的文件4字节的目录信息。
文件系统变量是什么内容?代表什么意思?
/* ********************************************************************************************************************* */
/* 主机文件模式下的文件系统变量的地址 */
#ifndef VAR_FILE_SIZE
/* 8位/单字节变量 */
#define VAR_SYS_BASE_INFO 0x20 /* 当前系统的基本信息 */
/* 位6用于指示USB存储设备的子类别SubClass-Code, 位6为0则说明子类别为6, 位6为1则说明子类别是非6的其它值 */
/* 位5用于指示USB设备方式下的USB配置状态和USB主机方式下的USB设备连接状态 */
/* USB设备方式下, 位5为1则USB配置完成, 位5位0则尚未配置 */
/* USB主机方式下, 位5为1则USB端口存在USB设备, 位5位0则USB端口没有USB设备 */
/* 位4用于指示USB设备方式下的缓冲区锁定状态, 位4为1则说明USB缓冲区处于锁定状态, 位6为1则说明已经释放 */
/* 其它位, 保留,请勿修改 */
#define VAR_RETRY_TIMES 0x25 /* USB事务操作的重试次数 */
/* 位7为0则收到NAK时不重试, 位7为1位6为0则收到NAK时无限重试(可以用CMD_ABORT_NAK命令放弃重试), 位7为1位6为1则收到NAK时最多重试3秒 */
/* 位5~位0为超时后的重试次数 */
#define VAR_FILE_BIT_FLAG 0x26 /* 主机文件模式下的位标志 */
/* 位1和位0, 逻辑盘的FAT文件系统标志, 00-FAT12, 01-FAT16, 10-FAT32, 11-非法 */
/* 位2, 当前缓冲区中的FAT表数据是否被修改标志, 0-未修改, 1-已修改 */
/* 位3, 文件长度需要修改标志, 当前文件被追加数据, 0-未追加无需修改, 1-已追加需要修改 */
/* 其它位, 保留,请勿修改 */
#define VAR_DISK_STATUS 0x2B /* 主机文件模式下的磁盘及文件状态 */
#define VAR_SD_BIT_FLAG 0x30 /* 主机文件模式下SD卡的位标志 */
/* 位0, SD卡版本, 0-只支持SD第一版,1-支持SD第二版 */
/* 位1, 自动识别, 0-SD卡, 1-MMC卡 */
/* 位2, 自动识别, 0-标准容量SD卡, 1-大容量SD卡(HC-SD) */
/* 位4, ACMD41命令超时 */
/* 位5, CMD1命令超时 */
/* 位6, CMD58命令超时 */
/* 其它位, 保留,请勿修改 */
#define VAR_UDISK_TOGGLE 0x31 /* USB存储设备的BULK-IN/BULK-OUT端点的同步标志 */
/* 位7, Bulk-In端点的同步标志 */
/* 位6, Bulk-In端点的同步标志 */
/* 位5~位0, 必须为0 */
#define VAR_UDISK_LUN 0x34 /* USB存储设备的逻辑单元号 */
/* 位7~位4, USB存储设备的当前逻辑单元号,CH376初始化USB存储设备后,默认是访问0#逻辑单元 */
/* 位3~位0, USB存储设备的最大逻辑单元号,加1后等于逻辑单元数 */
#define VAR_SEC_PER_CLUS 0x38 /* 逻辑盘的每簇扇区数 */
#define VAR_FILE_DIR_INDEX 0x3B /* 当前文件目录信息在扇区内的索引号 */
#define VAR_CLUS_SEC_OFS 0x3C /* 当前文件指针在簇内的扇区偏移,为0xFF则指向文件末尾,簇结束 */
/* 32位/4字节变量 */
#define VAR_DISK_ROOT 0x44 /* 对于FAT16盘为根目录占用扇区数,对于FAT32盘为根目录起始簇号(总长度32位,低字节在前) */
#define VAR_DSK_TOTAL_CLUS 0x48 /* 逻辑盘的总簇数(总长度32位,低字节在前) */
#define VAR_DSK_START_LBA 0x4C /* 逻辑盘的起始绝对扇区号LBA(总长度32位,低字节在前) */
#define VAR_DSK_DAT_START 0x50 /* 逻辑盘的数据区域的起始LBA(总长度32位,低字节在前) */
#define VAR_LBA_BUFFER 0x54 /* 当前磁盘数据缓冲区的数据对应的LBA(总长度32位,低字节在前) */
#define VAR_LBA_CURRENT 0x58 /* 当前读写的磁盘起始LBA地址(总长度32位,低字节在前) */
#define VAR_FAT_DIR_LBA 0x5C /* 当前文件目录信息所在的扇区LBA地址(总长度32位,低字节在前) */
#define VAR_START_CLUSTER 0x60 /* 当前文件或者目录(文件夹)的起始簇号(总长度32位,低字节在前) */
#define VAR_CURRENT_CLUST 0x64 /* 当前文件的当前簇号(总长度32位,低字节在前) */
#define VAR_FILE_SIZE 0x68 /* 当前文件的长度(总长度32位,低字节在前) */
#define VAR_CURRENT_OFFSET 0x6C /* 当前文件指针,当前读写位置的字节偏移(总长度32位,低字节在前) */
#endif
CH376INC.H里面有的,上面提到的就是CH376存储的文件系统变量。