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

📄 u_test.c

📁 USB for TMS320C5402
💻 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 + -