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

📄 mscuser.lst

📁 将LPC2148通过自带的USB口配置为USB存储设备.
💻 LST
📖 第 1 页 / 共 5 页
字号:
  295   1        BulkBuf[12] = 0x30;          /* ASC */
  296   1        BulkBuf[13] = 0x01;          /* ASCQ */
  297   1        BulkBuf[14] = 0x00;
  298   1        BulkBuf[15] = 0x00;
  299   1        BulkBuf[16] = 0x00;
  300   1        BulkBuf[17] = 0x00;
  301   1      
  302   1        BulkLen = 18;
  303   1        DataInTransfer();
  304   1      }
  305          
  306          
  307          /*
  308           *  MSC SCSI Inquiry Callback
  309           *    Parameters:      None (global variables)
  310           *    Return Value:    None
  311           */
  312          
  313          void MSC_Inquiry (void) {
  314   1      
  315   1        if (!DataInFormat()) return;
  316   1      
  317   1        BulkBuf[ 0] = 0x00;          /* Direct Access Device */
  318   1        BulkBuf[ 1] = 0x80;          /* RMB = 1: Removable Medium */
  319   1        BulkBuf[ 2] = 0x00;          /* Version: No conformance claim to standard */
  320   1        BulkBuf[ 3] = 0x01;
  321   1      
  322   1        BulkBuf[ 4] = 36-4;          /* Additional Length */
ARM COMPILER V2.50a,  mscuser                                                              04/04/06  11:13:57  PAGE 6   

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

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

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

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

  587          
  588          void MSC_BulkIn (void) {
  589   1      
  590   1        switch (BulkStage) {
  591   2          case MSC_BS_DATA_IN:
  592   2            switch (CBW.CB[0]) {
  593   3              case SCSI_READ10:
  594   3                MSC_MemoryRead();
  595   3                break;
  596   3            }

⌨️ 快捷键说明

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