基于IDE硬盘的大容量语音记录仪
2008-09-18
作者:李鸿强 苗长云
摘 要: 介绍一种基于IDE硬盘的大容量" title="大容量">大容量语音记录" title="语音记录">语音记录仪的设计方法,重点阐述了大容量语音记录仪的硬件和软件设计。
关键词: 大容量语音记录仪 单片机 IDE D6571E PIO
随着我国经济建设的迅猛发展,公安、铁路、民航、金融等部门对语音记录的需求不断增长。用户经常需要回放时间长达几个月、甚至几年的大容量语音记录仪,而目前国内可见到的语音记录仪大多只能连续记录几百小时(即一个月左右)。而大容量的语音记录仪一般是基于PC机,设备体积较大,使用不便。近年来作为数据存储介质的硬盘,以其容量大、接口智能化程度高、控制方便越来越受到人们的重视。充分发挥硬盘的优势,脱离系统主机,可以为用户开发出超大存储容量、性能可靠的语音记录仪。
本文提出了采用单片机控制硬盘对语音数据进行实时存储的方案。其最大优点是可记录语音时间长达几个月甚至几年,并能达到较高的性能指标。
基于IDE硬盘的大容量语音记录仪的特点:
(1)以单片机为核心,采用PIO模式进行硬盘的读写,可大大提高系统的性能价格比,使得语音记录时间长达1500小时(6GB硬盘)。若换用更大容量硬盘,可实现更长语音记录时间,达到连续工作几个月甚至几年的要求。
(2)采用DSP芯片D6571E,其语音压缩算法采用TRUESPEECH Triple Rate Coder,8kHz采样频率下语音压缩速率为9.6、7.2或4.4kbps,MOS指标可达到3.98。
(3)采用大规模可编程逻辑器件CPLD对系统数字逻辑电路进行集成,提高了系统的稳定性和可靠性,具有较好的通用性,可满足多种场合的需要,不需改动任何硬件。
(4)预留远程调度电话接口,可实现远程监听、查询等功能。
(5)由于采用4层PCB线路板设计、表贴工艺和超薄笔记本硬盘,使得基于IDE硬盘的大容量语音记录仪体积如普通电话机大小,可实现对一路电话进行高阻并联录音,并可在本机播放记录语音和远程调度记录语音。
1 系统硬件设计
1.1 D6571E芯片
在本系统中,选择DSP芯片D6571E,其语音压缩算法采用TRUESPEECH Triple Rate Coder。由于该算法的实时运算需要22MIPS以上的运算速度,为此将DSP内核和算法代码集成在D6571E芯片内。D6571E的典型应用电路如图1所示。
D6571E具有16位宽的总线,但也允许以分时方式使用8位总线,这时CPU须用HI/LO信号表示送到总线上的是高8位还是低8位;当D6571E主动将数据送到总线上时,会发出ACK信号通知CPU读取数据。HSTRD和HSTWR则是读和写的控制线。由于TRUESPEECH Triple Rate Coder算法按30ms分帧采样,然后进行分析压缩,因此无论是读取压缩数据还是回送压缩数据,均必须在一帧内完成,否则D6571E会自行进入休眠状态。向D6571E输送语音数据的过程如下:首先送出解压控制命令,然后接收一个回送状态字,状态字中包含了当前帧所需要的字节数,CPU就连续送出规定数目的数据,待一帧处理完毕后,D6571E会继续送出状态字,如此循环就可连续回放语音了。而利用D6571E进行语音压缩的数据处理过程正好相反,状态字中包含的是当前帧压缩所得到的字节数,CPU应连续接收规定数目的数据。
D6571E芯片具备工业标准的编解码器接口,可直接与串行PCM接口的音频编解码芯片相连,如美国国家半导体的TP3054(μ律)、TP3057(A律)等。本系统设计中音频编解码接口芯片采用了TP3057。TP3057工作所需的同步脉冲、采样时钟、数据信号等只需与D6571E的4根控制线相连即可得到。
由于D6571E的控制命令很丰富,在大容量语音记录仪的设计中,笔者利用D6571E实现数字音量控制、自动增益控制、变速回放、双音频信号产生和鉴别、来电显示等功能,省去了不少功能芯片、线路板面积,使得最终设计成型的大容量语音记录仪体积如普通电话机大小。
1.2 IDE硬盘的控制
利用单片机控制现有的硬盘,可极大地提高系统的性能价格比,因此本系统采用单片机控制硬盘进行语音数据的存储。
IDE接口的硬盘驱动器提供了两种数据传输模式:PIO模式和DMA模式。由于PIO模式控制相对容易,提供了一种编程控制输入/输出的快速传输方法。该模式采用高速的数据块I/O,以扇区为单位,用中断请求方式与CPU进行批量数据交换。在扇区读写操作时,一次按16位长度通过内部的高速PIO数据寄存器传输。通常情况下,数据传输以扇区为单位,每传输一扇区数据产生一个中断。由于本系统语音压缩数据的最大速率只有9.6kbps,而相关资料报道采用PIO写盘速度可以达到192kbps,完全可以满足本系统的要求。
本系统采用Hitachi(日立)公司DK23AA-60型号的笔记本硬盘。它具有6GB的存储容量,厚度仅有9.5mm,它的引脚及定义如图2所示。
IDE接口是一种任务寄存器结构的接口,所有输入输出操作均通过对相应寄存器的读写完成。IDE硬盘驱动器中的寄存器及地址分配见表1。表2为状态寄存器" title="状态寄存器">状态寄存器,它反映了硬盘驱动器执行命令后的状态。
状态寄存器中各位定义如下:
BSY:驱动器忙;
DRDY:驱动器准备好;
DWF:驱动器写失败;
DSC:寻道结束;
DRQ:请求服务,驱动器希望通过数据寄存器与CPU交换一字节数据;
CORR:当可以纠正的读错误发生时,该位置1,数据传输将继续进行;
IDX:收到索引信号;
ERR:命令执行出错。
在向硬盘驱动器发出命令前,必须先检测硬盘驱动器是否忙碌(D7=1)。如果在规定时间内硬盘驱动器一直忙碌,则置超时错;否则表示硬盘驱动器空闲,可接受命令。
如果CPU要对硬盘写数据,首先CPU把必要的参数写入对应的地址寄存器,等待DRDY有效;然后将操作码写入命令寄存器,同时驱动器设置状态寄存器的DRQ位,表示准备好接收数据,CPU通过数据寄存器将数据写入扇区缓冲区;当扇区缓冲区填满后,驱动器清除DRQ位,并置位BSY,驱动器将扇区缓冲区中的数据写入磁盘;当写盘结束,清除BSY位,发中断请求信号INTRQ;CPU接收到中断信号后,读驱动器状态寄存器,同时将中断信号INTRQ撤除。
如果CPU要对硬盘进行读数据操作,首先将参数写入地址寄存器和特性寄存器(如果需要);然后把命令码写入命令寄存器,命令开始执行。这时驱动器置状态寄存器中的BSY为1,同时将硬盘上指定扇区内的数据送入扇区缓冲区。当扇区缓冲区准备好数据后,置位DRQ,清BSY,发中断请求信号INTRQ。CPU检测到中断后,读取状态寄存器,测试ERR位,若等于1则转入出错处理;否则DRQ位为1,CPU从扇区缓冲区读取数据,数据读完后,驱动器复位DRQ位,然后驱动器重新设置BSY位。
1.3 工作原理
基于IDE硬盘的大容量语音记录仪主要由单片机、D6571E、IDE接口笔记本硬盘、A律编解码芯片TP3057、可编程逻辑器件MAX7128S、160×32 LCD模块、键盘、时钟芯片、振铃检测芯片TCM1520A、电话线接口和电源等部分组成,系统原理框图如图3所示。
单片机选用WINBOND公司的W78E52。它是整个系统的控制核心,完成对IDE硬盘、LCD等的初始化,接收D6571E压缩后的语音数据并存储在硬盘上,通过D6571E回放硬盘上的语音数据。W78E52是一款完全与8051兼容的8位单片机,它增加了Watchdog Timer和内部电源管理等功能,并且是目前少数可运行在最高40MHz晶振的单片机之一。本系统中的单片机W78E52运行在40MHz晶振下,以提高运行速度。
整个系统的数字逻辑部分采用一片ALTERA公司的大规模可编程逻辑器件MAX7128S,它完成单片机与IDE硬盘、D6571E、LCD显示和键盘的接口逻辑控制。可编程逻辑器件MAX7128S的程序设计采用目前较为通用和流行的VHDL语言,用MAX+plusⅡ和FPGA Express软件编译仿真完成。
一片D6571E完成对并联话机状态的监测。当D6571E监测到并联线路上有语音信号时,判断并联话机有去话;当振铃检测芯片TCM1520A检测到并联线路上有振铃时,判断并联话机有来话。当并联话机存在来话和去话时,D6571E开始记录语音,并将压缩的语音数据实时传送给单片机。单片机负责将语音数据存储在硬盘上,并附加上相关的日期时间、来去话标志、主被叫电话号码和通话时长等索引内容,以便查询使用。当本机需要回放语音记录或远程调度时,单片机将硬盘上的语音压缩数据通过另外一片D6571E解压转变成语音。
160×32 LCD可显示16×16点阵的汉字两行,每行10个汉字。它主要用于显示系统的日期时间、提示信息或状态信息,方便用户的使用。
系统中键盘可实现本机对语音记录的回放选择以及对D6571E工作的预置值进行设定,如语音压缩率的选择、调节音量等。
远程调度电话线接口可实现远程监听和查询等功能。系统在检测到远程调度电话线上的振铃信号后,将模拟摘机,同时向主叫播放语音提示。主叫可按照语音提示操作,即可监听到硬盘上的任意一段语音记录,甚至可以监听到系统正在记录的语音。
2 系统软件设计
系统软件包含有主程序、中断服务程序" title="中断服务程序">中断服务程序和任务子程序" title="子程序">子程序等。
主程序主要完成对IDE硬盘、D6571E、LCD等的初始化,并检测任务表是否空,若不空则执行相应任务。图4所示为系统主程序流程图。
中断服务程序主要包括T0中断服务程序、INT0中断服务程序、INT1中断服务程序等。T0中断服务程序主要负责定时喂看门狗、扫描键盘读键值等,并写相关任务到任务表中。INT0、INT1中断服务程序分别响应系统中2片D6571E的中断请求,将并联话机通话的语音压缩任务和记录语音的播放任务写到任务表中,待主程序调用执行。
任务子程序主要有LCD显示子程序、D6571E对语音的压缩子程序、D6571E对语音的解压子程序、读写IDE硬盘子程序、振铃处理子程序等。
参考文献
1 李 华.MCS-51系列单片机实用接口技术.北京:北京航空航天大学出版社,1993
2 陈利学,孙 彪,赵玉连.微机总线与接口设计.成都:电子科技大学出版社,1998
3 DSP GROUP公司.The D6571E Data Book.2000
4 ALTERA公司.The MAX7128S Data Sheet.2000
5 HITACHI公司.The DK23AA-60 Data Sheet.2000