<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 設(shè)計(jì)應(yīng)用 > 一種以優(yōu)盤為存儲(chǔ)介質(zhì)的MP3播放器設(shè)計(jì)

          一種以優(yōu)盤為存儲(chǔ)介質(zhì)的MP3播放器設(shè)計(jì)

          作者: 時(shí)間:2010-03-19 來(lái)源:網(wǎng)絡(luò) 收藏

            2 軟件設(shè)計(jì)

            2.1 讀寫軟件的實(shí)現(xiàn)

            USB組織定義了海量設(shè)備類(mass storage class)的規(guī)范。這個(gè)類規(guī)范包括4個(gè)獨(dú)立的子類規(guī)范:USB Mass Storage Class Control/Bulk/Interrupt (CBI) Transport 、USB Mass Storage Class BulkOnly Transport、USB Mass Storage Class ATA Command Block、USB Mass Storage Class UFI Command Specification。其中屬于海量設(shè)備,遵循bulkonly傳輸協(xié)議,子類采用UFI命令集。本設(shè)計(jì)軟件的總體結(jié)構(gòu)如圖3所示。其中兩條點(diǎn)畫線之間的部分為讀/寫的軟件結(jié)構(gòu)。

          軟件的總體結(jié)構(gòu)

            2.1.1 USB物理層協(xié)議的實(shí)現(xiàn)

            該部分實(shí)現(xiàn)S3C44B0X對(duì)SL811HS芯片的直接底層數(shù)據(jù)的讀寫,包括對(duì)SL811HS的初始化及讀/寫一個(gè)字節(jié)的函數(shù)。限于篇幅,此處只列出對(duì)SL811HS芯片的初始化程序:

            /*********************************
          函數(shù)名稱:SL811_Init
          函數(shù)功能:初始化SL811HS芯片
          輸入?yún)?shù):無(wú)
          返回值:無(wú)
          *********************************/
          void SL811_Init(void){
            //初始化U盤為未插入狀態(tài)
            bFlags.bits.SLAVE_ONLINE = FALSE;
            bFlags.bits.SLAVE_FOUND = FALSE;
            bFlags.bits.SLAVE_REMOVED = FALSE;
            bFlags.bits.SLAVE_ENUMERATED = FALSE;
            bFlags.bits.SLAVE_IS_ATTACHED = FALSE;
            //允許硬件產(chǎn)生SOF(Start of Frame)
            SL811Write(CtrlReg,0x04);
            DelayMs(100);
            SL811Write(CtrlReg,0x01);
            //設(shè)置SOF,1 ms中斷
            SL811Write(cDATASet,0xe0);
            //設(shè)置為主機(jī)工作模式
            SL811Write(cSOFcnt,0xae);
            SL811Write(EP0Status,0x50);
            //地址設(shè)為0
            SL811Write(EP0Counter,0);
            //允許數(shù)據(jù)發(fā)送

            SL811Write(EP0Control,0x01);
            SL811Write(IntEna,0x20);
            //清中斷
            SL811Write(IntStatus,INT_CLEAR);
          }

            2.1.2 USB設(shè)備協(xié)議層的實(shí)現(xiàn)

            該部分實(shí)現(xiàn)對(duì)優(yōu)盤扇區(qū)的直接讀寫,其中兩個(gè)很重要的函數(shù)為Bulkin和Bulkout。此處只列出Bulkin函數(shù)的實(shí)現(xiàn):

          /**********************************
          函數(shù)名稱:epB
          ulkRcv
          函數(shù)功能:實(shí)現(xiàn)bulkonly協(xié)議中的Bulkin函數(shù)
          輸入?yún)?shù):pBuffer為數(shù)據(jù)的地址,len為數(shù)據(jù)的長(zhǎng)度
          返回值:TRUE為成功,F(xiàn)ALSE為失敗
          **********************************/

          unsigned char epBulkRcv(unsigned char *pBuffer,unsigned int len){
              usbstack.usbaddr=0x1;
              usbstack.endpoint=usbstack.epbulkin;
              usbstack.pid=PID_IN;
              //設(shè)置包長(zhǎng)度為64
              usbstack.wPayload=64;
              usbstack.wLen=len;
              usbstack.buffer=pBuffer;
              if(usbstack.wLen){
                if(!usbXfer())
                return FALSE;
              }
            return TRUE;
          }



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();