Home > 电话会议新闻动态 > 技术文档 > 基K60的IP电话终端的设计与实现

基K60的IP电话终端的设计与实现

2014/04/24 meeteasy

1、引 言

IP电话是一种基于互联网协议的语音传输技术,是VoIP(Voice over Intemet Protoco1)电话的简称。当前的同类产品,多采用1片MCU外加1片DSP的设计方案;也有的采用单片MCU的设计方案,如i.mx27、 i.mx51等多媒体处理器芯片 。对于外加的DSP芯片,用软件完成语音的编解码,而系统其他功能由MCU完成,这样整个系统的稳定性既取决于MCU,也取决于DSP;而单片MCU中,采用的是ARM Cortex A系列的MCU,在工业控制领域中易受各种干扰的影响。故本文采用具有较好抗干扰能力的ARM Cortex M系列的 MCU,提出以ARM Cortex-M4 Kinetis微控制器K60作为主控芯片的单MCU设计方案,并进行了实际的测试。

2、系统的总体设计方案

IP电话终端分为两类,即基于Pc机的终端和基于嵌入式平台的终端,其中基于嵌入式平台的终端是目前的发展方向。嵌入式IP电话终端,需要完成语音的采集、编码、网络传输、解码和播放等功能,主要包括三 个部分:

(1)处理部分,包括微控制器和语音编解码器。
(2)网络部分,借助以太网进行音频数据的传输。
(3)外设部分,包括麦克风、耳机和键盘。

2.1 硬件设计方案

Kinetis系列是飞思卡尔(Freescale)公司于2010年下半年推出的业内首款基于ARM Cortex.M4内核的微 控制器,K60系列是Kinetis系列的第一阶段产品之一。K60具有丰富的外设接口,内部集成了用于以太帧 收发的以太网接口、用于语音采集和播放的I S(Inter.Integrated Sound)接13,故只需外扩一块语音编解码芯片 即可实现IP电话的功能。

基于K60的IP电话终端的硬件结构框图如图1所示,主要包括以下几个部分:

(1)12S接口外接语音编解码芯片,用于语音的采集和播放。
(2)DDR控制器外接DDR SDRAM存储器芯片,用于存放运行的程序和数据。
(3)NAND Flash外接NAND Flash存储器芯片,用于存放Bootloader、内核映像和根文件系统。
(4)lfO接口连接键盘,用于输入各种呼叫和控制命令。
(5)以太网控制器外接以太网物理层芯片,用于语音数据的网络传输。
(6)UART接口通过RS232收发器连接PC宿主机,用于系统测试。
(7)时钟和电源接口外接外部晶振和电源,用于支撑芯片工作。

基于K60的IP电话终端的硬件结构框图

2.2 软件设计方案

由于IP电话终端具有实时处理和多任务并发执行的特点,故提出了基于Linux操作系统的软件设计方案,其开发模式选用Windows操作系统+Linux虚拟机+Linux目标板的组合方式,即首先在Windows中 安装Linux虚拟机,并在虚拟机上安装交叉编译器和建立NFS文件系统服务器;其次在Linux虚拟机上运行交叉编译器生成可执行代码,并将可执行代码存到NFS文件系统服务器上;最后在Linux目标板上将虚拟机的NFS文件系统挂载,这样在板上直接运行编译过的可执行文件即可。

基于K60的IP电话终端的硬件构件与软件构件层次模型如图2所示,自顶向下分为应用层、中间件和底层三个层次,这种分层设计方法使软件具有很强的可移植性和扩展性,可被快速地应用于同类产品的开发和 基于本系统的二次开发等。底层构件层功能包括移植Bootloader和Linux内核、文件系统,封装MCU内置功 能模块的驱动程序为功能构件,其中Bootloader是直接由移植处理器厂商提供的,Linux内核选用2.6.19.2版 本。文件系统使用JFFS2类型。中间件构件层包括语音采集和播放构件、网络实时传输构件,为应用层构件提 供了访问底层硬件的接口,降低了应用层软件的实现难度。应用层构件层通过调用中间件构件提供的函数接口。利用Linux多线程机制和信号量机制实现了IP电话终端功能。

基于K6o的IP电话终端的硬件构件与软件构件层次模型

3、系统的硬件设计

基于K60的IP电话终端的硬件设计包括K60硬件最小系统和相关的外围模块电路的设计。外围模块 电路主要包括语音采集和播放电路、键盘接口电路、以太网接口电路、存储器扩展电路和UART接口电路。

