枚举文件函数。
uint16 UDISK_ReadXl_Files(void) //列举根目录下所有XL文件,返回文件数目 { uint8 buf[256],s; uint8 fname[1]; uint16 i,j; P_FAT_DIR_INFO pDir; xldir_filedir_num=0; file_sel_index=0; file_scr_index=0;
fname[0]='*'; i=0;j=0;
s=CH376FileOpen(fname); //打开文件 DELAY_Xus(100*SPI_DELAY_TIME); while(s==USB_INT_DISK_READ) { DELAY_Xus(100*SPI_DELAY_TIME); CH376ReadBlock(buf); //DELAY_Xus(SPI_DELAY_TIME); pDir = (P_FAT_DIR_INFO)buf;
if(((pDir ->DIR_Attr)&(1<<5))== ATTR_ARCHIVE) { //不是本级或者上级目录名则继续,否则必须丢弃不处理 if(((pDir -> DIR_Name[8])=='X')&&((pDir -> DIR_Name[9])=='L')) { for(i=0;i<11;i++) { cur_dir_fles[xldir_filedir_num][i]=pDir->DIR_Name[i]; } xldir_filedir_num++; } } xWriteCH376Cmd( CMD0H_FILE_ENUM_GO ); DELAY_Xus(10*SPI_DELAY_TIME); xEndCH376Cmd( ); DELAY_Xus(10*SPI_DELAY_TIME); s=Wait376Interrupt( ); } return xldir_filedir_num; }
实验过,当在根目录下(已经打开了根目录),执行这个函数,枚举成功,可以得到跟目下.xl文件列表,然后先新建一个文件,写入4个字节,再关闭该文件,然后再执行这个函数,枚举竟然不成功,调试发现,函数里的: if(((pDir ->DIR_Attr)&(1<<5))== ATTR_ARCHIVE) 这里不成立,即判断是文件还是目录,它的第5位不为1,所以结果不对,枚举不成功,,,,,,
问大家是什么原因。。。。