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

📄 usb_disk.lst

📁 32M 优盘源码 AT89C51SND1C K9F5608
💻 LST
📖 第 1 页 / 共 3 页
字号:
 341   3                        while(!(UEPSTAX&TXCMP));
 342   3                        UEPSTAX&=(~(TXCMP));
 343   3                }
 344   2                length--;     
 345   2                BLK.Block ++;
 346   2           }
 347   1        TransmitCSW();
 348   1      }
 349          
 350          void SCSI_Write10()     
 351          {
 352   1          union
 353   1           {
 354   1                 unsigned long page;
 355   1                 unsigned char addr[4];
 356   1           }PG; 
 357   1      
 358   1          unsigned char i=0,length=0,nBeginPage=0;
 359   1      
 360   1              NfWriteCmd(0x60);
 361   1              NfWriteAddr(BuffBlock);
 362   1              NfWriteAddr(0xff);
 363   1              NfWriteCmd(0xd0);
 364   1      
C51 COMPILER V8.02   USB_DISK                                                              08/24/2008 00:08:02 PAGE 7   

 365   1          NfWaitBusy();
 366   1              
 367   1              NfWriteCmd(0x60);
 368   1              NfWriteAddr(BuffBlock|0x20);
 369   1              NfWriteAddr(0xff);
 370   1              NfWriteCmd(0xd0);
 371   1              
 372   1              PG.addr[2] = bulk_CBW.CBWCB[4];
 373   1              PG.addr[3] = bulk_CBW.CBWCB[5];
 374   1              length = bulk_CBW.CBWCB[8];
 375   1      
 376   1              nBeginPage = PG.addr[3]&0x1f;
 377   1              UEPNUM = 0x02;  
 378   1          NfWaitBusy();
 379   1      
 380   1          if(nBeginPage>0)
 381   1                {
 382   2                   for(i=0;i<nBeginPage;i++)
 383   2                       { 
 384   3                                NfWriteCmd(0x00);
 385   3                                NfWriteAddr(0);                        //A0-A7
 386   3                                NfWriteAddr((PG.addr[3]&0xe0)|i);     //A9-A16
 387   3                                NfWriteAddr(PG.addr[2]);                 //A17-A24
 388   3                        NfWaitBusy();
 389   3      
 390   3                                NfWriteCmd(0x8a);
 391   3                                NfWriteAddr(0);                                                         //A0-A7
 392   3                                NfWriteAddr(BuffBlock|(PG.addr[3]&0x20)|i); //A9-A16 
 393   3                        NfWriteAddr(0xff);                                              //A17-A24                                       
 394   3                        NfWaitBusy();
 395   3                       }
 396   2                       nBeginPage=0;
 397   2                }
 398   1      
 399   1              while(length>0)
 400   1                {
 401   2                       NfWriteCmd(0x80);
 402   2                   NfWriteAddr(0);                                                    //A0-A7  
 403   2                       NfWriteAddr((PG.addr[3]&0x3f)|BuffBlock);  //A9-A16  
 404   2                       NfWriteAddr(0xff);                                                     //A17-A24
 405   2                       for(i=0;i<8;i++)
 406   2                       {
 407   3                                while (!(UEPINT & EP2));      
 408   3                                WriteFlash();
 409   3                                UEPSTAX &= 0xB9;
 410   3                       }
 411   2                       NfWriteCmd(0x10);
 412   2                       length--;      
 413   2                       NfWaitBusy();
 414   2      
 415   2                   if(((PG.addr[3]&0x1f)==0x1f)||(length==0))
 416   2                       {
 417   3                               for(i=((PG.addr[3]&0x1f)+1);i<32;i++)
 418   3                       {
 419   4                                         NfWriteCmd(0x00);
 420   4                                              NfWriteAddr(0);                  //A0-A7
 421   4                                              NfWriteAddr((PG.addr[3]&0xe0)|i);       //A9-A16
 422   4                                              NfWriteAddr(PG.addr[2]);                   //A17-A24
 423   4                                      NfWaitBusy();
 424   4      
 425   4                                              NfWriteCmd(0x8a);
 426   4                                              NfWriteAddr(0);                                                   //A0-A7
C51 COMPILER V8.02   USB_DISK                                                              08/24/2008 00:08:02 PAGE 8   

 427   4                                              NfWriteAddr((PG.addr[3]&0x20)|BuffBlock|i); //A9-A16 
 428   4                                      NfWriteAddr(0xff);                                                //A17-A24                                       
 429   4                                      NfWaitBusy();
 430   4                        }
 431   3                                
 432   3                                NfWriteCmd(0x60);                      //擦除当前block
 433   3                                NfWriteAddr(PG.addr[3]);       //A9-A16
 434   3                                NfWriteAddr(PG.addr[2]);       //A17-A24
 435   3                                NfWriteCmd(0xd0);
 436   3                                NfWaitBusy();                           //等待操作完成        
 437   3      
 438   3                                for(i=0;i<32;i++)     
 439   3                                {
 440   4                                              NfWriteCmd(0x00);
 441   4                                              NfWriteAddr(0);                  //A0-A7
 442   4                                              NfWriteAddr((PG.addr[3]&0x20)|BuffBlock|i);     //A9-A16
 443   4                                              NfWriteAddr(0xff);                 //A17-A24
 444   4                                      NfWaitBusy();
 445   4      
 446   4                                              NfWriteCmd(0x8a);
 447   4                                              NfWriteAddr(0);                                                   //A0-A7
 448   4                                              NfWriteAddr((PG.addr[3]&0xe0)|i); //A9-A16 
 449   4                                      NfWriteAddr(PG.addr[2]);                                                  //A17-A24                                       
 450   4                                      NfWaitBusy();
 451   4                                }
 452   3      
 453   3                                if(length>0)
 454   3                                {
 455   4                                              NfWriteCmd(0x60);                                                       //擦除block
 456   4                                              NfWriteAddr((PG.addr[3]&0x20)|BuffBlock);        //A9-A16
 457   4                                              NfWriteAddr(0xff);                                                      //A17-A24
 458   4                                              NfWriteCmd(0xd0);
 459   4                                              NfWaitBusy();                             //等待操作完成    
 460   4                                      }
 461   3                         }
 462   2                        PG.page++;
 463   2                }
 464   1      
 465   1              TransmitCSW();  
 466   1      }       
 467          
 468          void main_rxdone()
 469          {
 470   1              unsigned char i;
 471   1              unsigned char Buf[64];
 472   1      
 473   1              i = ReadEp(2,Buf);
 474   1              bulk_CSW[4] = Buf[4];  bulk_CSW[5] = Buf[5]; bulk_CSW[6] = Buf[6]; bulk_CSW[7] = Buf[7];
 475   1              for(i=0;i<12;i++) bulk_CBW.CBWCB[i] = Buf[i+15];
 476   1              switch(bulk_CBW.CBWCB[0])
 477   1              {
 478   2                              case Inquiry                         :WriteEpBulk(1,36,B_InquiryData);break;
 479   2                              case Mode_Sense                      :SCSI_Mode_Sense();              break;
 480   2                              case Read10                                  :SCSI_Read10();                  break;
 481   2                              case Read_Capacity                   :WriteEpBulk(1, sizeof(B_Read_Capacity), B_Read_Capacity);break;
 482   2                              case Read_Format_Capacities      :SCSI_Read_Format_Capacities();  break;
 483   2                              case Test_Unit_Ready         :TransmitCSW();                  break;
 484   2                              case Verify                                  :TransmitCSW();                  break;
 485   2                              case Write10                         :SCSI_Write10();                 break;
 486   2                              case Medium_Removal                  :TransmitCSW();                  break;
 487   2                              //响应PC机删除U盘设备的命令
 488   2                              case Sync_Cache                          :TransmitCSW();                  break;
C51 COMPILER V8.02   USB_DISK                                                              08/24/2008 00:08:02 PAGE 9   

 489   2                              case Start_Unit                          :TransmitCSW();                  break;
 490   2              }
 491   1      }
 492          
 493          void Flash_Reset(void)                                               //flash reset
 494          { 
 495   1              uint i;
 496   1              NfWriteCmd(0xFF);
 497   1              for (i=0; i<3000; i++) ;                                         //delay        
 498   1      }
 499          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1384    ----
   CONSTANT SIZE    =    184    ----
   XDATA SIZE       =   ----      85
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     25      38
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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