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

📄 tpbulk.lst

📁 这是在SL811上实现的对U盘进行FAT32或FAT16读写的程序
💻 LST
字号:
C51 COMPILER V6.20c  TPBULK                                                                04/07/2005 10:50:49 PAGE 1   


C51 COMPILER V6.20c, COMPILATION OF MODULE TPBULK
OBJECT MODULE PLACED IN TPBULK.OBJ
COMPILER INVOKED BY: D:\Hardware\Keilc620\C51\Bin\C51.EXE TPBULK.C DB OE SMALL ROM(LARGE) 

stmt level    source

   1          #include "common.h"
   2          #include "SL811.H"
   3          #include "TPBULK.H"
   4          #include "HAL.H"
   5          #include "HPI.H"
   6          //////////////////////////////////
   7          extern unsigned char xdata DBUF[BUFFER_LENGTH];
   8          extern XXGPKG usbstack;
   9          extern SYS_INFO_BLOCK xdata DeviceInfo;
  10          extern FILE_INFO xdata ThisFile;
  11          extern DIR_INFO xdata ThisDir;
  12          extern unsigned char xdata CurFatSector[512];
  13          extern XXGFLAGS bXXGFlags;
  14          extern unsigned char opLun;
  15          
  16          TPBLK_STRUC idata TPBulk_Block;
  17          #define     TPBulk_CBW			TPBulk_Block.TPBulk_CommandBlock
  18          #define	    CBW_wXferLen		TPBulk_CBW.dCBW_DataXferLen
  19          #define	    RBC_CDB			TPBulk_CBW.cdbRBC
  20          #define     RBC_LUN			TPBulk_CBW.bCBW_LUN
  21          #define     TPBulk_CSW			TPBulk_Block.TPBulk_CommandStatus
  22          
  23          ///////////////////////////////////////////////////////////////////////////
  24          unsigned char EnumMassDev(void)
  25          {
  26   1      
  27   1      	PMBR_BLOCK pMBR;
  28   1      	PBPB_BLOCK pBPB;
  29   1      	PFSINFO_BLOCK pFSInfo;
  30   1      	unsigned long StartSector;
  31   1      	unsigned int FATSz16,FSInfo;
  32   1      	////////////////////////////////////////////////////
  33   1      	//if(!SPC_TestUnit())
  34   1      	//	return FALSE;
  35   1      	if(!SPC_Inquiry())
  36   1      		return FALSE;
  37   1      	//if(!SPC_READLONG())
  38   1      	//	return FALSE;
  39   1      	if(!SPC_TestUnit())
  40   1      		return FALSE;
  41   1      	if(!RBC_ReadCapacity())
  42   1      		return FALSE;
  43   1      	if(!SPC_RequestSense())
  44   1      		return FALSE;
  45   1      	if(!SPC_TestUnit())
  46   1      		return FALSE;
  47   1      	if(!SPC_LockMedia())
  48   1      		return FALSE;
  49   1      	
  50   1      	if(!RBC_ReadCapacity())
  51   1      		return FALSE;
  52   1      	////////////////////////////////////////////////////
  53   1      	pMBR=(PMBR_BLOCK)DBUF;
  54   1      	DeviceInfo.BPB_BytesPerSec=512; //暂假设为512
  55   1      
C51 COMPILER V6.20c  TPBULK                                                                04/07/2005 10:50:49 PAGE 2   

  56   1      	if(!RBC_Read(0x0,1,DBUF))
  57   1      		return FALSE;
  58   1      	//////////////////////////////////
  59   1      	if(DBUF[0]==0xeb||DBUF[0]==0xe9)
  60   1      		{
  61   2      		StartSector=0;
  62   2      		//DeviceInfo.TotalSector=SwapINT32(pMBR->TotalSector);
  63   2      		}
  64   1      	else
  65   1      		{
  66   2      	//////////////////////////////////
  67   2      		StartSector=SwapINT32(pMBR->StartSector);
  68   2      		//DeviceInfo.TotalSector=SwapINT32(pMBR->TotalSector);
  69   2      		}
  70   1      	///////////////////////////////////////////////////////
  71   1      	pBPB=(PBPB_BLOCK)DBUF;
  72   1      	if(!RBC_Read(StartSector,1,DBUF))
  73   1      		return FALSE;
  74   1      	DeviceInfo.BPB_BytesPerSec=SwapINT16(pBPB->BPB_BytesPerSec);
  75   1      	DeviceInfo.BPB_SecPerClus=pBPB->BPB_SecPerClus;
  76   1      	DeviceInfo.BPB_RootEntCnt=SwapINT16(pBPB->BPB_RootEntCnt);
  77   1      	
  78   1      	FATSz16=SwapINT16(pBPB->BPB_FATSz16);
  79   1      	if(FATSz16>0)	// 表明是FAT16系统
  80   1      	{
  81   2      	DeviceInfo.FATSz=SwapINT16(pBPB->BPB_FATSz16);
  82   2      	bXXGFlags.bIsFat32=0;
  83   2      	DeviceInfo.FatStartSector=StartSector+SwapINT16(pBPB->BPB_RsvdSecCn);
  84   2      	DeviceInfo.RootStartSector=DeviceInfo.FatStartSector+2*DeviceInfo.FATSz;
  85   2      	DeviceInfo.FirstDataSector=DeviceInfo.RootStartSector+(DeviceInfo.BPB_RootEntCnt>>4);	//DeviceInfo.FirstS
             -ectorofCluster=;
  86   2      	DeviceInfo.FSI_Nxt_Free=2;
  87   2      	MCU_LED3=0;
  88   2      	ThisDir.DepthIndex=0;
  89   2      	ThisDir.bRootDir=1;
  90   2      	
  91   2      	ThisDir.Link[0]=DeviceInfo.RootStartSector;
  92   2      	
  93   2      	ThisDir.ParentStartCluster=0;
  94   2      	ThisDir.StartCluster=0;
  95   2      	ThisDir.StartSector=DeviceInfo.RootStartSector;
  96   2      	}
  97   1      	else		//说明是FAT32系统
  98   1      	{
  99   2      	
 100   2      	//////////////////////////////////////////////////////
 101   2      	MCU_LED3=1;
 102   2      	return FALSE;	//本版本不支持FAT32
 103   2      	}
 104   1      	///////////////////////////////////////////////////////
 105   1      	ThisFile.bFileOpen=0;
 106   1      	ThisFile.FatSectorPointer=0;
 107   1      	///////////////////////////////////////////////////////
 108   1      	return TRUE;
 109   1      }
