基于IDE硬盘的大容量语音记录仪
摘要:介绍一种基于IDE硬盘的大容量语音记录仪的设计方法,重点阐述了大容量语音记录仪的硬件和软件设计。
关键词:大容量语音记录仪 单片机 IDE D6571E PIO
随着我国经济建设的迅猛发展,公安、铁路、民航、金融等部门对语音记录的需求不断增长。用户经常需要回放时间长达几个月、甚至几年的大容量语音记录仪,而目前国内可见到的语音记录仪大多只能连续记录几百小时(即一个月左右)。而大容量的语音记录仪一般是基于PC机,设备体积较大,使用不便。近年来作为数据存储介质的硬盘,以其容量大、接口智能化程度高、控制方便越来越受到人们的重视。充分发挥硬盘的优势,脱离系统主机,可以为用户开发出超大存储容量、性能可靠的语音记录仪。
本文提出了采用单片机控制硬盘对语音数据进行实时存储的方案。其最大优点是可记录语音时间长达几个月甚至几年,并能达到较高的性能指标。
甚至IDE硬盘的大容易语音记录仪的特点:
(1) 以单片机为核心,采用PIO模式进行硬盘的读写,可大大提高系统的性能价格比,使得语音记录时间长达1500小时(6GB硬盘)。若换用更大容量硬盘,可实现更长语音记录时间,达到连续工作几个月甚至几年的要求。
(2) 采用DSP芯片D6517E,其语音压缩算法采用TRUESPEECH Triple Rate Coder,8kHz采样频率下语音压缩速率为9.6、7.2或4.4kbps,MOS指标可达到3.98。
(3) 采用大规模可编程逻辑器件CPLD对系统数字逻辑电路进行集成,提高了系统的稳定性和可靠性,具有较好的通用性,可满足多种场合的需要,不需改动任何硬件。
(4) 预留远程调度电话接口,可实现远程监听、查询等功能。
(5) 由于采用4层PCB线路板设计、表贴工艺和超薄笔记本硬盘,使得基于IDE硬盘的大容量语音记录仪体积如普通电话机大小,可实现对一路电话进行高阻并联录音,并可在本机播放记录语音和远程调度记录语音。
图1 D6571E的典型应用电路
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则是读和写的控制线。由于TRUE-SPEECH Triple Rate Coder算法按30ms分帧采样,然后进行分析压缩,因此无论是读取压缩数据还是因送压缩数据,均必须在一帧内完成,否则D6571E会自行进入休眠状态。向D6571E输送语音数据的过程如下:首先送出解压控制命令,然后接收一个回送状态字,状态字中包含了当前帧所需要的字节数,CPU就连续送出规定数目的数据,待一帧处理完毕后,D6571E会继续送出状态字,如此循环就可连续回放语音了。而利用D6571E进行语音压缩的数据处理过程正好相反,状态字中包含的是当前帧压缩所得到的字节数,CPU应连接接收规定数目的数据。
D6571E芯片具备工业标准的编解码器接口,可直接与串行PCM接口的音频编解码芯片相连,如美国国家半导体的TP3054(μ律)、TP3057(A律)等。本系统设计中音频编解码接口芯片采用了TP3057。TP3057工作所需的同步脉冲、采样时钟、数据信号等只需与D6571E的4根控制线相连即可得到。
由于D6571E的控制命令很丰富,在大容量语音记录仪的设计中,笔者利用D6571E实现数字音量控制、自动增益控制、变速回放、双音频信号产生和鉴别、来电显示等功能,省去了不少功能芯片、线路板面积,使昨最终设计成型的大容量语音记录仪体积如普通电话机大小。
1.2 IDE硬盘的控制
利用单片机控制现有的硬盘,可极大地提高系统的性能价格比,因此本系统采用单片机控制硬盘进行语音数据的存储。
图2 DK23AA-60硬盘引脚及定义
IDE接口的硬盘驱动器提供了两种数据传输模式:PIO模式和DMA模式。由于PIO模式控制相对容易,提供了一种编程控制输入/输出的快速传输方法。该模式采用高速的数据块I/O,以扇区为单位,用中断请求方式与CPU进行批量数据交换。在扇区读写操作时,一次按16位长度通过内部的高速PIO数据寄存器传输。通常情况下,数据传输以扇区为单位,每传输一扇区数据产生一个中断。由于本系统语音压缩数据的最大速率只有9.6kbps,而相关资料报道采用PIO写盘速度可以达到192kbps,完全可以满足本系统的要求。
本系统采用Hitachi(日立)公司DK23AA-60型号的笔记本硬盘。它具有6GB的存储容量,厚度仅有9.6mm,它的引脚及定义如图2所示。
IDE接口是一种任务寄存器结构的接口,所有输入输出操作均通过对相应寄存器的读写完成。IDE硬盘驱动器中的寄存器及地址分配见表1。表2为状态寄存器,它反映了硬盘驱动器执行命令后的状态。
表1 IDE硬盘驱动器中的寄存器及地址分配
地 址 | 寄存器名及功能 | |||||
CS1FX | CS3FX | DA2 | DA1 | DA0 | 读操作 | 写操作 |
0 | 1 | 0 | 0 | 0 | 数据寄存器 | |
0 | 1 | 0 | 0 | 1 | 错误寄存器 | 特性寄存器 |
0 | 1 | 0 | 1 | 0 | 扇区数寄存器 | |
0 | 1 | 0 | 1 | 1 | 扇区号寄存器 | |
0 | 1 | 1 | 0 | 0 | 柱面号寄存器:低字节 | |
0 | 1 | 1 | 0 | 1 | 柱面号寄存器:高字节 | |
0 | 1 | 1 | 1 | 0 | 驱动器/磁头寄存器 | |
0 | 1 | 1 | 1 | 1 | 状态寄存器 | 命令寄存器 |
表02 状态寄存器
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
BSY | DRDY | DWF | DSC | DRQ | CORR | IDX | ERR |
状态寄存器中各位定义如下:
BSY:驱动器忙;
DRDY:驱动器准备好;
DWF:驱动器写失败;
DSC:寻道结束;
DRQ:请求服务,驱动器希望通过数据寄存器与CPU交换一字节数据;
CORR:当可以纠正的读错误发生时,该位置1,数据传输将继续进行;
IDX:收到综引信号;
ERR:命令执行出错。
在向硬盘驱动器发出命令前,必须先检测硬盘驱动器是否忙碌(D7=1)。如果在规定时间内硬盘驱动器一直忙碌,则置超时错;否则表示硬盘驱动器空闲,可接受命令。
如果CPU要对硬盘写数据,首先CPU把必要的参数写入对应的地址寄存器,等待DRDY有效;然后将操作码写入命令寄存器,同时驱器设置状态寄存器的DRQ位,表示准备好接收数据,CPU通过数据寄存器将数据写入扇区缓冲区;当扇区缓冲区填满后,驱动器清除DRQ位,并置位BSY,驱动器将扇区缓冲区中数据写入磁盘;当写盘结束,清除BSY位,发中断请求信号DNTRQ;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×32LCD模块、键盘、时钟芯片、振铃检测芯片TCM1520A、电话线接口和电源等部分组成,系统原理框图如图3所示。
javascript:window.open(this.src);" style="cursor:pointer;"/>