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

📄 nouse.h

📁 用SL811做USB主机的源码
💻 H
字号:
//******************************************************************
//Belows are of No use!!!

uint8  UFI_Unknown(void)						   //Good supported
{
 CBW MassStorageCBW;
 uint8 i;
 
 puts("UFI_Unknown process!"); 
 
 MassStorageCBW.dCBWSignature = 0;
 MassStorageCBW.dCBWTag = 0;
 Bulk_Transfer_Out(8,(uint8*)&MassStorageCBW,0);
 return 0;
} 

uint8  UFI_StartStop(uint8 Start)		  		   //Supported
{
 CBW MassStorageCBW;
 uint8 i;
 
 puts("UFI_StartStop process!"); 
 
 MassStorageCBW.dCBWSignature = 0x43425355;
 MassStorageCBW.dCBWTag = 0x12345678;
 MassStorageCBW.dCBWDataTransferLength = 0;	       //Modify
 MassStorageCBW.bmCBWFlags = 0;	   	 		   	   //Modify
 MassStorageCBW.bCBWLUN = 0;
 MassStorageCBW.bCBWCBLength = 0x0c;

 for(i=0;i<12;i++)
 MassStorageCBW.CBWCB[i] = 0;
  
 MassStorageCBW.CBWCB[0] = 0x1B;
 if(Start)MassStorageCBW.CBWCB[4] = 1;
 else MassStorageCBW.CBWCB[4] = 0;
   
 if(Bulk_Transfer_Out(31,(uint8*)&MassStorageCBW,0) == 0) 
 {
   puts("Good Bulk Transfer!");
   i = Bulk_Transfer_In(64,GetDataBuffer,1);
   if( i == 0xFF ) return 0x11;
   printf("Get data num is %x\n",i);
   Printf_buffer();     
   return GetDataBuffer[12];			  //Return 0 if success, 0x01 = fail, 0x02 = segment error
 }
 else 
 {
   puts("Bad Bulk Transfer!");
   return 0xFF;
 }  
}

uint8  UFI_Seek(void)		  			  		   //Bad
{
 CBW MassStorageCBW;
 uint8 i;
 
 puts("UFI_Seek process!"); 
 
 MassStorageCBW.dCBWSignature = 0x43425355;
 MassStorageCBW.dCBWTag = 0x12345678;
 MassStorageCBW.dCBWDataTransferLength = 0;	       //Modify
 MassStorageCBW.bmCBWFlags = 0x80;	   	 		   //Modify
 MassStorageCBW.bCBWLUN = 0;
 MassStorageCBW.bCBWCBLength = 0x0c;
 
 MassStorageCBW.CBWCB[0] = 0x2B;
 MassStorageCBW.CBWCB[1] = 0;
 MassStorageCBW.CBWCB[2] = 0;
 MassStorageCBW.CBWCB[3] = 0;
 MassStorageCBW.CBWCB[4] = 0;
 MassStorageCBW.CBWCB[5] = 0;
 
 if(Bulk_Transfer_Out(31,(uint8*)&MassStorageCBW,0) == 0) 
 {
   puts("Good Bulk Transfer!");
   i = Bulk_Transfer_In(64,GetDataBuffer,1);
   if( i == 0xFF ) return 0x11;
   printf("Get data num is %x\n",i);
   Printf_buffer();     
   return GetDataBuffer[12];			  //Return 0 if success, 0x01 = fail, 0x02 = segment error
 }
 else 
 {
   puts("Bad Bulk Transfer!");
   return 0xFF;
 }  
}

uint8  UFI_TestUnitReady()	  			  		   //Bad
{
 CBW MassStorageCBW;
 uint8 i;
 
 puts("UFI_TestUnitReady process!"); 
 
 MassStorageCBW.dCBWSignature = 0x43425355;
 MassStorageCBW.dCBWTag = 0x12345678;
 MassStorageCBW.dCBWDataTransferLength = 0;	       //Modify
 MassStorageCBW.bmCBWFlags = 0x80;	   	 		   //Modify
 MassStorageCBW.bCBWLUN = 0;
 MassStorageCBW.bCBWCBLength = 0x0c;
 
 for(i=0;i<12;i++)
 MassStorageCBW.CBWCB[i] = 0;
   
 if(Bulk_Transfer_Out(31,(uint8*)&MassStorageCBW,0) == 0) 
 {
   puts("Good Bulk Transfer!");
   i = Bulk_Transfer_In(64,GetDataBuffer,1);
   if( i == 0xFF ) return 0x11;
   printf("Get data num is %x\n",i);
   Printf_buffer();     
   return GetDataBuffer[12];			  //Return 0 if success, 0x01 = fail, 0x02 = segment error
 }
 else 
 {
   puts("Bad Bulk Transfer!");
   return 0xFF;
 }  
}

