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

📄 sl811.lst

📁 用C51编的SL811读写U盘的源程序,包含原理图
💻 LST
📖 第 1 页 / 共 5 页
字号:
 349   2                      len-=usbstack.wLen;
 350   2                      usbstack.buffer=usbstack.buffer+usbstack.wLen;
 351   2                      //DelayUs(10);
 352   2              }
 353   1              return TRUE;    
 354   1      }
 355          
 356          unsigned char epBulkRcv(unsigned char *pBuffer,unsigned int len)
 357          {
 358   1              usbstack.usbaddr=0x1;
 359   1              usbstack.endpoint=usbstack.epbulkin;
 360   1              usbstack.pid=PID_IN;
 361   1              usbstack.wPayload=64;
 362   1              usbstack.wLen=len;
 363   1              usbstack.buffer=pBuffer;
 364   1              if(usbstack.wLen)
C51 COMPILER V7.06   SL811                                                                 01/14/2008 22:33:40 PAGE 7   

 365   1              {
 366   2                      if(!usbXfer())
 367   2                              return FALSE;
 368   2              }
 369   1              return TRUE;
 370   1      }
 371          //*****************************************************************************************
 372          // Control endpoint
 373          //*****************************************************************************************
 374          //void VendorCmd(void)
 375          //{ 
 376          //      ep0Xfer();
 377          //}
 378          
 379          //*****************************************************************************************
 380          // Set Device Address : 
 381          //*****************************************************************************************
 382          unsigned char SetAddress(unsigned char addr)
 383          {
 384   1              usbstack.usbaddr=0;
 385   1              usbstack.setup.bmRequest=0;
 386   1              usbstack.setup.bRequest=SET_ADDRESS;
 387   1              usbstack.setup.wValue=addr;
 388   1              usbstack.setup.wIndex=0;
 389   1              usbstack.setup.wLength=0;
 390   1              //usbstack.buffer=&usbstack.setup;
 391   1              return ep0Xfer();
 392   1      
 393   1      }
 394          
 395          //*****************************************************************************************
 396          // Set Device Configuration : 
 397          //*****************************************************************************************
 398          unsigned char Set_Configuration(void)
 399          {
 400   1              //usbstack.usbaddr=usbaddr;
 401   1              //usbstack.
 402   1              usbstack.setup.bmRequest=0;
 403   1              usbstack.setup.bRequest=SET_CONFIG;
 404   1              //usbstack.setup.wValue=wVal;
 405   1              usbstack.setup.wIndex=0;
 406   1              usbstack.setup.wLength=0;
 407   1              usbstack.buffer=NULL;
 408   1              return ep0Xfer();
 409   1      
 410   1      }
 411          
 412          //*****************************************************************************************
 413          // Get Device Descriptor : Device, Configuration, String
 414          //*****************************************************************************************
 415          unsigned char GetDesc(void)
 416          { 
 417   1              
 418   1              usbstack.setup.bmRequest=0x80;
 419   1              usbstack.setup.bRequest=GET_DESCRIPTOR;
 420   1              usbstack.setup.wValue=WordSwap(usbstack.setup.wValue);
 421   1              
 422   1              usbstack.wPayload=uDev.wPayLoad[0];
 423   1              //usbstack.buffer=&usbstack.setup;
 424   1              return ep0Xfer();
 425   1      }
 426          
