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

📄 mscuser.lst

📁 LPC2142 虚拟U盘源程序 KEIL工程 This is a USB Memory Device demonstration for the Keil MCB2140 Board with
💻 LST
📖 第 1 页 / 共 5 页
字号:
  294   1        BulkBuf[ 1] = 0x00;
  295   1        BulkBuf[ 2] = 0x02;          /* Sense Key */
  296   1        BulkBuf[ 3] = 0x00;
  297   1        BulkBuf[ 4] = 0x00;
  298   1        BulkBuf[ 5] = 0x00;
  299   1        BulkBuf[ 6] = 0x00;
  300   1        BulkBuf[ 7] = 0x0A;          /* Additional Length */
  301   1        BulkBuf[ 8] = 0x00;
  302   1        BulkBuf[ 9] = 0x00;
  303   1        BulkBuf[10] = 0x00;
  304   1        BulkBuf[11] = 0x00;
  305   1        BulkBuf[12] = 0x30;          /* ASC */
  306   1        BulkBuf[13] = 0x01;          /* ASCQ */
  307   1        BulkBuf[14] = 0x00;
  308   1        BulkBuf[15] = 0x00;
  309   1        BulkBuf[16] = 0x00;
  310   1        BulkBuf[17] = 0x00;
  311   1      
  312   1        BulkLen = 18;
  313   1        DataInTransfer();
  314   1      }
  315          
  316          
  317          /*
  318           *  MSC SCSI Inquiry Callback
  319           *    Parameters:      None (global variables)
  320           *    Return Value:    None
  321           */
  322          
