应用中的单片机读写U盘的程序可分成2大部分:应用程序和固件程序。应用程序完成系统的数据处理任务、外围控制等功能;固件程序处理底层的USB通讯协议、文件系统,数据在USB总线上的可靠传输和在U盘上的存取操作。CH375内置了处理海量存储设备的专用通信协议的固件,所以嵌入式系统的单片机可以通过CH375将U盘作为可移动的大容量存储器。数据读写只需要几条指令,而不需要详细了解USB通信协议。
U盘文件的读写方式采取扇区模式以扇区(每个扇区通常是512字节)为基本单位进行读写操作,从而将USB存储设备简化为一种外部数据存储器,单片机可以自由读写USB存储设备中的数据,也可以自由定义其数据结构。本文中单片机与U盘的通讯采用查询中断响应的方式进行,具体流程图如图3所示。
使用AVR编程工具软件ICCAVR编写系统C程序,CH375提供了已封装好的库函数CH375HF6.LIB,包含大量宏定义方便了编程。
下面列举一些CH375关键操作函数:CH375的初始化函数CH375Liblnit();查询U盘是否准备就绪函数CH375DiskReady();查询磁盘信息函数CH375DiskQuery();打开指定名称的文件或者目录CH375FileOpen();CH375FileCreate()为新建文件并打开,如果文件已经存在则先删除后再新建;CH375FileClose()为关闭当前文件;CH375FileReadX()以扇区为单位从当前文件读取数据,CH375FileWriteX()以扇区为单位向当前文件写入数据。
3.3 VSl003控制协议
VSl003通过一个工作于从模式的SPI串行总线与主机进行数据和控制信息的交流,控制信号和数据信号的传送分别采用xCS和xDCS作为同步信号。数据信号xDCS为低时通过串行接口传送音频数据,当控制信号xCS为低时通过串行接口传送控制命令,控制命令总是为16位,通过读/写不同的寄存器来实现对VSl003的控制。作为从机工作模式,VSl003通过一个信号线DREQ指示是否允许主机传送数据,当DREQ为高时,VSl003至少可以接受32 kB的数据或者控制命令。
下面介绍新模式下且SM-SDISHARE设置为O时VSl003通信协议的实现。图4描述了传送数据的工作时序,他以xDCS为同步信号,随着时钟信号的变化,数据根据控制命令的设置依次从高位或低位送出。控制命令协议包括1个控制指令字节、1个地址字节和1个16位数据字,每次读写控制可以操作1个寄存器。读命令和写命令分别为Ox03和Ox02,这2种控制命令的工作时序分别如图5,图6所示。
3.4播放MP3文件
首先完成对VSl003和SPI总线的初始化,然后等待系统从U盘存储介质中打开MP3文件,从中读取的一个扇区的数据放入Atmeag64L的512 B缓冲区中,然后将数据发往VSl003,解码芯片就会自动播放出流畅的音乐。由于VSl003有32 B的数据缓存区,一次可向其发32 B数据然后检查DREQ引脚,当DREQ为高时送下一个32 B数据,发完一个扇区的内容后再继续从U盘中读取下一个扇区内容,重复操作直到文件播放完为止。
4 结 语
将系统C程序通过ICCAVR编译成功后生成HEX可执行文件,再在AVRStudio编译器中用JTAG接口将编译好的可执行文件下载到目标板中,将U盘插入系统就会播放U盘中的MP3音乐,音质效果和播放的连贯性都很不错。此方案很好地实现了对U盘的识别和读取,突破了MP3播放器中解码器与存储器一体化的限制,只需使用更大容量的U盘就可以在原有硬件基础上增加存储容量,在音响和汽车电子及数据采集存储方面具有良好的应用前景。