谢冬季,缪贤浩
(湖北理工学院 计算机学院,湖北 黄石 435003)
随着电子工业的蓬勃发展,计算机技术也逐步快速发展起来,尤其是微型单片机技术的发展,使人们日常生活更加方便,大到工业控制,小到家用电器都有单片机的影子[1],MP3播放器也不例外。采用AT89C51SND1C单片机和存储芯片K9F5608设计MP3播放器的U盘模块,后期可以根据需要进一步扩展MP3播放器模块。本设计是将USB接口与电脑连接,通过电脑完成K9F5608存储芯片的读写操作,最终实现U盘的存储功能。
硬件系统由AT89C51SND1C单片机、Flash K9F5608存储芯片、RS232调试接口、USB接口和电源稳压升压电路组成。AT89C51SND1C芯片包括MP3音频解码器、音频输出接口、通用串行总线接口、外插闪存卡接口、IDE/ATAH接口、串行外设接口、双线控制器、A/D控制器接口等模块[2]。其中AT89C51SND1C单片机包含了通用串行总线接口模块,因此大大简化了U盘模块设计的难度,为后期扩展MP3功能提供了条件;而Flash K9F5608存储芯片是非线性Nand Flash芯片,只有8位复位线,硬件接口比较简单,因此减小了电路设计的复杂度。综合考虑以上因素,本设计选用上述硬件系统实现存储模块的功能[3]。
主控电路如图1所示。主控电路实现控制存储芯片的读写以及USB通信。其中USBD+、USBD-引脚是USB接口的数据线,AD0~AD7引脚与存储芯片IO口相连。
图1 主控电路
存储电路如图2所示。图2中AD0到AD7为8位地址复用线,可分时传输地址,同时其也是数据传输线路,与AT89C51SND1C控制器中的AD0~AD7 相连接。FCLE为指令锁存允许线,FALE为地址锁存允许线,FCE为芯片启用线,nRD为读激活线,nWR为写激活线。
图2 存储电路
软件系统共分为4个模块:主控程序模块、UART通信模块、U盘控制程序模块和Flash读写模块。
主控程序模块是通过检测USB_INS(P3.4) 的电平来决定是否执行U盘功能以及是否进行对U盘程序的初始化工作,之后开始循环执行对应的功能。主控程序流程图如图3所示。
图3 主控程序流程图
UART通信模块是常规的经典设计模块,主要用于程序调试时帮助设计者了解程序的运行状态[4]。
USB存储的工作流程如下:插入U盘后,USB主机发出USB标准请求,USB设置相应的返回设备描述符等,主机获取设备相关信息后开始配置,U盘被主机确定为Bulk-Only的存储设备,再进入Bulk-Only传输模式,U盘控制程序流程图如图4所示。U盘控制程序具体实现步骤如下:
1)首先对单片机的USB硬件进行设置,其中包括时钟设置和使能USB部件设置。然后设置2个批量传输端点,对FIFO缓冲区进行复位操作,允许相应端点中断。
2)对AT89C51SND1C单片机的USBADDR寄存器中的FEN位初始化置为1,允许其对默认地址的配置过程进行响应。开始进入配置阶段,配置阶段即主机向设备索取各种描述符的过程。
3)当设备收到主机的请求后,会触发端点中断寄存器中的端点0对应的位,此时读取端点0的数据。接着对照USB标准设备请求的数据格式进行识别,转向相应的请求处理函数。
4)USB配置完成后,即可开始处理Bulk-Only传输中的SCSI-2命令解析。Bulk传输方式下有3种类型的数据在USB和设备之间传送,分别是命令块包、命令状态包和普通数据包。同时主机会向设备发出Inquiry、Read Capacity、Mode Sense这几个命令来告知主机设备存储器的具体情况,以创建一个可移动的存储设备。程序中要根据SCSI-2命令集中的几个命令返回参数,例如需要使用2个连续的奇偶Block作为缓冲区等,其中填充了和Flash逻辑结构相关的参数。
图4 U盘控制程序流程图
对Flash芯片的读过程是设置UEPNUM=0×01,即处理Bulk-In端点请求,需要注意USB每次可传输512 B的数据,但端点1只能传送64 B,所以共需要8次端点传输才能完成1次USB传输任务。数据传输完毕后返回CSW数据结构。Flash芯片写与读操作的不同在于,写Flash芯片必须先擦除再编程,并且每次至少擦除1个块,所以在程序中需要使用2个连续的奇偶Block作为缓冲区。对U盘写模块的设计可以分为如下几个步骤[5]:
1)指定2个连续的奇偶Block作为缓冲区的块擦除。
2)从命令块包中的命令块获取起始逻辑块号和长度,用来计算第M个块内的第N个页号。
3)指定端口2,如果N>0,即将第M个块中从0到N-1的所有页号都复制到缓冲区中。
4)计算M和N。如果数据长度为0,则写U盘过程完毕。若数据长度不为0,则从USB端点接收数据同时写入缓冲区的第N个页,数据长度减1。
5)如果缓冲区没有写满,则起始逻辑块加1,重新计算M和N;如果缓冲区已写满,即将第M个块中从第N+1到本块的最后一页都复制到对应缓冲区中,同时擦除第M个Block,将缓冲区所有页复制到第M个块中,然后返回步骤4继续进行计算。通过以上几个步骤即可完成基于AT89C51SND1C单片机MP3播放器的U盘模块设计。
利用AT89C51SND1C单片机和Flash K9F5608存储芯片设计MP3播放器的U盘模块,可以明显降低开发成本和提高开发效率。该电路设计实现快捷方便,软件实现结构清晰,可以作为U盘设计开发的首选方案之一。
参考文献
[1] 郭天祥.新概念51单片机C语言教程[M].北京:电子工业出版社,2009:21-31.
[2] 郑锋.51单片机典型应用开发范例大全[M].北京:中国铁道出版社,2011:22-26.
[3] 邹彦.DSP原理以及应用[M].北京:电子工业出版社,2012:6-15.
[4] 胡汉才.单片机原理及系统设计[M].北京:清华大学出版社,2002:359-442.
[5] 张景璐,于京,马泽民.51单片机项目教程[M].北京:人民邮电出版社,2010:121-139.