基于ARM的嵌入式网络收音机的设计
摘要:研究了一种基于
ARM处理器的嵌入式网络收音机的设计方案。该系统以
ARM处理器及其外围设备为硬件平台
,以嵌入式
Linux为操作系统,实现了网络收音、局域网共享音频文件和本地
SD/MMC卡内音频文件的播放功能,该系统还使用了无线网卡模块,通过
USB接口与系统连接。由于该系统运用嵌入式
Linux提供的
TCP/IP协议直接与网络电台的地址连接,所以省去
PC机,就可以轻松的收听全世界的网络电台,而且体积较小,移动方便。
关键字:嵌入式系统;
Linux;
ARM;网络收音
收音机作为接收广播的工具,经过漫长的发展过程,由单波段发展到多波段,由电子管,晶体管发展到集成电路,由机械调谐发展到数字调谐功能和质量有了长足的进步,在收音机这个家族中新的成员也在不断加入
,如卫星广播接收机等,当社会进入网络时代后
,便出现了网络收音机。但是这种收音机都是基于
PC机到应用软件,也就是说这种网络收音机不能脱离电脑,而本系统通过网络接口与英特网相连,在嵌入式
Linux提供的
TCP/IP协议的基础上直接访问网络电台的地址,实现收音的功能,因而使该嵌入式网络收音机无需
PC机,就可以方便的收听来自全世界的声音。
1系统的结构及工作原理
系统的硬件结构框图如图
1所示。本系统选用的
ARM处理器是
Sumsing(三星
)公司的一款
ARM9系列的芯片,型号为
S3C2410。有线网卡芯片采用
CS8900,该芯片是
Cirrus Logic公司生产的一种局域网处理芯片,它的封装是
100-pin TQFP,内部集成了
RAM、
10BASE-T收发滤波器,并且提供
8位和
16位两种接口。无线网络接口采用无线网卡模块,该模块为
USB接口,通过
USB接口与
S3C2410相连。
FLASH芯片采用
K9F5608,用来存储启动引导程序
U-boot、内核及文件系统,
SDRAM芯片采用
HY57V281620,作为该系统的内存。
LCD选用
16*4的字符型液晶显示模块,用来显示网络电台、音频文件名等相关信息。音频
D/A转换芯片选用具有
IIS接口的
UDA1341。
该系统的软件模型如图
2所示。系统以
S3C2410及其外围电路为硬件平台,嵌入式
uclinux和设备驱动程序为上层
mplayer播放器和用户应用程序提供软件平台。
图
1 硬件结构框图
图
2 软件模型
2 系统的硬件设计
2.1 S3C2410
S3C2410 芯片基于
ARM920T 内核,采用五级流水线和哈佛结构,提供
1.1MIPS/MHz 的性能,是高性能和低功耗的硬宏单元。
ARM920T 具有全性能的
MMU、指令和数据
Cache以及高速
AMBA总线接口。
作为
S3C2410 芯片的
CPU 芯核,
16/32 位
ARM920T RISC微处理器采用
0.18ì
m CMOS标准单元结构,具有独立的
16kB指令缓存和
16kB数据缓存。
S3C2410 内部结构较复杂,提供可扩展的功能模块较多,主要有
ARM920T 内核(
16-/32-bit RISC CPU),独立的
16kB 指令和
16kB 数据缓存,
MMU虚拟内存管理单元,
LCD控制器(支持
STN和
TFT),
NAND flash boot loader,系统管理单元(
SDRAM控制器等),
3通道
UART,
4通道
DMA,
4通道具备
PWM 功能的定时器,
I/O 口,
RTC(实时时钟),
8通道
10bit精度
ADC和触摸屏控制器,
IIC总线接口,
IIS数字音频总线接口,
USB主机,
USB设备,
SD/MMC
卡控制器,
2通道
SPI 和
PLL数字锁相环组成。其内部结构如图
3所示。
图
3 S3C2410内部结构图
S3C2410提供了多种存储设备的接口,其中包括接
ROM、
SRAM、
SDRAM、
NOR Flash、
NAND Flash等,同时
S3C2410的外接存储空间被分为
8个
bank,每个容量为
128M。本系统中
Flash存储器(
Boot SRAM)、网络接口(
NET)、
LCD Frame Buffer和
SDRAM存储器分别映射到存储空间的
bank0、
bank1、
bank2和
bank6。如图
4所示。
图
4 存储空间映射
2.2 网络接口
本系统分为有线网络接口和无线网络接口,有线网络接口选用
CS8900芯片局域网处理芯片,其片选信号连接到
S3C2410的
nGCS1,因此网卡的地址空间映射到
0X08000000~0X0FFFFFFF。无线网络采用带有
USB接口的
WLAN(
Wireless Local Area Nerwork)卡,插入系统的
USB接口即可。
2.3 SDRAM存储器
HY57V28160是一个数据宽度为
16BIT,容量为
16M字节的
SDRAM芯片。
HY57V28160与
S3C2410的连接图如图
5所示。
图
5 HY57V28160电路图
SDRAM的地址空间映射到存储空间的
bank6,如图
5所示 ,
HY57V28160的
ncs引脚接到处理器的
nGCS6。由于在处理器的存储空间中,字节是存储容量的唯一单位。而
SDRAM(
HY57V28160)的数据宽度为
16,它的每一个存储单元都包含
2个字节。因此
SDRAM(
HY57V28160)的
A0引脚接到了
S3C2410处理器的地址线
ADDR01上面。
HY57V28160的容量为
16M(
2^24)字节,因此它需要
ADDR00~ADDR23共
24跟地址线来寻址,所以,
BA0~BA1引脚应该接到
ADDR22~ADDR23地址线上。
2.4 Flash存储器
本系统中,
Flahs存储器主要用于存储
U-boot、
Linux内核及文件系统。常见的
Flash存储器有
NOR Flash和
NAND Flash,两种
Flash各有优缺点。本系统综合考虑了各项因素,选用了
16M*16BIT的
NAND Flash,型号为K9F5608。系统启动时,
CPU从
0x00000000地址开始运行,所以要将
Flash的首地址映射到
0x00000000,因此该
Flash芯片的片选引脚要接到
nGCS0,其电路图设计如图
6所示。
图
6 nand flash电路图
3 系统的的软件设计
3.1 嵌入式Linux的移植
嵌入式
Linux内核的版本很多,一般情况下版本越高,系统越稳定,驱动更完善,本系统选择了
2.6.18的
Linux内核。其实对于
2.6以后版本的
Linux内核,对
S3C2410的支持都有了很好的支持,所以移植过程都比较简单。
Linux2.6.18移植到
S3C2410的基本过程如下:
(
1)、下载
Linux2.6.18内核,并解压到相应目录。
(
2)、修改内核顶层目录下的
Makefile文件,指明交叉编译器。进入
Linux-2.6.18内核目录,输入命令
vi Makefile,找到
ARCH和
CROSS_COMPILE两项,将其修改为
ARCH = arm,
CROSS_COMPILE = arm-linux-。
(
3)、设置
PATH环境变量,使其可以找到交叉编译工具。输入
su root,进入
root,在输入
vi /etc/bashrc,在结尾处加入以下行:
export PATH=/usr/local/arm/3.4.4/bin:$PATH,然后重启终端或重新登陆即可。
(
4)、设置
Flash分区。首先要在
arch/arm/mach-s3c2410/devs.c文件中添加分区信息,其次在
arch/arm/mach-s3c2410/mach-smdk2410.c文件的
smdk2410_devices[]的成员中添加
&s3c_device_nand。这样
Linux内核启动时,就会对
Flash分区的设置初始化。
(
5)、禁止
Flash ECC校验。修改
drivers/mtd/nand/s3c2410.c 文件,找到
s3c2410_nand_init_chip()函数,在该函数体最后加上一条语句:
chip->eccmode = NAND_ECC_NONE。
(
6)、配置内核。通过
make menuconfig命令配置内核。
(
7)、编译内核,
make zImage命令,得到
Linux内核的映像文件
zImage。
(
8)、制作根文件系统。
3.2 Mplayer移植
Mplayer是
Linux下的一个媒体播放器,它
对媒体格式的支持非常广泛,而且支持实时在线播放音视频流。Mplayer的移植过程如下:
(
1)、下载源代码
MPlayer-current.tar.bz2,并解压。
(2)、为了让mplayer支持在线播放,从而能够播放网络电台,还必须下载安装网络协议包(主要指RTSP、MMS等协议)。可从www.live555.com上下载live555协议包,解压后配置并编译。
(3)、配置mplayer。在命令行输入:
./configure --cc=arm-linux-gcc --target=arm-armv4-linux --enable-static --disable-win32 --disable-dvdread --enable-fbdev --disable-mencoder --disable-mp3lib --enable-mad --enable-libavcodec --enable-live --with-livedir=/live555的目录
/,其中,
--host-cc=gcc是用来编译一些需要在
host上执行的中间文件的,如
codec-cfg。
--cc=arm-linux-gcc如果没有将
arm-linux-gcc的位置加入到
$PATH中的话,在这个指定绝对路径好了。
--target=arm-armv4l-linux这个参数要注意的是一个分三部分,第一部分的
arm是指
arch,这里设定为
arm;第二部分的
armv4l是指具体的版本;第三部分是系统平台。
--enable-static是设定静态连接。最后的一个
2>&1 | tee logfile意思是将执行的情况在输出到屏幕的同时记录到
logfile文件中,在控制台下编译比较有用。
(4)、输入make命令开始编译,编译完成后在顶层目录生成mplayer可执行文件。
3.3系统软件主流程图
系统上电后,
bootloader(U-boot)启动,完成硬件设备的初始化, 并引导系统内核启动。系统启动执行初始化任务后,首先配置网络连接,通过
DHCP Clieant向
DHCP Server申请获取
IP地址。然后系统自动访问电台服务器,该服务器上有最近更新的世界各地的网络电台的
URL地址,系统下载到该列表并更新原有列表后,自动连接列表的第一个网络电台。若在该过程中有按键产生,系统根据按键类型及当前状态调用相应的功能。系统主流程图如图
7所示。
(a)
(b)
图
7 系统主流程图
4 结束语