3.1 K60硬件最小系统

本设计选用的是K60系列的芯片MK60N512VMD100,温度范围为一4O~105℃,主频为100MHz,Flash容量为512KB,程序空间为512KB,SRAM为128KB,为144引脚MAPBGA封装。每个引脚都有多个复用功能, 但在某一时刻最多只能使用其中的一个功能。

K60硬件最小系统包括电源电路、复位电路、晶振电路及与写入器相连的JTAG接口电路。所有的电源引脚必须外接适应的滤波电容来抑制高频噪声。复位引脚是一个专用的双向引脚,内部含上拉电阻。K60内 部集成了多用途时钟产生器(Multipurpose Clock Generator,MCG)模块,用于将晶振输入时钟倍频至系统所需时钟。K60共需要两个晶振:一个是芯片的主晶振(选用50MI-Iz),用于产生芯片和外主设的工作时钟;另一个是实时定时器(Real Time Clock,RTC)的晶振。本设计的主晶振选用50MHz的有源晶振,RTC模块选用 32.768kHz的无源晶振。JTAG接口电路中,JTAG的四个对外引脚TMS、TCK、TDO、TD1分别接K60的PTA0 ~PTA3引脚,可选引脚RST接复位引脚。

3.2 语音采集和播放电路

lP电话终端的语音采集和播放电路通过将K60的IS接口外接wm9712语音编解码芯片实现。K60的IS模块是一个全双工的串行端口,允许和多种类型的串行设备通信,含有带独立时钟发生和帧同步的独立的收发器,支持AC97。在AC97标准模式下,时钟来自于外部,帧同步由内部产生。I s模块的引脚有6个,分别是串行接收时钟SRCK、串行接收帧同步SRFS、串行接收数据SRXD、串行发送时钟STCK、串行发送帧同步STFS和串行发送数据STXD。

wm9712是一款支持AC97的16位精度的语音编解码芯片,可直接与麦克风、耳机相连,内部包含单声道和立体声编解码两个通道。其中,单声道通道支持语音的采集和播放,最高频率为16kHz;立体声通道仅支持 语音的播放,最高频率为96kHz。

3.3 键盘接口电路

IP电话终端的键盘接口采用3×4矩阵方式,键的定义符号为“0”~“9”和“ *”、“#”,键的排列与一般 电话机一致。列线n1~n3分别接PTIP0~PTIP2,编程时将这三个引脚定义为输入并进行上拉;行线ml~m4 分别接PORTA0一PORTA3,编程时将这四个引脚定义为输出。

3.4 以太网接口电路

K60内部集成了以太网控制器,但没有集成以太网物理层收发器,故外接了KSZ8041NL物理层收发器。 K60和KSZ8041NL之间通过简化的媒体独立接口(Reduced Medium Independent Interface,RMII)连接,实现以太帧的收发功能,其对外数据传输的引脚只有4个:2个差分输入(RX一、RX+)和2个差分输出(TX+、TX 一)。但是在使用时还需外接一些电阻电容元件和网络隔离部件等,以保证传输的稳定性。K60的PTA12和PTA13接K60KSZS041NL的RMII接收接口(RXD1和RXDO),PTA16和A17接K60KSZ8041NL的RMII发送接口(TXD0和TXD1)。

3.5 存储器扩展电路

本设计外扩了2片DDR SDRAM和l片NAND Flash。其中,DDR SDRAM采用英飞凌(Infineon)公司的 HYB18M51216OAF,因数据宽度只有l6位,故需要2片才能扩展为32位;其行地址线为13位,列地址线为10 位,Bank地址为2位,寻址空间为64M字节。NAND Flash采用三星公司的K9F2G08ROA,容量为256M字节, 页面大小为2K字节。

3.6 UART接口电路

IP电话终端中使用MAX3232电平转换芯片将K60的TTL电平转化为RS232电平。K60的通用异步收发器(UART)支持全双工的数据传输,可对8位或9位数据模式进行编程,采用NRZ格式。K60中有6个相同且独立的UART模块,记为UART0-UART5,其中UART0和UART1的时钟源为内核时钟,UART2~UART5的时钟源为总线时钟。本设计使用UART1进行IP电话终端和PC机间的通信,UART1的外部引脚只 有2个,分别是发送数据引脚UTXD1和接收数据引脚URXD1。

4、系统的软件设计

