新闻中心

EEPW首页 > 设计应用 > 一种以优盘为存储介质的MP3播放器设计

一种以优盘为存储介质的MP3播放器设计

作者:时间:2010-03-19来源:网络收藏

  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;
}



关键词: MP3播放器 优盘 存储

评论


相关推荐

技术专区

关闭