uint8  UFI_Diagnostics(void)  			  		   //Bad
{
 CBW MassStorageCBW;
 uint8 i;
 
 puts("UFI_Diagnostics process!"); 
 
 MassStorageCBW.dCBWSignature = 0x43425355;
 MassStorageCBW.dCBWTag = 0x12345678;
 MassStorageCBW.dCBWDataTransferLength = 0;	       //Modify
 MassStorageCBW.bmCBWFlags = 0x80;	   	 		   //Modify
 MassStorageCBW.bCBWLUN = 0;
 MassStorageCBW.bCBWCBLength = 0x0c;
 
 MassStorageCBW.CBWCB[0] = 0x1D;
 MassStorageCBW.CBWCB[1] = 0x04;
 
 if(Bulk_Transfer_Out(31,(uint8*)&MassStorageCBW,0) == 0) 
 {
   puts("Good Bulk Transfer!");
   i = Bulk_Transfer_In(64,GetDataBuffer,1);
   if( i == 0xFF ) return 0x11;
   printf("Get data num is %x\n",i);
   Printf_buffer();     
   return GetDataBuffer[12];			  //Return 0 if success, 0x01 = fail, 0x02 = segment error
 }
 else 
 {
   puts("Bad Bulk Transfer!");
   return 0xFF;
 }  
}

uint8 Write2Inport()
{
    uint8 i;

	SL811_ADDR = SL811_USBA_BaseAddress;
	SL811_COMM = USBA_BASEADDRESS;
	SL811_COMM = 0;
	SL811_COMM = OUT_PID | BulkOut_PortNum;
	SL811_COMM = UDisk_Address;		
	SL811_ADDR = SL811_Interrupt_Status;
	SL811_COMM = 0xFF;						// clear the DONE bit
	SL811_ADDR = SL811_USBA_Control;
	if(Bulk_Data_Toggle++) SL811_COMM = 0x47;		
	else SL811_COMM = 0x07;		
	
	delayms(1);
	if((USBA_Status & 0x01) == 0x01)
 	{
      puts("Good Bulk Transfer!");
   	  i = Bulk_Transfer_In(64,GetDataBuffer,0);
   	  if( i == 0xFF ) return 0x11;
   	  printf("Get data num is %x\n",i);
   	  Printf_buffer();     
   	  return GetDataBuffer[12];			  //Return 0 if success, 0x01 = fail, 0x02 = segment error
 	}
 	else 
 	{
   	 puts("Bad Bulk Transfer!");
   	 return 0xFF;
 	}  	
}


uint8  UFI_Read12(uint32 LogiclBlockAddress)
{
 CBW MassStorageCBW;
 uint8 i;
 
 puts("Write 12 process!");
 
 MassStorageCBW.dCBWSignature = 0x43425355;
 MassStorageCBW.dCBWTag = 0xFF31E828;
 MassStorageCBW.dCBWDataTransferLength = 0x0200;
 MassStorageCBW.bmCBWFlags = 0x80;
 MassStorageCBW.bCBWLUN = 0;
 MassStorageCBW.bCBWCBLength = 0x0a;
 
 MassStorageCBW.CBWCB[0] = 0x28;
 MassStorageCBW.CBWCB[1] = 0;
 MassStorageCBW.CBWCB[2] = *((uint8*)&LogiclBlockAddress+3);
 MassStorageCBW.CBWCB[3] = *((uint8*)&LogiclBlockAddress+2);
 MassStorageCBW.CBWCB[4] = *((uint8*)&LogiclBlockAddress+1);
 MassStorageCBW.CBWCB[5] = *((uint8*)&LogiclBlockAddress+0);
 MassStorageCBW.CBWCB[6] = 0;
 MassStorageCBW.CBWCB[7] = 0;		   	 	   //Transfer data len MSB
 MassStorageCBW.CBWCB[8] = 1;		   	 	   //Transfer data len LSB
 MassStorageCBW.CBWCB[9] = 0;
 MassStorageCBW.CBWCB[10] = 0;
 MassStorageCBW.CBWCB[11] = 0;

 Bulk_Transfer_Out(0x0d,(uint8*)&MassStorageCBW,0);
 return 0;
}

⌨️ 快捷键说明

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