基于K60的IP电话终端的软件,分为底层、中间件和应用层三个层次,由于底层构件层主要移植和调用 MCU内部功能构件,故整个软件的设计主要是中间件和应用层构件的设计。

4.1 语音采集和播放构件

语音采集和播放构件是基于高级Linux声音架构(Advanced Linux Sound Architecture,ALSA) 实现的, 包括语音的采集和播放两个子构件。ALSA支持多种声卡设备,支持两种编程模式,即普通ALSA模式和模拟 OSS(Open Sound System,开放声音系统)模式。由于本设计只完成语音采集和播放,故选择了接口简单的模拟OSS模式,该模式是将所有的音频相关操作都映射为对具体设备文件的操作,它提供的配置接口以ioctl函数的形式提供,而语音的采集和播放则通过调用write和read函数进行。

4.2 网络实时传输构件

网络实时传输构件通过RTP协议实现,RTP属于网络应用层协议。在IP电话中,语音传输属于实时传输,其实时性要求比准确性要求更高,故本设计通过调用UDP套接字接El实现RTP协议的功能。UDP套接字的编程接El主要涉及socket、bind、sendto和mcvfrom 4个函数,分别用于建立套接字和基于该套接字的数据 收发。

4.3 IP电话终端构件

IP电话终端构件主要调用两个中间件构件提供的函数接口,通过建立两个相应的子线程使其并发执行的方式实现,两个子线程分别是语音的采集与发送线程和语音的接收与播放线程。Linux下的多线程编程遵 循Unix可移植操作系统接口(Portable Operating System Interface of Unix,POSIX),操作线程的基本函数有:① 创建线程pthread—create()、②线程返回pthread—exit()、③等待某线程终止pthread_join()、④请求终止某线程 pthread—cancel(),使用Linux的信号量机制实现线程的互斥操作。

5、系统的实现

5.1 实现方案

基于K60的IP电话终端已在局域网内部实现了两台终端之间的音频通信,实现框图如图3所示。图中,将两台IP电话终端直接连接到局域网的路由器,同时两台电话终端分别通过串口和一台Pc相连,测试时通过Pc超级终端发送命令控制电话终端上程序的执行。

两台坤电话终端间通信的框图

图3 两台坤电话终端间通信的框图

5.2测试结果与分析

由于IP电话的通话音质主要取决于网络的状态,故本系统分别在三种典型的网络状态下测试其通信质量:局域网内所有PC全部关闭网络连接、局域网内一半Pc同时从远程FTP服务器下载文件和局域网内所有 Pc同时从远程n1P服务器下载文件,测试结果如附表所示。第一次测试时设置采样频率为8kHz且为单声道,发现在所有Pc全部关闭网络连接的情况下音质仍然很差,说明不是网络带宽太小的问题,而是采样频率太低。当采样频率加大到16kHz时,语音立刻变清晰了。

三种典型网络状态下的系统测试结果

从附表中可以看出,在网络状态良好的情况下,音质效果很好;在网络状态一般的情况下,音质效果与普 通电话的相似;在网络繁忙的情况下,音质效果较差。测试结果表明,基于K60的IP电话终端能成功地采集、收发和播放语音,证明了本设计方案的正确性和有效性。

6、结论

随着通信网络的普及,基于嵌入式平台的IP电话终端必将有广阔的市场应用前景。本文的嵌入式IP电话终端,主要具有如下特点和优势:

(1)基于ARM Cortex。M4 Kinetis微控制器K60的单MCU设计使其系统稳定性仅取决于MCU,而所选的 MCU MK60N5l2VMDl00抗干扰性好,保证了系统的高稳定性和强抗干扰性,故本产品可应用于工业控制领域中。

(2)MK60N512VMD100温度范围为-40~105度,满足了中国南、北方温度差异较大的特点,使得本产品既适用于中国南方,也适用于北方。

(3)基于Linux操作系统的软件,分为底层构件层、中间件构件层和应用层构件层三个层次,中间件为应用层提供了访问底层构件的接口,屏蔽了调用底层硬件驱动的复杂性,故具有很强的可移植性和扩展性,可以被快速地应用于同类产品的开发或基于本系统的二次开发。

IP电话, K60, 嵌入式

如没特殊注明,文章均为好会通科技原创,转载请注明来自 http://www.meeteasy.com.cn/archives/2588.htm.

copyright 2004-2013     粤ICP备12061155号-1

Sitemap|XML|RSS|隐私政策|EN|