以优盘为存储介质的mp3播放器设计

[10-10 20:38:44]   来源:http://www.88dzw.com  电子制作   阅读:8302

文章摘要: 2 软件设计 2.1 优盘读写软件的实现 USB组织定义了海量存储设备类(mass storage class)的规范。这个类规范包括4个独立的子类规范: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。其中优盘属于海

以优盘为存储介质的mp3播放器设计,标签:电子小制作,http://www.88dzw.com

       2  软件设计

       2.1  优盘读写软件的实现

       USB组织定义了海量存储设备类(mass storage class)的规范。这个类规范包括4个独立的子类规范: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。其中优盘属于海量存储设备,遵循bulkonly传输协议,子类采用UFI命令集。本设计软件的总体结构如图3所示。其中两条点画线之间的部分为读/写优盘的软件结构。

软件总体结构图

       2.1.1  USB物理层协议的实现

   
  该部分实现S3C44B0X对SL811HS芯片的直接底层数据的读写,包括对SL811HS的初始化及读/写一个字节的函数。限于篇幅,此处只列出对SL811HS芯片的初始化程序:

      /*********************************
        函数名称:SL811_Init
        函数功能:初始化SL811HS芯片
        输入参数:无
        返回值:无
      *********************************/
      void SL811_Init(void){
        //初始化U盘为未插入状态
        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;
        //允许硬件产生SOF(Start of Frame)
        SL811Write(CtrlReg,0x04);
        DelayMs(100);
        SL811Write(CtrlReg,0x01);
        //设置SOF,1 ms中断
        SL811Write(cDATASet,0xe0);
        //设置为主机工作模式
        SL811Write(cSOFcnt,0xae);
        SL811Write(EP0Status,0x50);
        //地址设为0
        SL811Write(EP0Counter,0);
        //允许数据发送

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

       2.1.2  USB设备协议层的实现

      
该部分实现对优盘扇区的直接读写,其中两个很重要的函数为Bulkin和Bulkout。此处只列出Bulkin函数的实现:

       /**********************************
        函数名称:epB ulkRcv
        函数功能:实现bulkonly协议中的Bulkin函数
        输入参数:pBuffer为数据的地址,len为数据的长度
        返回值:TRUE为成功,FALSE为失败
      **********************************/
      unsigned char epBulkRcv(unsigned char *pBuffer,unsigned int len){
          usbstack.usbaddr=0x1;
          usbstack.endpoint=usbstack.epbulkin;
          usbstack.pid=PID_IN;
          //设置包长度为64
          usbstack.wPayload=64;
          usbstack.wLen=len;
          usbstack.buffer=pBuffer;
          if(usbstack.wLen){
            if(!usbXfer())
            return FALSE;
          }
        return TRUE;
      }

      

上一页  [1] [2] [3]  下一页


Tag:电子制作电子小制作维修教程知识 - 电子制作

《以优盘为存储介质的mp3播放器设计》相关文章