摘要:本文提出了一种新型以太电话机的设计,采用SDA80D51芯片作为主控单元,同时使用RTL8019AS作为网络接口模块,实现了高度集成、具有较高性价比的话机。同时,还针对嵌入式系统硬件资源受限的特点,提出了一系列优化代码和数据存储空间的方法和技巧。
引言
VoIP(Voice over IP)是利用IP网络作为传输载体实现语音通信的技术,以太电话机则是以VoIP为基础实现的语音通信终端。以太电话机价格相对昂贵和话音质量方面的问题是目前开发工作的难点。本设计是基于英飞凌科技公司的SDA80D51芯片实现的,该话机具有集成度高、结构简单、成本低等特点,具有较高推广价值。
硬件设计
话机采用SDA80D51芯片和以太网接口芯片RTL8019AS实现。由于采用了高集成的SDA80D51芯片,使系统硬件电路结构简单,整体硬件成本低廉、集成度较高。考虑到协议代码的存储需求,使用一个Flash作为扩展存储单元存放代码,同时还设计了拨号键盘到控制单元的控制电路。硬件的设计还可以根据不同的需求,进行相应的调整,以实现其它的增值业务功能。
SDA80D5l简介
SDA80D51芯片将16位DSP和增强型微处理器(8051微处理器的扩展版本)高度集成,并同时集成ADC与DAC,是一种面向语音处理的专用芯片。芯片同时提供一个内存控制单元MMU和片上104kB的RAM。它具有程序和数据分开的总线结构、流水线操作、单周期硬件乘法器和适合数字信号处理的高效指令集。此芯片的C编译能力很强,汇编出的目标代码效率会更高。
语音信号在SDA80D51集成的语音采样接口模块进行A/D和D/A转换,语音的压缩处理则由DSP模块进行,对传输的语音数据打包是由C51模块完成的。编解码压缩处理后由控制模块进行对语音的接收/发送控制,同时,控制模块还要完成对整个系统的控制工作。
网络接口控制模块
网络接口控制模块采用Realtek公司的以太网控制芯片RTL8019AS。该芯片与NE2000兼容,支持8位、16位数据总线;全双工,收发可同时达到10Mbps,有睡眠模式,可有效地降低功耗;内置16kB的SRAM用于收发缓冲,可减轻主处理器在数据带宽上的压力;可连接同轴电缆或双绞线,并可自动检测所连接的介质。
系统使用RTL8019AS来实现以太网媒介访问层(MAC)和物理层(PHY)的功能,包括MAC数据帧的收发、地址识别、CRC编码校验、超时重传、链路完整性测试、信号极性检测纠正等。主处理器在RTL8019AS的外部总线上读写MAC帧。其中,接收控制器用于将接收的串行数据拼成字节送到CRC校验单元,发送控制器则是将送来的字节送到CRC编码单元并逐个按位移出;CRC逻辑在接收时对输入的数据进行CRC校验,发送时对帧数据产生CRC校验序列;地址识别逻辑对接收帧的目的地址与预先设置的本地物理地址进行比较,如不符合要求则拒收。RTL8019AS还使用内部存储缓冲器对与控制单元进行的数据交换进行缓冲,以优化系统的数据传输速率。
软件设计
系统的软件是基于SDA80D51设计开发的。话机软件结构如图1所示。
图1 以太电话机软件组成框图
系统软件开发以C语言编程为主,对占用系统资源比较大的部分使用汇编语言来完成。程序开发主要完成网络接口控制、TCP/IP协议栈、RTP/RTCP、H.323协议栈、语音编解码和主控程序这6部分。
TCP/IP协议栈的实现
通常编程环境中,TCP/IP协议栈的功能是基于操作系统中相应的socket机制实现的,像以太话机这种嵌入式系统,考虑到操作系统占用资源太大,一般不采用任何操作系统。这样,只能由用户编程来完成任务调度、存储器管理和TCP/IP协议栈等功能。
在协议栈开发时,考虑到资源有限,在保证实现以太电话正常工作的前提下,从两个方面进行了TCP/IP协议栈的优化,从而使开发得到的协议栈程序代码少,RAM的需求。
协议栈结构的优化
根据系统的实际需求,只实现TCP/IP协议栈的部分协议,即ARP(地址解析协议)、IP(互联网协议)、ICMP(互联网控制报文协议)、UDP(用户数据报协议)、TCP(传输控制协议)等5部分。协议栈的编程采用事件驱动机制,采用ARP完成对电话的寻址,通过对相应的应用程序的调用来实现事件响应(见图2)。
图2 TCP/IP协议栈实现过程示意图
协议功能的优化
本文简化了协议栈中一些不必要的功能。例如,标准的TCP协议使用慢启动的滑动窗口机制。在实现TCP协议时,考虑到系统所需传送的信令数据很少,为了减少存储器的使用,TCP只使用单个窗口。所有的处理只是对单个数据报的发送和确认,节约了系统的资源,也使维护更加方便。同时,话机系统的突发事件很少,这样对于流量控制可以不做考虑。对于差错控制,程序处理过程中只对信令数据设置重传机制,而语音数据处理不考虑重传。
存储空间的共享
协议开发中,为了尽量减少对存储空间的需求,使用共用缓存区来存放输入、输出数据。其中,RBuff用于存放网络接口收到的数据,SBuff用于存放要发送的数据。各程序之间只提供相互要处理数据所在的指针,就可以完成数据的传递,节约了大量的存储空间。
H.323协议的信令过程
一个话机到话机的基于H.323协议的简单呼叫建立过程有5个阶段,即呼叫初始化、建立控制通道、呼叫开始、通话和结束呼叫。
在设计中,考虑到系统不同于IP电话网关系统,只需实现单路连接,同时考虑到系统资源有限的特点,对H.323协议栈的实现进行了很大程度地简化。其中H.225只实现4个,即SETUP、ALERTING、CONNECT、RELEASE COMPLETE;RAS实现基本的6个功能,也就是网守发现、端点登记、端点定位、呼叫接纳、呼叫退出和状态查询;建立H.245通道只保留了能力交换、主从确定、开闭逻辑信道和终止会话消息。在实现上述3个协议的过程中,在编码时尽量简化,解码时保留。
以太话机中语音的处理过程
以太电话机进行语音传输,要完成以下几个过程:模拟语音首先经CODEC编码为64KB的PCM码,经压缩形成语音数据;语音数据由RTP封装后交由UDP封装;携带语音数据的UDP数据报在IP层被封装为IP包;IP包通过以太网接口程序形成以太帧发送至以太网传送;携带语音数据的以太网帧在目的话机被以太网卡接收并拆包恢复为语音数据,其处理是语音发送的逆过程,语音数据解码成模拟语音送至话筒。
系统性能优化
嵌入式系统在开发中的优化十分重要。根据处理器的性能,尽可能地提高代码运行速率,减少代码和数据存储空间。虽然C编译器提供了一定的代码优化,但编译器的优化仅涉及执行速度和代码大小的平衡,不能使程序达到小而精,因而必须采取一定的优化方案。系统调试中,在确保系统稳定工作的基础上,采取了以下措施进行系统优化。
对于代码优化主要采取以下措施:
1、根据发生频率调整条件跳转语句,提高代码运行速率。例如程序中使用了很多switch-case、if语句,优化时对具体情况按照发生的相对频率排序,即把常发生的情况放在位,不可能发生的情况放在,这样会减少代码的平均执行时间,从而有效提高程序的运行速率。
2、尽量使用全局变量,减少函数调用参数,从而简化函数调用前参数入栈和函数完成后参数出栈的过程。
3、努力减小代码的大小。
对于存储区优化问题,使用了下面方法:
1、使用前述协议栈开发共用缓冲区。
2、编程时将一些固定的数据定义为代码类型,同样可以有效地减少存储区的使用量。
通过以上措施以及对协议实现的具体优化,程序大小从150KB优化到70KB以内,系统的响应速度也得到较大提高。由此可以看出,对程序的合理优化,对提高程序运行的稳定性和系统处理速度,都可以起到至关重要的作用。
结语
SDA80D51芯片的集成度高,设计电路时省去了许多模块,简化了硬件设计,便于调试检测。同时通过对协议栈的优化,使系统达到了预期的低成本、高可靠性。■
[1]. RTL8019AS datasheet https://www.dzsc.com/datasheet/RTL8019AS_1096173.html.
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。