摘要:针对现有车载MP3播放器的不足,设计了一个基于S3C2410芯片的μClinux环境下的车载MP3播放系统。详细介绍了嵌入式μClinux操作系统和由ARM9芯片S3C2410构建的MP3播放器的硬件结构和软件系统。
关键词:车载MP3; μClinux;S3C2410
中图分类号:TP311文献标识码:A 文章编号:1009-3044(2007)03-10756-02
1 引言
据有关机构统计,目前国内的汽车音响市场的销售额已经接近10亿人民币。根据国家汽车产业发展规划,到2010年,中国汽车市场产销量有望达到1000万辆,成为继美国之后的第二大汽车生产和消费大国,因此,与此相应的汽车音响的市场潜力将会高达100亿元左右[1]。自从车载MP3出现以后,车载娱乐产品的热潮就一直不断高涨,功能也在不断翻新。目前有的车载随身娱乐产品除了将其中的MP3音乐甚至视频文件的声音也发射到汽车音响中。有分析人士预测,车载功能将成为高端随身娱乐产品的下一个标配功能,没有车载功能的产品将很快被更新换代。
目前车载MP3大部分都无法体现车载娱乐的高端性,主要存在的突出问题有以下三个方面:
首先,从存储容量上来看,随着车内音响开始不断追求多样化、时尚化和个性化,256MB的内存已经无法满足消费者的需求,即使1G的内存都难以应付日趋丰富的车内影音娱乐需求,只有支持更大容量的存储空间,并支持多种存储介质才是发展的方向。其次,车载产品应更加向智能化方向发展,简单的操作系统满足不了用户的需求,几个简单的按键无法满足用户所需的功能,就需要功能强大的用户接口。最后,车载MP3作为车载娱乐的一个部分,要考虑它的兼容性,与其它功能相结合。因此本文在此基础上设计了一款基于ARM嵌入式系统的车载MP3系统。
2 硬件平台介绍
一般MP3的设计都是基于DSP设计的,完全依赖DSP的处理能力,通过MP3定点或浮点解码程序实现MP3解码过程。在这种情况下,对DSP处理能力的要求比较高。如果要求微处理器能够处理包括播放MP3在内的多个进程,这将进一步对微处理器的处理能力提出更苛刻的要求。目前基于嵌入式ARM的MP3播放器设计的研究比较少,成熟的产品如Philips公司的SAA7750、Portalplayer公司的PP5002、μMicronasμ公司的PUC3030Aμ等等,但这些产品针对性比较强,与其它车载娱乐设备无法兼容,包括国内东南大学国家专用集成电路系统工程技术研究中心研制的基于ARM7TDMI的MP3的SOC设计。本文设计的车载MP3考虑作为车载娱乐的一个部分,设计基于S3C2410芯片的μClinux环境下的MP3播放系统。由于该芯片的功能强大,并且基于μClinux操作系统下本身作为用户程序的一个部分,与其它设备有很好的兼容性。
S3C2410处理器是Samsung公司基于ARM公司的ARM920T处理器核,采用0.18um制造工艺的32位微控制器。该处理器资源丰富,拥有独立的16KB指令Cache和16KB数据Cache,MMU,支持TFT的LCD控制器,NAND闪存控制器,3路UART,4路DMA,4路带PWM的Timer ,I/O口,RTC,8路10位ADC,Touch Screen接口,IIC-BUS 接口,IIS-BUS 接口,2个USB主机,1个USB设备,SD主机和MMC接口,2路SPI。S3C2410处理器最高可运行在203MHz。
3 嵌入式μClinux操作系统
为了使系统具有任务管理、定时器管理、存储器管理、资源管理、事件管理、系统管理、消息管理、队列管理和中断处理的能力,提供多任务处理,更好的分配系统资源的功能,用户就需要针对自己的硬件平台和实际应用选择适当的嵌入式操作系统(Embedded Operating System,以下简称EOS)。μClinux是一个完全符合GNU/GPL 公约的操作系统,完全开放代码,现在由Lineo公司支持维护。μClinux从Linux 2.0/2.4 内核派生而来,沿袭了主流Linux 的绝大部分特性。它是专门针对没有MMU 的CPU,并且为嵌入式系统做了许多小型化的工作。适用于没有虚拟内存或内存管理单元(MMU)的处理器,例如ARM7TDMI。它通常用于具有很少内存或Flash的嵌入式系统。μClinux是为了支持没有MMU 的处理器而对标准Linux 作出的修正。它保留了操作系统的所有特性,为硬件平台更好的运行各种程序提供了保证。在GNU 通用公共许可证(GNU GPL)的保证下,运行μClinux操作系统的用户可以使用几乎所有的Linux API函数,不会因为没有MMU而受到影响。由于μClinux在标准的Linux 基础上进行了适当的裁剪和优化,形成了一个高度优化的、代码紧凑的嵌入式Linux,虽然它的体积很小,μClinux仍然保留了Linux 的大多数的优点:稳定、良好的移植性、优秀的网络功能、完备的对各种文件系统的支持、以及标准丰富的API 等。Boot Loader:负责Linux 内核的启动,它用于初始化系统资源,包括SDRAM。这部分代码用于建立Linux 内核运行环境和从Flash 中装载初始化ramdisk。
内核初始化:Linux 内核的入口点是start_kernel()函数。它初始化内核的其他部分,包括捕获,IRQ 通道,调度,设备驱动,标定延迟循环,最重要的是能够fork “init”进程,以启动整个多任务环境。
系统调用函数/捕获函数:在执行完“init”程序后,内核对程序流不再有直接的控制权,此后,它的作用仅仅是处理异步事件(例如硬件中断)和为系统调用提供进程。
设备驱动:设备驱动占据了Linux 内核很大部分。同其他操作系统一样,设备驱动为它们所控制的硬件设备和操作系统提供接口。
文件系统:Linux 最重要的特性之一就是对多种文件系统的支持。这种特性使得Linux很容易地同其他操作系统共存。文件系统的概念使得用户能够查看存储设备上的文件和路径而无须考虑实际物理设备的文件系统类型。Linux 透明的支持许多不同的文件系统,将各种安装的文件和文件系统以一个完整的虚拟文件系统的形式呈现给用户。
4 基于μClinux环境下的MP3播放器设计
4.1 开发环境的建立
通常的嵌入式系统软件开发采用交叉编译调试的方式。交叉编译调试环境建立在宿主机(通过串口连接的宿主机PC)上,对应的开发板叫做目标板(即嵌入式ARM2410系统)。通常宿主机和目标板上的处理器不同,所以程序需要使用针对处理器特点的编译器才能生成在相应平台上可运行的代码。GNU编译器提供这样的功能,在编译时,可以选择开发所需的宿主机和目标机,从而建立开发环境。在进行嵌入式开发前的第一步工作就是把一台PC机作为宿主机开发机,并在其上安装指定的操作系统。对于嵌入式Linux,宿主机PC上应安装Linux系统。之后,在宿主机上建立交叉编译调试的开发环境。本文采用移植性很强的C语言在宿主机上编写MP3播放程序,再利用交叉编译调试工具编译链接生成可执行代码,最后向目标平台移植。
4.2 基于S3C2410的硬件结构
MP3就是采用国际标准MPEG中的第三层音频压缩模式,对声音信号进行压缩的一种格式。MPEG中的第三层音频压缩模式比第一层和第二层编码要复杂得多,但音质最高,可与CD音质相比。MP3播放器的主要作用是对压缩的MP3 数字音频进行解压,然后通过Codec 芯片进行数模转换转变成模拟信号,最后模拟音频经放大并低通滤波后到耳机输出,输出后就是我们听到的音乐了。 MP3 播放器主要由MP3 文件解码、文件存贮、文件下载接口和语音播放等部分构成。图2就是基于S3C2410的MP3播放器的硬件基本结构图。
图2 基于嵌入式的MP3播放器硬件结构简图
在μClinux环境下设备的驱动占据了Linux 内核很大部分。同其他操作系统一样,设备驱动为它们所控制的硬件设备和操作系统提供接口。针对硬件的改动,内核需要相应的调整,μClinux 内核源代码中对S3C2410片内特殊功能寄存器以及其他相关硬件信息的定义位于μClinux-Samsung\Linux-2.4.x\include\asm-armnommu\arch-samsung\hardware.h 文件中。在本次设计中关键部分就是基于S3C2410的MP3播放应用程序的移植和音频输出。
4.3 基于S3C2410的MP3播放应用程序的设计
图3所示为基于μClinux 嵌入式系统下应用程序的移植,在该系统下我们进行车载MP3播放器的设计,该播放软件包括MP3的解码、文件系统管理和用户GUI的开发,我们着重分析MP3的解码过程。
在嵌入式系统下,我们可以使用软件解码来解决这个问题,在使用RISC指令集的情况下,MP3的解码工作要求处理器至少具有40MIPS的运算能力,这就要求S3C2410的外部晶振在配置时需要注意这个问题。MP3的编码技术要求在编码时先对音频文件进行频谱分析,然后用过滤器滤掉噪音电平,接着通过量化的方式将剩下的每一位打散排列,最后形成具有较高压缩比的MP3 文件,并使压缩后的文件在回放时能够达到比较接近原音源的声音效果。
MP3 文件大体分为三部分:TAG_V2(ID3V2),Frame, TAG_V1(ID3V1),如表1所示,表2给出了每个FRAME的格式。
其中MAIN_DATA 部分长度是否变化决定于FRAMEHEADER 的bitrate 是否变化,一首MP3 歌曲,它有三个版本:96Kbps(96 千比特位每秒)、128Kbps 和192Kbps。Kbps(比特位速率),表明了音乐每秒的数据量,Kbps 值越高,音质越好,文件也越大,MP3 标准规定,不变的bitrate 的MP3 文件称作CBR,大多数MP3 文件都是CBR 的,而变化的bitrate 的MP3 文件称作VBR,每个FRAME 的长度都可能是变化的。针对MP3具体的解码程序本文不再展开。
4.4 音频输出
S3C2410通过IIS(Inter-IC Sound bus)总线与音频控制芯片UDA1380进行通信。IIS是菲利浦公司提出的串行数字音频总线协议。如图4所示,IIS 总线只处理声音数据,使用了四根串行总线:串行数据输入(IISDI)、串行数据输出(IISDO)、左右声道选择(IISLRCK)和串行位时钟(IISCLK)。由主控设备提供IISLRCK 和
(下转第780页)
(上接第757页)
IISCLK。放音时发送数据到UDA1380的IISSDI管脚,录音时从UDA1380的IISSDO管脚接收数据,采用DMA数据传输。系统通过IIS总线对UDA1380的各寄存器进行初始化。并通过UDA1380外接麦克风和耳机等音频输入输出设备。
图4 音频芯片接线图
为了实现全双工,数据传输使用两个DMA 通道。数据传输(以回放为例)先由内部总线送到内存,然后传到DMA控制器通道1,再通过IIS 控制器写入IIS总线并传输给音频芯片。DMA控制器通道2用来录音。所以在μClinux下对IIS的音频设备驱动程序包括对设备以及对应资源初始化和释放;读取应用程序传送给设备文件的数据并回送应用程序请求的数据。这需要在用户空间、内核空间、总线及外设之间传输数据。在对应的file_operations 中的open操作中要完成下列步骤:
(1)通过设置IIS 寄存器控制音频设备的初始化,并且初始化设备的工作参数(包括速度、声道、采样宽度);
(2)为设备分配DMA 通道;
(3)根据采样参数计算出缓存内段的大小(程序也可以指定缓存内段的大小)。
当缓存区和DMA 设置好后,读写操作主要对缓存操作。对设备的操作除了读写操作外,还有音频播放中的暂停和继续。这两个操作在ioctl 接口中实现,通过对相应的IIS 总线控制器(IISCON 寄存器)操作实现。在对音频操作时还要注意:一次采样得到的数据必须一次处理,否则不能正确播放数据。
5 结束语
车载MP3 播放器与传统MP3 播放器相比,具有许多优势,可以满足消费者对更高性能的需求,而且能够作为今后车载娱乐的解决方案。该系统还存在一些有待改善的地方。下一步将升级解码程序,实现视频播放功能;并在硬件开发的过程中不断小型化,以达到便携式应用的标准。
参考文献:
[1]胡晓女.消费电子市场增幅巨大车载MP3崭露头角[J].通信世界,2006,16:26.
[2]周立功.ARM与嵌入式系统基础教程[M].北京:北京航空航天大学出版社,2004.
[3]马忠梅.ARM嵌入式处理器结构与应用基础[M].北京:北京航空航天大学出版社,2002.
[4]李冰,孙建平,谭悦,张启勤. 基于嵌入式Linux与S3C2410的网络视频监控[J].华北电力大学学报,2006,33(4):9-11.
[5]曹玲芝,庞宏,崔光照.石军基于S3C2410的电话远程家电智能控制系统[J].电子科技大学学报,2006, 35(3):359-362.
[6]李昔华,丁明勇,李德文.基于嵌入式平台的车载数码系统[J].重庆工商大学学报,2006,23(2):169-172.
本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
推荐访问: 播放器 嵌入式系统 MP3