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

📄 mscuser.lst

📁 开发ARM,基于IAR环境下的C代码开发
💻 LST
📖 第 1 页 / 共 5 页
字号:
  294   1        BulkBuf[ 3] = 0x00;
  295   1        BulkBuf[ 4] = 0x00;
  296   1        BulkBuf[ 5] = 0x00;
  297   1        BulkBuf[ 6] = 0x00;
  298   1        BulkBuf[ 7] = 0x0A;          /* Additional Length */
  299   1        BulkBuf[ 8] = 0x00;
  300   1        BulkBuf[ 9] = 0x00;
  301   1        BulkBuf[10] = 0x00;
  302   1        BulkBuf[11] = 0x00;
  303   1        BulkBuf[12] = 0x30;          /* ASC */
  304   1        BulkBuf[13] = 0x01;          /* ASCQ */
  305   1        BulkBuf[14] = 0x00;
  306   1        BulkBuf[15] = 0x00;
  307   1        BulkBuf[16] = 0x00;
  308   1        BulkBuf[17] = 0x00;
  309   1      
  310   1        BulkLen = 18;
  311   1        DataInTransfer();
  312   1      }
  313          
  314          
  315          /*
  316           *  MSC SCSI Inquiry Callback
  317           *    Parameters:      None (global variables)
  318           *    Return Value:    None
  319           */
  320          
  321          void MSC_Inquiry (void) {
  322   1      
ARM COMPILER V2.53,  mscuser                                                               24/09/06  22:23:19  PAGE 6   

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

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

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

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

  587   1      }
  588          
  589          
  590          /*
  591           *  MSC Bulk In Callback
  592           *    Parameters:      None (global variables)
  593           *    Return Value:    None
  594           */

⌨️ 快捷键说明

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