📄 u_test.c
字号:
#include "My_SL811.h"
WORD TotalWriteSize,ErrorCapacity;
WORD ValidCapacity;
WORD CheckFreeCapacity(WORD TotalWriteSize,WORD *FreeList,WORD ErrorCapacity);//查询U盘空闲容量,得到空闲簇的地址列表
BYTE ResultExport(WORD *FreeList);//结果导出到一个文件
extern FLAGS bFlags;
//FLAGS bdata bFlags;
extern pUSBDEV uDev;//
//unsigned char xdata DBUF[BUFFER_LENGTH];
//pUSBDEV xdata uDev; // Multiple USB devices attributes, Max 5 devices
unsigned char myEPOut;
unsigned char myEPIn;
unsigned char U_Disk_Test(void)
{
BYTE i;
// BYTE FATNum;
//sl811h_init();
i=0;
while(!bFlags.bits.SLAVE_ENUMERATED)
{
slave_detect();
i++;
if(i>0x02)
{
LCD_WriteStr(1,1,"无法识别的USB ");
return 0x01;//没有检测到USB设备
}
}
LCD_WriteStr(1,3,"设备枚举成功! ");
if(uDev.bClass!=0x08)//判断USB设备是否是U盘
{
LCD_WriteStr(1,1,"设备识别但不是U ");
return 0x02;//USB设备不是U盘
}
if(uDev.bNumOfEPs<2) //判断USB设备端点个数
{
LCD_WriteStr(1,1,"端点数小于2 ");
return 0x03;//USB设备不是U盘
}
//确定端口的输入输出特性
myEPOut=0;
myEPIn=0;
if((uDev.bEPAddr[1]==0x01)&&(uDev.bEPAddr[2]==0x82)){
myEPOut=0x01;
myEPIn=0x02;
}
if((uDev.bEPAddr[1]==0x81)&&(uDev.bEPAddr[2]==0x02)){
myEPOut=0x02;
myEPIn=0x01;
}
if((myEPOut==0x00)||(myEPIn==0x00)){
return 0x04;//USB设备不是U盘
}
//判断端点的传输特性,必须是批量传输
if((uDev.bAttr[1]!=0x02)||(uDev.bAttr[2]!=0x02)){
return 0x05;//USB设备不是U盘
}
/*
unsigned char OutPayLoad=WordSwap(uDev.wPayLoad[EPOut]);
unsigned char InPayLoad=WordSwap(uDev.wPayLoad[EPIn]);
// Get_LUN();//取得设备最大逻辑单元,对爱国者迷你王128M(U盘型),Max_LUN=1
// MaxLUN=MassStorageDataBuf[0];
// if(MaxLUN>1) return 0x11;//USB设备不支持本通信协议
if(!UFLInquiry()){//获取设备信息
return 0x06;//USB设备不支持本通信协议
}
i=0;
while(i<20)
{
if(UFLReadCapacity())
break;
DelayMs(100);
Reset_U();//如果读取数据失败,则Reset USB设备和接口
DelayMs(100);
//UFLRequestSense();
DelayMs(100);
i++;
}
if(i==20)
return 0x07;//USB设备不支持本通信协议
*/
/*********************************************************************************
Read Main Boot Record(MBR) Sector=0x00
MassStorageDataBuf[446]==0x80 --> First partition is active partition
MassStorageDataBuf[450]==0x04 --> FAT16
0x01 --> FAT12
0x06 --> BigFAT16
0x07 --> NTFS
0x0B --> FAT32
0x0C --> FAT32 LBA
**********************************************************************************/
/*
// if(MaxLUN){//U盘为爱国者128M
// DBRAddr=0;
// }
// else{
if(UFLRead10(0x00)){
// if((MassStorageDataBuf[446]==0x80)){
DBRAddr=(WORD)MassStorageDataBuf[455]<<8|(WORD)MassStorageDataBuf[454];
USBCapacity=(LWORD)MassStorageDataBuf[461]<<24|(LWORD)MassStorageDataBuf[460]<<16|
(LWORD)MassStorageDataBuf[459]<<8|(LWORD)MassStorageDataBuf[458];
// }
}
else{
return 0x09;//USB设备不支持本通信协议
}
// }
*/
/*********************************************************************************
Read DOS Boot Record Sector=DBRAddr
MassStorageDataBuf[11,12] w Byte Pre Sector
MassStorageDataBuf[13] b Sector Pre Cluster
MassStorageDataBuf[14,15] w Reserved sector
MassStorageDataBuf[16] b Number of FATs
MassStorageDataBuf[17,18] w Entry of Root
MassStorageDataBuf[22,23] w Sector Pre FAT
**********************************************************************************/
/*
i=0;
while(i<20)
{
if(UFLRead10(DBRAddr)) break;
USB_Delay(200);
Reset_U();
USB_Delay(200);
UFLRequestSense();
USB_Delay(200);
i++;
}
if(i==20)
return 0x0a;//USB设备不支持本通信协议
SectorSize=(WORD)MassStorageDataBuf[12]<<8|(WORD)MassStorageDataBuf[11];
ClusterSize=MassStorageDataBuf[13];
FATAddr=DBRAddr+((WORD)MassStorageDataBuf[15]<<8|(WORD)MassStorageDataBuf[14]);
FATNum=MassStorageDataBuf[16];
RootDirNum=(WORD)MassStorageDataBuf[18]<<8|(WORD)MassStorageDataBuf[17];
RootDirSize=(RootDirNum<<5)/SectorSize;
FATLength =(WORD)MassStorageDataBuf[23]<<8|(WORD)MassStorageDataBuf[22];
RootDirAddr=FATAddr+FATLength*FATNum;
FileDataAddr=RootDirAddr+RootDirSize;
// if(MaxLUN)//U盘为爱国者128M
// USBCapacity=(LWORD)MassStorageDataBuf[35]<<24|(LWORD)MassStorageDataBuf[34]<<16|
// (LWORD)MassStorageDataBuf[33]<<8|(LWORD)MassStorageDataBuf[32];
ValidCapacity=USBCapacity-1-RootDirSize-FATLength*FATNum;
ErrorCapacity=(LWORD)(FATLength*256-2)*ClusterSize-ValidCapacity;
UFLRead10(FATAddr);//读FAT表
UFLRead10(RootDirAddr);//读根目录区
*/
return 0x00;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -