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

📄 tpbulk.lst

📁 用C51编的SL811读写U盘的源程序,包含原理图
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   TPBULK                                                                01/14/2008 22:33:39 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE TPBULK
OBJECT MODULE PLACED IN TPBULK.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE TPBULK.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

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

  56   1              //////////////////////////////////
  57   1              if(DBUF[0]==0xeb||DBUF[0]==0xe9)
  58   1                      {
  59   2                      DeviceInfo.StartSector=0;
  60   2                      //DeviceInfo.TotalSector=SwapINT32(pMBR->TotalSector);
  61   2                      }
  62   1              else
  63   1                      {
  64   2              //////////////////////////////////
  65   2                      DeviceInfo.StartSector=SwapINT32(pMBR->StartSector);
  66   2                      //DeviceInfo.TotalSector=SwapINT32(pMBR->TotalSector);
  67   2                      }
  68   1              ///////////////////////////////////////////////////////
  69   1              pBPB=(PBPB_BLOCK)DBUF;
  70   1              if(!RBC_Read(DeviceInfo.StartSector,1,DBUF))
  71   1                      return FALSE;
  72   1              DeviceInfo.BPB_BytesPerSec=SwapINT16(pBPB->BPB_BytesPerSec);
  73   1              DeviceInfo.BPB_SecPerClus=pBPB->BPB_SecPerClus;
  74   1              DeviceInfo.BPB_NumFATs=pBPB->BPB_NumFATs;
  75   1              DeviceInfo.BPB_RootEntCnt=SwapINT16(pBPB->BPB_RootEntCnt);
  76   1              DeviceInfo.BPB_TotSec16=SwapINT16(pBPB->BPB_TotSec16);
  77   1              DeviceInfo.BPB_FATSz16=SwapINT16(pBPB->BPB_FATSz16);
  78   1              DeviceInfo.BPB_TotSec32=SwapINT32(pBPB->BPB_TotSec32);
  79   1              DeviceInfo.FatStartSector=DeviceInfo.StartSector+1;
  80   1              DeviceInfo.RootStartSector=DeviceInfo.StartSector+2*DeviceInfo.BPB_FATSz16+1;
  81   1              //DeviceInfo.DataStartSector=DeviceInfo.RootStartSector+DeviceInfo.BPB_RootEntCnt;
  82   1              DeviceInfo.FirstDataSector=DeviceInfo.FatStartSector+2*DeviceInfo.BPB_FATSz16+32;
  83   1              //DeviceInfo.FirstSectorofCluster=;
  84   1              ///////////////////////////////////////////////////////
  85   1              ThisFile.bFileOpen=0;   
  86   1              ///////////////////////////////////////////////////////
  87   1              return TRUE;
  88   1      }
  89          
  90          unsigned char TPBulk_GetMaxLUN(void)
  91          {
  92   1              
  93   1              usbstack.setup.bmRequest=0xa1;
  94   1              usbstack.setup.bRequest=0xfe;
  95   1              usbstack.setup.wValue=0;
  96   1              usbstack.setup.wIndex=0;
  97   1              usbstack.setup.wLength=1;
  98   1              usbstack.buffer=DBUF;
  99   1              return ep0Xfer();
 100   1      
 101   1      }
 102          
 103          unsigned char SPC_Inquiry(void)
 104          {
 105   1      #define cdbInquirySPC RBC_CDB.SpcCdb_Inquiry
 106   1              //unsigned char len;
 107   1              //unsigned char retStatus=FALSE;
 108   1              TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
 109   1              TPBulk_CBW.dCBW_Tag=0x60a624de;
 110   1              TPBulk_CBW.dCBW_DataXferLen=0x24000000;
 111   1              TPBulk_CBW.bCBW_Flag=0x80;
 112   1              TPBulk_CBW.bCBW_LUN=0;
 113   1              TPBulk_CBW.bCBW_CDBLen=sizeof(INQUIRY_SPC);
 114   1              
 115   1              /////////////////////////////////
 116   1              cdbInquirySPC.OperationCode=SPC_CMD_INQUIRY;
 117   1              cdbInquirySPC.EnableVPD=0;
C51 COMPILER V7.06   TPBULK                                                                01/14/2008 22:33:39 PAGE 3   

 118   1              cdbInquirySPC.CmdSupportData=0;
 119   1              cdbInquirySPC.PageCode=0;
 120   1              cdbInquirySPC.AllocationLen=0x24;
 121   1              cdbInquirySPC.Control=0;
 122   1              ////////////////////////////////
 123   1              //if(!epBulkRcv(DBUF,5))
 124   1              //      return FALSE;
 125   1              if(!epBulkSend((unsigned char *)&TPBulk_CBW,sizeof(TPBulk_CBW)))
 126   1                      return FALSE;
 127   1              DelayMs(150);
 128   1              //len=36;
 129   1              if(!epBulkRcv(DBUF,38))
 130   1                      return FALSE;
 131   1              if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
 132   1                      return FALSE;
 133   1              ////////////////////////////////
 134   1              return TRUE;    
 135   1      #undef cdbInquirySPC
 136   1      }
 137          
 138          unsigned char SPC_READLONG(void)
 139          {
 140   1      #define cdbReadLong RBC_CDB.SpcCdb_ReadLong     
 141   1              //nsigned char retStatus=FALSE;
 142   1              TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
 143   1              TPBulk_CBW.dCBW_Tag=0x60a624de;
 144   1              TPBulk_CBW.dCBW_DataXferLen=0xfc000000;
 145   1              TPBulk_CBW.bCBW_Flag=0x80;
 146   1              TPBulk_CBW.bCBW_LUN=0;
 147   1              TPBulk_CBW.bCBW_CDBLen=sizeof(READ_LONG_CMD);
 148   1              
 149   1              /////////////////////////////////////
 150   1              cdbReadLong.OperationCode=SPC_CMD_READLONG;
 151   1              cdbReadLong.LogicalUnitNum=0;
 152   1              cdbReadLong.AllocationLen=0xfc;
 153   1              //////////////////////////////////////
 154   1              if(!epBulkSend((unsigned char *)&TPBulk_CBW,sizeof(TPBulk_CBW)))
 155   1                      return FALSE;
 156   1              DelayMs(5);
 157   1              //len=36;
 158   1              if(!epBulkRcv(DBUF,0xfc))
 159   1                      return FALSE;
 160   1              
 161   1              if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
 162   1                      return FALSE;
 163   1        ////////////////////////////
 164   1        return TRUE;
 165   1      #undef cdbReadLong
 166   1      }
 167          unsigned char SPC_RequestSense(void)
 168          {
 169   1      #define cdbRequestSenseSPC RBC_CDB.SpcCdb_RequestSense  
 170   1              //unsigned char retStatus=FALSE;
 171   1              TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
 172   1              TPBulk_CBW.dCBW_Tag=0x60a624de;
 173   1              TPBulk_CBW.dCBW_DataXferLen=0x0e000000;
 174   1              TPBulk_CBW.bCBW_Flag=0x80;

⌨️ 快捷键说明

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