*** WARNING C280 IN LINE 29 OF TPBULK.C: 'pFSInfo': unreferenced local variable
*** WARNING C280 IN LINE 31 OF TPBULK.C: 'FSInfo': unreferenced local variable
 110          
 111          unsigned char SPC_Inquiry(void)
 112          {
 113   1      #define cdbInquirySPC RBC_CDB.SpcCdb_Inquiry
 114   1      
C51 COMPILER V6.20c  TPBULK                                                                04/07/2005 10:50:49 PAGE 3   

 115   1      	TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
 116   1      	TPBulk_CBW.dCBW_Tag=0x60a624de;
 117   1      	TPBulk_CBW.dCBW_DataXferLen=0x24000000;
 118   1      	TPBulk_CBW.bCBW_Flag=0x80;
 119   1      	TPBulk_CBW.bCBW_LUN=opLun;
 120   1      	TPBulk_CBW.bCBW_CDBLen=sizeof(INQUIRY_SPC);
 121   1      	/////////////////////////////////
 122   1      	cdbInquirySPC.OperationCode=SPC_CMD_INQUIRY;
 123   1      	cdbInquirySPC.Lun5to7=opLun<<5;
 124   1      	cdbInquirySPC.PageCode=0;
 125   1      	cdbInquirySPC.Reserved=0;
 126   1      	cdbInquirySPC.AllocationLen=0x24;
 127   1      	cdbInquirySPC.Control=0;
 128   1      	////////////////////////////////
 129   1      	if(!epBulkSend((unsigned char *)&TPBulk_CBW,31))
 130   1      		return FALSE;
 131   1      
 132   1      	if(!epBulkRcv(DBUF,36))
 133   1      		return FALSE;
 134   1      	if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
 135   1      		return FALSE;
 136   1      	////////////////////////////////
 137   1      	return TRUE;
 138   1      #undef cdbInquirySPC
 139   1      }
 140          
 141          unsigned char SPC_RequestSense(void)
 142          {
 143   1      #define cdbRequestSenseSPC RBC_CDB.SpcCdb_RequestSense
 144   1      	//unsigned char retStatus=FALSE;
 145   1      	TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
 146   1      	TPBulk_CBW.dCBW_Tag=0x60a624de;
 147   1      	TPBulk_CBW.dCBW_DataXferLen=0x0e000000;
 148   1      	TPBulk_CBW.bCBW_Flag=0x80;
 149   1      	TPBulk_CBW.bCBW_LUN=opLun;
 150   1      	TPBulk_CBW.bCBW_CDBLen=sizeof(REQUEST_SENSE_SPC);
 151   1      
 152   1      	/////////////////////////////////////
 153   1      	cdbRequestSenseSPC.OperationCode=SPC_CMD_REQUESTSENSE;
 154   1      	cdbRequestSenseSPC.Lun5to7=opLun<<5;
 155   1      	cdbRequestSenseSPC.Reserved[0]=0;
 156   1      	cdbRequestSenseSPC.Reserved[1]=0;
 157   1      	cdbRequestSenseSPC.AllocationLen=0x0e;
 158   1      	//////////////////////////////////////
 159   1      	if(!epBulkSend((unsigned char *)&TPBulk_CBW,31))
 160   1      		return FALSE;
 161   1      
 162   1      	if(!epBulkRcv(DBUF,18))
 163   1      		return FALSE;
 164   1      
 165   1      	if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
 166   1      		return FALSE;
 167   1      /////////////////////////////
 168   1      	return TRUE;
 169   1      
 170   1      #undef cdbRequestSenseSPC
 171   1      }
 172          unsigned char SPC_TestUnit(void)
 173          {
 174   1      #define cdbTestUnit RBC_CDB.SpcCdb_TestUnit
 175   1      	//unsigned char retStatus=FALSE;
 176   1      	TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
C51 COMPILER V6.20c  TPBULK                                                                04/07/2005 10:50:49 PAGE 4   

 177   1      	TPBulk_CBW.dCBW_Tag=0x60a624de;
 178   1      	TPBulk_CBW.dCBW_DataXferLen=0x00000000;
 179   1      	TPBulk_CBW.bCBW_Flag=0x00;
 180   1      	TPBulk_CBW.bCBW_LUN=opLun;
 181   1      	TPBulk_CBW.bCBW_CDBLen=sizeof(TEST_UNIT_SPC);
 182   1      	/////////////////////////////////////
 183   1      	cdbTestUnit.OperationCode=SPC_CMD_TESTUNITREADY;
 184   1      	cdbTestUnit.Lun5to7=opLun<<5;
 185   1      	//////////////////////////////////////
 186   1      	if(!epBulkSend((unsigned char *)&TPBulk_CBW,31))
 187   1      		return FALSE;
 188   1      
 189   1      	if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
 190   1      		return FALSE;
 191   1      #undef cdbTestUnit
 192   1      ////////////////////////////
 193   1      	return TRUE;
 194   1      }
 195          unsigned char SPC_LockMedia(void)
 196          {
 197   1      #define cdbLockSPC RBC_CDB.SpcCdb_Remove
 198   1      	//unsigned char retStatus=FALSE;
 199   1      	TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
 200   1      	TPBulk_CBW.dCBW_Tag=0x60a624de;
 201   1      	TPBulk_CBW.dCBW_DataXferLen=0x00000000;
 202   1      	TPBulk_CBW.bCBW_Flag=0x00;
 203   1      	TPBulk_CBW.bCBW_LUN=opLun;
 204   1      	TPBulk_CBW.bCBW_CDBLen=sizeof(MEDIA_REMOVAL_SPC);
 205   1      	///////////////////////////////////////////
 206   1      	cdbLockSPC.OperationCode=SPC_CMD_PRVENTALLOWMEDIUMREMOVAL;
 207   1      	cdbLockSPC.Lun5to7=opLun<<5;
 208   1      	cdbLockSPC.Prevent=1;
 209   1      	///////////////////////////////////////////
 210   1      	if(!epBulkSend((unsigned char *)&TPBulk_CBW,31))
 211   1      		return FALSE;
 212   1      
 213   1      	if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
 214   1      		return FALSE;
 215   1      #undef cdbLockSPC
 216   1      /////////////////////////////
 217   1      	return TRUE;
 218   1      }
 219          unsigned char RBC_ReadCapacity(void)
 220          {
 221   1      #define cdbReadCap RBC_CDB.RbcCdb_ReadCapacity
 222   1      	//unsigned char retStatus=FALSE;
 223   1      	TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
 224   1      	TPBulk_CBW.dCBW_Tag=0x60a624de;
 225   1      	TPBulk_CBW.bCBW_LUN=opLun;
 226   1      	TPBulk_CBW.dCBW_DataXferLen=0x08000000;
 227   1      	TPBulk_CBW.bCBW_Flag=0x80;
 228   1      
 229   1      	TPBulk_CBW.bCBW_CDBLen=sizeof(READ_CAPACITY_RBC);
 230   1      	/////////////////////////////////////
 231   1      	cdbReadCap.OperationCode=RBC_CMD_READCAPACITY;
 232   1      	cdbReadCap.Lun5to7=opLun<<5;
 233   1      	cdbReadCap.Reserved[0]=0;
 234   1      	cdbReadCap.Reserved[1]=0;
 235   1      	cdbReadCap.Reserved[2]=0;
 236   1      	cdbReadCap.Reserved[3]=0;
 237   1      	cdbReadCap.PMI=0;
 238   1      	/////////////////////////////////////
C51 COMPILER V6.20c  TPBULK                                                                04/07/2005 10:50:49 PAGE 5   

 239   1      	if(!epBulkSend((unsigned char *)&TPBulk_CBW,31))
 240   1      		return FALSE;
 241   1      
 242   1      	if(!epBulkRcv(DBUF,8))
 243   1      		return FALSE;
 244   1      	if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
 245   1      		return FALSE;
 246   1      #undef cdbReadCap
 247   1      /////////////////////////////
 248   1      	return TRUE;
 249   1      }
 250          unsigned char RBC_Read(unsigned long lba,unsigned char len,unsigned char *pBuffer)
 251          {
 252   1      #define cdbRead RBC_CDB.RbcCdb_Read
 253   1      	//unsigned char retStatus=FALSE;
 254   1      	TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
 255   1      	TPBulk_CBW.dCBW_Tag=0x60a624de;
 256   1      	TPBulk_CBW.dCBW_DataXferLen=SwapINT32(len*512);
 257   1      	TPBulk_CBW.bCBW_Flag=0x80;
 258   1      	TPBulk_CBW.bCBW_LUN=opLun;
 259   1      	TPBulk_CBW.bCBW_CDBLen=sizeof(READ_RBC);
 260   1      	/////////////////////////////////////
 261   1      	cdbRead.OperationCode=RBC_CMD_READ10;
 262   1      	cdbRead.VendorSpecific=opLun<<5;
 263   1      	cdbRead.LBA.LBA_W32=lba;
 264   1      	cdbRead.XferLength=len;
 265   1      	//////////////////////////////////////
 266   1      	if(!epBulkSend((unsigned char *)&TPBulk_CBW,31))
 267   1      		return FALSE;
 268   1      
 269   1      	if(!epBulkRcv(pBuffer,len*512))
 270   1      		return FALSE;
 271   1      	//DelayMs(1);
 272   1      	if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
 273   1      		return FALSE;
 274   1      #undef cdbRead
 275   1      /////////////////////////////
 276   1      	return TRUE;
 277   1      }
 278          
 279          unsigned char RBC_Write(unsigned long lba,unsigned char len,unsigned char *pBuffer)
 280          {
 281   1      #define cdbWrite RBC_CDB.RbcCdb_Write
 282   1      	TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
 283   1      	TPBulk_CBW.dCBW_Tag=0xb4D977c1;
 284   1      	TPBulk_CBW.dCBW_DataXferLen=SwapINT32(len*512);
 285   1      	TPBulk_CBW.bCBW_Flag=0x0;
 286   1      	TPBulk_CBW.bCBW_LUN=opLun;
 287   1      	TPBulk_CBW.bCBW_CDBLen=sizeof(WRITE_RBC);
 288   1      	/////////////////////////////////////
 289   1      	cdbWrite.OperationCode=RBC_CMD_WRITE10;
 290   1      	cdbWrite.VendorSpecific=opLun<<5;
 291   1      	cdbWrite.LBA.LBA_W32=lba;
 292   1      	cdbWrite.XferLength=len;
 293   1      	cdbWrite.Reserved2=0;
 294   1      	cdbWrite.Control=0;
 295   1      	//////////////////////////////////////
 296   1      	if(!epBulkSend((unsigned char *)&TPBulk_CBW,31))
 297   1      		return FALSE;
 298   1      	//DelayMs(20);
 299   1      
 300   1      	if(!epBulkSend(pBuffer,len*512))
C51 COMPILER V6.20c  TPBULK                                                                04/07/2005 10:50:49 PAGE 6   

 301   1      		return FALSE;
 302   1      	if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
 303   1      		return FALSE;
 304   1      #undef cdbWrite
 305   1      /////////////////////////////
 306   1      	return TRUE;
 307   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1369    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      31
   IDATA SIZE       =     27    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  2 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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