ARM COMPILER V2.53,  mscuser                                                               12/06/06  10:18:25  PAGE 6   

  323          void MSC_Inquiry (void) {
  324   1      
  325   1        if (!DataInFormat()) return;
  326   1      
  327   1        BulkBuf[ 0] = 0x00;          /* Direct Access Device */
  328   1        BulkBuf[ 1] = 0x80;          /* RMB = 1: Removable Medium */
  329   1        BulkBuf[ 2] = 0x00;          /* Version: No conformance claim to standard */
  330   1        BulkBuf[ 3] = 0x01;
  331   1      
  332   1        BulkBuf[ 4] = 36-4;          /* Additional Length */
  333   1        BulkBuf[ 5] = 0x80;          /* SCCS = 1: Storage Controller Component */
  334   1        BulkBuf[ 6] = 0x00;
  335   1        BulkBuf[ 7] = 0x00;
  336   1      
  337   1        BulkBuf[ 8] = 'M';           /* Vendor Identification */
  338   1        BulkBuf[ 9] = 'C';
  339   1        BulkBuf[10] = 'U';
  340   1        BulkBuf[11] = 'Z';
  341   1        BulkBuf[12] = 'o';
  342   1        BulkBuf[13] = 'n';
  343   1        BulkBuf[14] = 'e';
  344   1        BulkBuf[15] = ' ';
  345   1      
  346   1        BulkBuf[16] = 'L';           /* Product Identification */
  347   1        BulkBuf[17] = 'P';
  348   1        BulkBuf[18] = 'C';
  349   1        BulkBuf[19] = '2';
  350   1        BulkBuf[20] = '1';
  351   1        BulkBuf[21] = '4';
  352   1        BulkBuf[22] = '2';
  353   1        BulkBuf[23] = ' ';
  354   1        BulkBuf[24] = 'D';
  355   1        BulkBuf[25] = 'i';
  356   1        BulkBuf[26] = 's';
  357   1        BulkBuf[27] = 'k';
  358   1        BulkBuf[28] = ' ';
  359   1        BulkBuf[29] = ' ';
  360   1        BulkBuf[30] = ' ';
  361   1        BulkBuf[31] = ' ';
  362   1      
  363   1        BulkBuf[32] = '1';           /* Product Revision Level */
  364   1        BulkBuf[33] = '.';
  365   1        BulkBuf[34] = '0';
  366   1        BulkBuf[35] = ' ';
  367   1      
  368   1        BulkLen = 36;
  369   1        DataInTransfer();
  370   1      }
  371          
  372          
  373          /*
  374           *  MSC SCSI Mode Sense (6-Byte) Callback
  375           *    Parameters:      None (global variables)
  376           *    Return Value:    None
  377           */
  378          
  379          void MSC_ModeSense6 (void) {
  380   1      
  381   1        if (!DataInFormat()) return;
  382   1      
  383   1        BulkBuf[ 0] = 0x03;
  384   1        BulkBuf[ 1] = 0x00;
  385   1        BulkBuf[ 2] = 0x00;
  386   1        BulkBuf[ 3] = 0x00;
  387   1      
  388   1        BulkLen = 4;
ARM COMPILER V2.53,  mscuser                                                               12/06/06  10:18:25  PAGE 7   

  389   1        DataInTransfer();
  390   1      }
  391          
  392          
  393          /*
  394           *  MSC SCSI Mode Sense (10-Byte) Callback
  395           *    Parameters:      None (global variables)
  396           *    Return Value:    None
  397           */
  398          
  399          void MSC_ModeSense10 (void) {
  400   1      
  401   1        if (!DataInFormat()) return;
  402   1      
  403   1        BulkBuf[ 0] = 0x00;
  404   1        BulkBuf[ 1] = 0x06;
  405   1        BulkBuf[ 2] = 0x00;
  406   1        BulkBuf[ 3] = 0x00;
  407   1        BulkBuf[ 4] = 0x00;
  408   1        BulkBuf[ 5] = 0x00;
  409   1        BulkBuf[ 6] = 0x00;
  410   1        BulkBuf[ 7] = 0x00;
  411   1      
  412   1        BulkLen = 8;
  413   1        DataInTransfer();
  414   1      }
  415          
  416          
  417          /*
  418           *  MSC SCSI Read Capacity Callback
  419           *    Parameters:      None (global variables)
  420           *    Return Value:    None
  421           */
  422          
  423          void MSC_ReadCapacity (void) {
  424   1      
  425   1        if (!DataInFormat()) return;
  426   1      
  427   1        /* Last Logical Block */
  428   1        BulkBuf[ 0] = ((MSC_BlockCount - 1) >> 24) & 0xFF;
  429   1        BulkBuf[ 1] = ((MSC_BlockCount - 1) >> 16) & 0xFF;
  430   1        BulkBuf[ 2] = ((MSC_BlockCount - 1) >>  8) & 0xFF;
  431   1        BulkBuf[ 3] = ((MSC_BlockCount - 1) >>  0) & 0xFF;
  432   1      
  433   1        /* Block Length */
  434   1        BulkBuf[ 4] = (MSC_BlockSize >> 24) & 0xFF;
  435   1        BulkBuf[ 5] = (MSC_BlockSize >> 16) & 0xFF;
  436   1        BulkBuf[ 6] = (MSC_BlockSize >>  8) & 0xFF;
  437   1        BulkBuf[ 7] = (MSC_BlockSize >>  0) & 0xFF;
  438   1      
  439   1        BulkLen = 8;
  440   1        DataInTransfer();
  441   1      }
  442          
  443          
  444          /*
  445           *  MSC SCSI Read Format Capacity Callback
  446           *    Parameters:      None (global variables)
  447           *    Return Value:    None
  448           */
  449          
  450          void MSC_ReadFormatCapacity (void) {
  451   1      
  452   1        if (!DataInFormat()) return;
  453   1      
  454   1        BulkBuf[ 0] = 0x00;
ARM COMPILER V2.53,  mscuser                                                               12/06/06  10:18:25  PAGE 8   

  455   1        BulkBuf[ 1] = 0x00;
  456   1        BulkBuf[ 2] = 0x00;
  457   1        BulkBuf[ 3] = 0x08;          /* Capacity List Length */
  458   1      
  459   1        /* Block Count */
  460   1        BulkBuf[ 4] = (MSC_BlockCount >> 24) & 0xFF;
  461   1        BulkBuf[ 5] = (MSC_BlockCount >> 16) & 0xFF;
  462   1        BulkBuf[ 6] = (MSC_BlockCount >>  8) & 0xFF;
  463   1        BulkBuf[ 7] = (MSC_BlockCount >>  0) & 0xFF;
  464   1      
  465   1        /* Block Length */
  466   1        BulkBuf[ 8] = 0x02;          /* Descriptor Code: Formatted Media */
  467   1        BulkBuf[ 9] = (MSC_BlockSize >> 16) & 0xFF;
  468   1        BulkBuf[10] = (MSC_BlockSize >>  8) & 0xFF;
  469   1        BulkBuf[11] = (MSC_BlockSize >>  0) & 0xFF;
  470   1      
  471   1        BulkLen = 12;
  472   1        DataInTransfer();
  473   1      }
  474          
  475          
  476          /*
  477           *  MSC Get Command Block Wrapper Callback
  478           *    Parameters:      None (global variables)
  479           *    Return Value:    None
  480           */
  481          
  482          void MSC_GetCBW (void) {
  483   1        DWORD n;
  484   1      
  485   1        for (n = 0; n < BulkLen; n++) {
  486   2          *((BYTE *)&CBW + n) = BulkBuf[n];
  487   2        }
  488   1        if ((BulkLen == sizeof(CBW)) && (CBW.dSignature == MSC_CBW_Signature)) {
  489   2          /* Valid CBW */
  490   2          CSW.dTag = CBW.dTag;
  491   2          CSW.dDataResidue = CBW.dDataLength;
  492   2          if ((CBW.bLUN != 0) || (CBW.bCBLength < 1) || CBW.bCBLength > 16) {
  493   3      fail: CSW.bStatus = CSW_CMD_FAILED;
  494   3            MSC_SetCSW();
  495   3          } else {
  496   3            switch (CBW.CB[0]) {
  497   4              case SCSI_TEST_UNIT_READY:
  498   4                MSC_TestUnitReady();
  499   4                break;
  500   4              case SCSI_REQUEST_SENSE:
  501   4                MSC_RequestSense();
  502   4                break;
  503   4              case SCSI_FORMAT_UNIT:
  504   4                goto fail;
  505   4              case SCSI_INQUIRY:
  506   4                MSC_Inquiry();
  507   4                break;
  508   4              case SCSI_START_STOP_UNIT:
  509   4                goto fail;
  510   4              case SCSI_MEDIA_REMOVAL:
  511   4                goto fail;
  512   4              case SCSI_MODE_SELECT6:
  513   4                goto fail;
  514   4              case SCSI_MODE_SENSE6:
  515   4                MSC_ModeSense6();
  516   4                break;
  517   4              case SCSI_MODE_SELECT10:
  518   4                goto fail;
  519   4              case SCSI_MODE_SENSE10:
  520   4                MSC_ModeSense10();
ARM COMPILER V2.53,  mscuser                                                               12/06/06  10:18:25  PAGE 9   

  521   4                break;
  522   4              case SCSI_READ_FORMAT_CAPACITIES:
  523   4                MSC_ReadFormatCapacity();
  524   4                break;
  525   4              case SCSI_READ_CAPACITY:
  526   4                MSC_ReadCapacity();
  527   4                break;
  528   4              case SCSI_READ10:
  529   4                if (MSC_RWSetup()) {
  530   5                  if ((CBW.bmFlags & 0x80) != 0) {
  531   6                    IOSET1 = LED_RD;    /* Turn On Read LED */
  532   6                    BulkStage = MSC_BS_DATA_IN;
  533   6                    MSC_MemoryRead();
  534   6                  } else {
  535   6                    USB_SetStallEP(MSC_EP_OUT);
  536   6                    CSW.bStatus = CSW_PHASE_ERROR;
  537   6                    MSC_SetCSW();
  538   6                  }
  539   5                }
  540   4                break;
  541   4              case SCSI_WRITE10:
  542   4                if (MSC_RWSetup()) {
  543   5                  if ((CBW.bmFlags & 0x80) == 0) {
  544   6                    IOSET1 = LED_WR;    /* Turn On Write LED */
  545   6                    BulkStage = MSC_BS_DATA_OUT;
  546   6                  } else {
  547   6                    USB_SetStallEP(MSC_EP_IN);
  548   6                    CSW.bStatus = CSW_PHASE_ERROR;
  549   6                    MSC_SetCSW();
  550   6                  }
  551   5                }
  552   4                break;
  553   4              case SCSI_VERIFY10:
  554   4                if (MSC_RWSetup()) {
  555   5                  if ((CBW.bmFlags & 0x80) == 0) {
  556   6                    BulkStage = MSC_BS_DATA_OUT;
  557   6                    MemOK = TRUE;
  558   6                  } else {
  559   6                    USB_SetStallEP(MSC_EP_IN);
  560   6                    CSW.bStatus = CSW_PHASE_ERROR;
  561   6                    MSC_SetCSW();
  562   6                  }
  563   5                }
  564   4                break;
  565   4              default:
  566   4                goto fail;
  567   4            }
  568   3          }
  569   2        } else {
  570   2          /* Invalid CBW */
  571   2          USB_SetStallEP(MSC_EP_IN);
  572   2          USB_SetStallEP(MSC_EP_OUT);
  573   2          BulkStage = MSC_BS_ERROR;
  574   2        }
  575   1      }
  576          
  577          
  578          /*
  579           *  MSC Set Command Status Wrapper Callback
  580           *    Parameters:      None (global variables)
  581           *    Return Value:    None
  582           */
  583          
  584          void MSC_SetCSW (void) {
  585   1      
  586   1        CSW.dSignature = MSC_CSW_Signature;
ARM COMPILER V2.53,  mscuser                                                               12/06/06  10:18:25  PAGE 10  

  587   1        USB_WriteEP(MSC_EP_IN, (BYTE *)&CSW, sizeof(CSW));
  588   1        BulkStage = MSC_BS_CSW;
  589   1      }
  590          
  591          
  592          /*
  593           *  MSC Bulk In Callback
  594           *    Parameters:      None (global variables)

⌨️ 快捷键说明

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