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

📄 bulk_only.lst

📁 用89C51SND1C实现的USB存储器的代码,包括USB通信和FLASH的读写操作.
💻 LST
📖 第 1 页 / 共 2 页
字号:
 115                                                                  0,0,0,0,0,0,0,0//Reserved 保留
 116                                                                  };
 117          */
C51 COMPILER V6.23a  BULK_ONLY                                                             06/02/2003 09:51:31 PAGE 3   

 118          
 119          code unsigned char B_Mode_Sense_ALL[]={0x0b,0x00,//Mode Data Length
 120                                                                  0x00,0x08,0x00,0x00,
 121                                                                  0x7d,0,0,0,0x02,0x00
 122                                                                  };
 123          /*
 124          code unsigned char B_Mode_Sense_TPP[]={0x00,0x0d,//Mode Data Length
 125                                                                  0x00,   //Medium Type Code
 126                                                                  0,//write enabled
 127                                                                  0,0,0,0,//reserved
 128                                                                  0x1c,0x06,0,0x05,0,0,0,0
 129                                                                  };
 130          */
 131          code unsigned char B_Mode_Sense_TPP[]={0xf0,0x00,//Mode Data Length
 132                                                                  05,00,00,00,00,0x0b,00,00,00,00,0x24,00,00,00,00,00
 133                                                                  };
 134          code unsigned char B_Mode_Sense_ZERO[]={0x00,0x06,//Mode Data Length
 135                                                                  0x00,   //Medium Type Code
 136                                                                  0,//write enabled
 137                                                                  0,0,0,0//reserved
 138          };
 139          unsigned char bulk_CSW[]={0x55,0x53,0x42,0x53,  // bytes 4 dCSWSignature
 140                                                  0x00,0x00,0x00,0x00,    //bytes 4  dCSWTag
 141                                                  0,0,0,0,                //bytes 4 dDataResiduce
 142                                                  0x00};                  //bCSWStatus  00=good state.
 143                                                  
 144          
 145          typedef struct _STRUCT_CBW
 146          {
 147                  unsigned char dCBWSignature[4];
 148                  unsigned char dCBWTag[4];       //dCBWTag of CBW
 149                  long unsigned int dCBWDataTransferLength;//dCBWDataTransferLength of CBW
 150                  unsigned char bmCBWFlags;
 151                  unsigned char bCBWLUN;
 152                  unsigned char bCBWCBLength;
 153                  unsigned char CBWCB[12];//for UFI Command all have 12bit
 154          } struct_CBW;
 155          
 156          struct_CBW bulk_CBW;
 157          
 158          void InterpretCBW()
 159          {
 160   1              int i;
 161   1      //      printu("InterpretCBW\n");
 162   1              
 163   1              bulk_CSW[4]                             =       Bulk_Out_Buf[4];
 164   1              bulk_CSW[5]                             =       Bulk_Out_Buf[5];
 165   1              bulk_CSW[6]                             =       Bulk_Out_Buf[6];
 166   1              bulk_CSW[7]                             =       Bulk_Out_Buf[7];
 167   1              
 168   1      //      for(i=0;i<4;i++) bulk_CBW.dCBWDataTransferLength = (bulk_CBW.dCBWDataTransferLength<<8) +*(EpBuf+11-i);
 169   1      //      bulk_CBW.bmCBWFlags                     =       *(EpBuf+12);
 170   1      //      bulk_CBW.bCBWLUN                                =       *(EpBuf+13)&0x0f;
 171   1      //      bulk_CBW.bCBWCBLength                   =       *(EpBuf+14)&0x1f;
 172   1      
 173   1              for(i=0;i<12;i++)
 174   1              bulk_CBW.CBWCB  [i]                             =       Bulk_Out_Buf[i+15];
 175   1      //      printu("\n\nSCSI:");
 176   1      //      for(j=0;j<12;j++) {printuf("%x ",bulk_CBW.CBWCB[j]);}
 177   1      
 178   1              switch(bulk_CBW.CBWCB[0]){
 179   2      //              case 0x04                                               :SCSI_Reserved();break;
C51 COMPILER V6.23a  BULK_ONLY                                                             06/02/2003 09:51:31 PAGE 4   

 180   2                      case Inquiry                                    :SCSI_Inquiry();break;
 181   2      //              case 0x55                                               :SCSI_Reserved();break;
 182   2                      case Mode_Sense                                 :SCSI_Mode_Sense();break;
 183   2                      case Read10                                             :SCSI_Read10();break;
 184   2      //              case 0xA8                                               :SCSI_Reserved();break;
 185   2                      case Read_Capacity                              :SCSI_Read_Capacity();break;
 186   2                      case Read_Format_Capacities             :SCSI_Read_Format_Capacities();break;
 187   2      //              case 0x03                                               :SCSI_Reserved();break;
 188   2      //              case 0x01                                               :SCSI_Reserved();break;
 189   2      //              case 0x2B                                               :SCSI_Reserved();break;
 190   2      //              case 0x1D                                               :SCSI_Reserved();break;
 191   2      //              case 0x1B                                               :SCSI_Reserved();break;
 192   2                      case Test_Unit_Ready                    :SCSI_Test_Unit_Ready();break;
 193   2                      case Verify                                             :SCSI_Verify();break;
 194   2                      case Write10                                    :SCSI_Write10();break;
 195   2      //              case 0xAA                                               :SCSI_Reserved();break;
 196   2      //              case 0x2E                                               :SCSI_Reserved();break;
 197   2                      case Medium_Removal                             :SCSI_Medium_Removal();break;
 198   2                      default                                                 :SCSI_Reserved();break;
 199   2              }
 200   1                      
 201   1      }
 202          
 203          void SCSI_Inquiry()
 204          {
 205   1      //      printu("SCSI_Inquiry\n");
 206   1              bulk_state = BULK_DATA_END;
 207   1              WriteEpBulk(1, sizeof(B_InquiryData), B_InquiryData);
 208   1      
 209   1      }
 210          
 211          
 212          void SCSI_Read_Format_Capacities()
 213          {
 214   1      //      printu("SCSI_Read_Format_Capacities\n");
 215   1                      if(bulk_CBW.CBWCB[7]==0 && bulk_CBW.CBWCB[8]==0)
 216   1                              return;
 217   1                      bulk_state = BULK_DATA_END;
 218   1                      WriteEpBulk(1, sizeof(B_Read_Format_capacities), B_Read_Format_capacities);
 219   1      }
 220          
 221          
 222          void SCSI_Read_Capacity()
 223          {
 224   1      //      printu("SCSI_Read_Capacity\n");
 225   1                      bulk_state = BULK_DATA_END;
 226   1                      WriteEpBulk(1, sizeof(B_Read_Capacity), B_Read_Capacity);
 227   1      
 228   1      }
 229          
 230          void SCSI_Read10()
 231          {
 232   1              int i;
 233   1      //      printu("SCSI_Read10\n");        
 234   1      
 235   1              for(i=0;i<4;i++) Logical_Block_Address = (Logical_Block_Address<<8) +bulk_CBW.CBWCB[2+i];       //要传的数据的

⌨️ 快捷键说明

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