C51 COMPILER V7.06   SL811                                                                 01/14/2008 22:33:40 PAGE 8   

 427          //*****************************************************************************************
 428          // USB Data Endpoint Read/Write
 429          // wLen is in low byte first format
 430          //*****************************************************************************************
 431          /*
 432          unsigned char DataRW(BYTE epaddr)
 433          {
 434                  //xdata BYTE pid = PID_OUT;
 435          
 436                  usbstack.pid=PID_OUT;
 437                  usbstack.endpoint=epaddr&0x0F;
 438                  
 439                  if(epaddr & 0x80)       // get direction of transfer
 440                          usbstack.pid = PID_IN;                          
 441                  
 442                  if(usbXfer())
 443                          return TRUE;
 444          
 445                  return FALSE;
 446          }
 447          */
 448          
 449          //*****************************************************************************************
 450          // USB Device Enumeration Process
 451          // Support 1 confguration and interface #0 and alternate setting #0 only
 452          // Support up to 1 control endpoint + 4 data endpoint only
 453          //*****************************************************************************************
 454          unsigned char EnumUsbDev(BYTE usbaddr)
 455          {  
 456   1              unsigned char i;                                                                                        // always reset USB transfer address 
 457   1              unsigned char uAddr = 0;                                                        // for enumeration to Address #0
 458   1              unsigned char epLen;
 459   1              //unsigned short strLang;
 460   1              
 461   1              pDevDesc  pDev; 
 462   1              pCfgDesc pCfg;
 463   1              pIntfDesc pIfc;
 464   1              pEPDesc pEnp;
 465   1              //------------------------------------------------
 466   1              // Reset only Slave device attached directly
 467   1              //------------------------------------------------
 468   1              uDev.wPayLoad[0] = 64;  // default 64-byte payload of Endpoint 0, address #0
 469   1              if(usbaddr == 1)                // bus reset for the device attached to SL811HS only
 470   1                      USBReset();             // that will always have the USB address = 0x01 (for a hub)
 471   1              
 472   1              DelayMs(25);
 473   1              
 474   1              //i = SL811Read(EP0Status);     
 475   1              //i=SL811Read(IntStatus);
 476   1              //------------------------------------------------
 477   1              // Get USB Device Descriptors on EP0 & Addr 0
 478   1              // with default 64-byte payload
 479   1              //------------------------------------------------
 480   1              pDev =(pDevDesc)DBUF;                                   // ask for 64 bytes on Addr #0
 481   1              
 482   1              usbstack.usbaddr=uAddr;
 483   1              usbstack.setup.wValue=DEVICE;
 484   1              usbstack.setup.wIndex=0;
 485   1              usbstack.setup.wLength=18;
 486   1              //usbstack.setup.wLength=sbstack.setup.wLength);
 487   1              usbstack.buffer=DBUF;
 488   1              
C51 COMPILER V7.06   SL811                                                                 01/14/2008 22:33:40 PAGE 9   

 489   1              if (!GetDesc())                 // and determine the wPayload size
 490   1                      return FALSE;                                                           // get correct wPayload of Endpoint 0
 491   1              uDev.wPayLoad[0]=pDev->bMaxPacketSize0;// on current non-zero USB address
 492   1      
 493   1              //------------------------------------------------
 494   1              // Set Slave USB Device Address
 495   1              //------------------------------------------------
 496   1              if (!SetAddress(usbaddr))                                               // set to specific USB address
 497   1                      return FALSE;                                                           //
 498   1              uAddr = usbaddr;                                                                // transfer using this new address
 499   1      
 500   1              //------------------------------------------------
 501   1              // Get USB Device Descriptors on EP0 & Addr X
 502   1              //------------------------------------------------
 503   1              pDev =(pDevDesc)DBUF;
 504   1              usbstack.usbaddr=uAddr;
 505   1              
 506   1              usbstack.setup.wLength=pDev->bLength;
 507   1              usbstack.setup.wValue=DEVICE;
 508   1              usbstack.setup.wIndex=0;
 509   1              
 510   1              //usbstack.setup.wLength=0x12;//(unsigned short)DBUF[0];//pDev->bLength;
 511   1              usbstack.buffer=DBUF;
 512   1              
 513   1              if (!GetDesc())         
 514   1                      return FALSE;                                                           // For this current device:
 515   1              uDev.wVID  = pDev->idVendor;                    // save VID
 516   1              uDev.wPID  = pDev->idProduct;                   // save PID
 517   1              uDev.iMfg  = pDev->iManufacturer;               // save Mfg Index
 518   1              uDev.iPdt  = pDev->iProduct;                    // save Product Index
 519   1      
 520   1              //------------------------------------------------
 521   1              // Get String Descriptors
 522   1              //------------------------------------------------
 523   1              /*
 524   1              pStr = (pStrDesc)DBUF;  
 525   1              
 526   1              usbstack.usbaddr=uAddr;

⌨️ 快捷键说明

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