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

📄 bulk_only.lst

📁 用89C51SND1C实现的USB存储器的代码,包括USB通信和FLASH的读写操作.
💻 LST
📖 第 1 页 / 共 2 页
字号:
 118                                                                  //Removable Block Access Capabilities Page
 119                                                                  0x1b,   //Page Code
 120                                                                  0x0a,   //Page Length
 121                                                                  0,//0x80,       //SFLP=1
 122                                                                  0x01,   //TLUN=1
 123                                                                  0,0,0,0,0,0,0,0//Reserved 保留
 124                                                                  };
 125          */
 126          
 127          code unsigned char B_Mode_Sense_ALL[]={0x0b,0x00,//Mode Data Length
 128                                                                  0x00,0x08,0x00,0x00,
 129                                                                  0x7d,0,0,0,0x02,0x00
 130                                                                  };
 131          /*
 132          code unsigned char B_Mode_Sense_TPP[]={0x00,0x0d,//Mode Data Length
 133                                                                  0x00,   //Medium Type Code
 134                                                                  0,//write enabled
 135                                                                  0,0,0,0,//reserved
 136                                                                  0x1c,0x06,0,0x05,0,0,0,0
 137                                                                  };
 138          */
 139          code unsigned char B_Mode_Sense_TPP[]={0xf0,0x00,//Mode Data Length
 140                                                                  05,00,00,00,00,0x0b,00,00,00,00,0x24,00,00,00,00,00
 141                                                                  };
 142          code unsigned char B_Mode_Sense_ZERO[]={0x00,0x06,//Mode Data Length
 143                                                                  0x00,   //Medium Type Code
 144                                                                  0,//write enabled
 145                                                                  0,0,0,0//reserved
 146          };
 147          unsigned char bulk_CSW[]={0x55,0x53,0x42,0x53,  // bytes 4 dCSWSignature
 148                                                  0x00,0x00,0x00,0x00,    //bytes 4  dCSWTag
 149                                                  0,0,0,0,                //bytes 4 dDataResiduce
 150                                                  0x00};                  //bCSWStatus  00=good state.
 151                                                  
 152          
 153          typedef struct _STRUCT_CBW
 154          {
 155                  unsigned char dCBWSignature[4];
 156                  unsigned char dCBWTag[4];       //dCBWTag of CBW
 157                  long unsigned int dCBWDataTransferLength;//dCBWDataTransferLength of CBW
 158                  unsigned char bmCBWFlags;
 159                  unsigned char bCBWLUN;
 160                  unsigned char bCBWCBLength;
 161                  unsigned char CBWCB[12];//for UFI Command all have 12bit
 162          } struct_CBW;
 163          
 164          struct_CBW bulk_CBW;
 165          
 166          void InterpretCBW()
 167          {
 168   1              int i;
 169   1      //      printu("InterpretCBW\n");
 170   1              
 171   1              bulk_CSW[4]                             =       Bulk_Out_Buf[4];
 172   1              bulk_CSW[5]                             =       Bulk_Out_Buf[5];
 173   1              bulk_CSW[6]                             =       Bulk_Out_Buf[6];
 174   1              bulk_CSW[7]                             =       Bulk_Out_Buf[7];
 175   1              
 176   1      //      for(i=0;i<4;i++) bulk_CBW.dCBWDataTransferLength = (bulk_CBW.dCBWDataTransferLength<<8) +*(EpBuf+11-i);
 177   1      //      bulk_CBW.bmCBWFlags                     =       *(EpBuf+12);
 178   1      //      bulk_CBW.bCBWLUN                                =       *(EpBuf+13)&0x0f;
 179   1      //      bulk_CBW.bCBWCBLength                   =       *(EpBuf+14)&0x1f;
C51 COMPILER V6.23a  BULK_ONLY                                                             11/27/2003 16:50:20 PAGE 4   

 180   1      
 181   1              for(i=0;i<12;i++)
 182   1              bulk_CBW.CBWCB  [i]                             =       Bulk_Out_Buf[i+15];
 183   1      //      printu("\n\nSCSI:");
 184   1      //      for(j=0;j<12;j++) {printuf("%x ",bulk_CBW.CBWCB[j]);}
 185   1      
 186   1              switch(bulk_CBW.CBWCB[0]){
 187   2      //              case 0x04                                               :SCSI_Reserved();break;
 188   2                      case Inquiry                                    :SCSI_Inquiry();break;
 189   2      //              case 0x55                                               :SCSI_Reserved();break;
 190   2                      case Mode_Sense                                 :SCSI_Mode_Sense();break;
 191   2                      case Read10                                             :SCSI_Read10();break;
 192   2      //              case 0xA8                                               :SCSI_Reserved();break;
 193   2                      case Read_Capacity                              :SCSI_Read_Capacity();break;
 194   2                      case Read_Format_Capacities             :SCSI_Read_Format_Capacities();break;
 195   2      //              case 0x03                                               :SCSI_Reserved();break;
 196   2      //              case 0x01                                               :SCSI_Reserved();break;
 197   2      //              case 0x2B                                               :SCSI_Reserved();break;
 198   2      //              case 0x1D                                               :SCSI_Reserved();break;
 199   2      //              case 0x1B                                               :SCSI_Reserved();break;
 200   2                      case Test_Unit_Ready                    :SCSI_Test_Unit_Ready();break;
 201   2                      case Verify                                             :SCSI_Verify();break;
 202   2                      case Write10                                    :SCSI_Write10();break;
 203   2      //              case 0xAA                                               :SCSI_Reserved();break;
 204   2      //              case 0x2E                                               :SCSI_Reserved();break;
 205   2                      case Medium_Removal                             :SCSI_Medium_Removal();break;
 206   2                      default                                                 :SCSI_Reserved();break;
 207   2              }
 208   1                      
 209   1      }
 210          
 211          void SCSI_Inquiry()
 212          {
 213   1      //      printu("SCSI_Inquiry\n");
 214   1              bulk_state = BULK_DATA_END;
 215   1              WriteEpBulk(1, sizeof(B_InquiryData), B_InquiryData);
 216   1      
 217   1      }
 218          
 219          
 220          void SCSI_Read_Format_Capacities()
 221          {
 222   1      //      printu("SCSI_Read_Format_Capacities\n");
 223   1                      if(bulk_CBW.CBWCB[7]==0 && bulk_CBW.CBWCB[8]==0)
 224   1                              return;
 225   1                      bulk_state = BULK_DATA_END;
 226   1                      WriteEpBulk(1, sizeof(B_Read_Format_capacities), B_Read_Format_capacities);
 227   1      }
 228          
 229          
 230          void SCSI_Read_Capacity()
 231          {
 232   1      //      printu("SCSI_Read_Capacity\n");
 233   1                      bulk_state = BULK_DATA_END;
 234   1                      WriteEpBulk(1, sizeof(B_Read_Capacity), B_Read_Capacity);
 235   1      
 236   1      }
 237          
 238          void SCSI_Read10()
 239          {
 240   1              int i;
 241   1      //      printu("SCSI_Read10\n");        
C51 COMPILER V6.23a  BULK_ONLY                                                             11/27/2003 16:50:20 PAGE 5   

 242   1      
 243   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 + -