摘 要:针对ISD系列语音录放芯片内容复制难的问题,较为全面地给出了源芯片多信息段起始地址的获取方法,同时给出了一个单片机控制下的ISD芯片内容复制电路的解决方案。
1 引言
ISD系列语音芯片是美国ISD公司(于1998年底被台湾华邦兼并)推出的高品质随录随放型语音芯片。凭借该公司独有的模拟语音及多层式储存技术(analog speech & multilevel storage technology),ISD芯片将语音信号以模拟信号形态直接存储于非易失性多级存储阵列(一种E2PROM)里,使声音的存储与播放有别于一般电子合成语音,从而在录放过程中无需经过传统形式的A/D、D/A转换,进而更能达到原音重现的效果。同时,ISD芯片外围控制电路简单,控制信号与TTL电平兼容,易于与微处理器配合使用,具有抗断电功能,信息存放不易挥发,支持多次录放操作,可单独应用、多片级联,具有很好的使用灵活性。因此,ISD芯片可广泛应用于语音警报、信息提示、语音留言等消费性、通信及工业控制、智能仪表等产品中。
然而,由于ISD芯片是模拟与数字电路的结合,对其内部E2PROM中存放的电平信息不能像传统数字量存储器那样通过编程器读取,因此进行批量复制较为困难。同时,ISD芯片提供地址输入线,支持直接地址操作,可分段存储语音信息并精确控制语音的录放,这就使得批量复制的一致性问题也很突出。虽然通过专用ISD器件开发设备可以解决这些问题,但对于少量应用者,其成本偏高。因此,本文以ISD2532系列为例,给出了一种关于ISD系列语音芯片内容复制的简单解决方案。
本文第2部分简单分析了ISD2532语音芯片原理,第3部分详细叙述了ISD2532语音芯片内容复制的实现。
2ISD2532语音芯片原理[1]
ISD2532是ISD系列单片语音录放集成电路的一种,录音时间为32s,采样频率为8KHz,可提供优于电话的音质,其内部结构如图1所示。
ISD2532工作在录音状态时,麦克风采集到的小信号从MIC进入,经前置放大后从ANA 前置放大器代替芯片内部已有的功能部件,另外ANA IN可作为线输入口(Line In),直接输入电声信号。进入ANA IN的信号经过放大器、自动增益控制(AGC)以及低通滤波器,将被调整到存储电路动态范围的最佳电平,最终将通过模拟收发器写入E2PROM中。在ISD2532的放音模式下,录入的模拟电压在采样时钟的控制下,顺序的从模拟存储阵列读出,并经输出通道上的平滑滤波器去掉采样频率分量后恢复出原始波形,送入多路器,以便与外界其他信号混合,而后送入功率放大器,并由SP+、SP-端输出,进而可直接驱动扬声器。
ISD2532的典型录放电路见图2,外围电路包括:麦克风、扬声器、开关和少数电阻、电容,以及常用5V电源。其基本控制过程极为简单。首先将PD调为低电平,使芯片上电准备工作,同时设置P/R电平(高电平为放音,低电平为录音);然后输入地址,制定录放操作的起始地址;最后使CE为低电平,即在其下降沿启动放音操作,在低电平状态启动录音操作。一般情况下,放音操作自动结束;当PD或CE变为高电平时,即刻停止录音操作。
ISD2532芯片可互斥工作于地址和模式两种方式,这取决于地址引脚最高两位的输入状态。当最高两位都为高电平时,其余地址引脚就作为操作模式选择端,芯片可按预设的多种模式进行录放,以便用最少的外围器件实现最多的功能。否则,所有地址引脚的输入均被解释为地址位,用作当前录放操作的起始地址。由此可见,ISD2532芯片中的9位地址最多只能提供384个地址。好在ISD器件中的E2PROM存储空间不是按字节编址的,而是以行为基本单位进行编址。ISD2532内部的256K E2PROM存储器被均匀地规划为320行,从0开始的每个地址指向其中的一行。ISD2532的录放时间是32s,因此它的地址分辨率为100ms。
ISD器件可以进行多段录放操作,每段称为一个信息段,占用一行或多行存储空间,其中存放音频数据和一个结束标志(EOM)。录音及放音功能均从设定的起始地址开始,录音结束时芯片内部自动在该段的结束位置插入一个EOM标志;而放音时遇到EOM标志即自动停止本段放音。
3ISD2532芯片内容复制的实现
和数字存储器复制不同的是,ISD芯片中存储的是连续变化的声音模拟量,因而对于ISD芯片的内容复制标准可放宽到只要求根据存储信息回放的声音信息听起来相同即可。鉴于此,在控制源芯片放音的同时,让目的芯片录音可达到内容复制的目的,参见图3,在单片机控制下,向源芯片和目的芯片发出相同的起始地址,同时控制两个芯片的录放操作即可实现复制目标。
由于ISD芯片可以指定起始地址进行录放,所以,内容复制必须保证在相同的起始地址处,源芯片和新复制的芯片存储有听起来相同的声音信息。换句话说,复制过程必须保证两芯片中存储的信息段要实现地址对齐。因此,获取源芯片中所有信息段的起始地址对于完成内容复制任务是至关重要的。
3.1 源芯片地址信息获取
ISD芯片的地址引脚只能作为输入使用,因而在没有专业开发设备的情况下,其内部信息段的起始地址无法直接读出[2]。然而在一般情况下,为充分利用存储空间,芯片中第一个信息段的起始地址为0,并且上一段信息结束后的下一个地址就是当前段的起始地址。所以,对于ISD2532芯片,设第i信息段的起始地址为Add[i],并占Len[i]行存储空间,则有:
这样,要获得Add[i]就必须知道Len[i]。由于已知ISD2532的地址分辨率是100ms,所以第i信息段的时间长度应介于(Len[i]-1)x 100ms和Len[i] x 100ms。在源芯片播放时,通过捕捉其输出的EOM信号可以获知某个信息段的结束[2]。因此,通过对每个信息段的播放时间进行计时可确定该信息段占用的存储空间大小,从而可得每个信息段的起始地址。
在芯片中信息段不连续存储的情况下,我们不妨将第i信息段和第i+1信息段之间的空白行看为第i+1信息段的组成部分,这相当于第i+1段的前面部分记录了听不到声音的信息,并不影响听觉。另外,由于ISD芯片在播放过程中,输入地址保持不变,因此,如果源芯片所在系统电路便于测试,可直接通过测量的方法获得所有信息段的起始地址。
3.2 内容复制电路设计要点
ISD芯片内容复制电路如图4所示。图中略去电源、自动增益控制、XCLK等相关外围电路,这部分可参考图2。地址信号、控制信号和状态信号均为数字信号,可直接接至单片机(如MSC51系列)I/O端口,但考虑到有些单片机引脚的驱动能力有限,一般应加上拉电阻。例如,89C2051的P1口中的P1.0和P1.1是比较器端,没有内部上拉电阻,而P1口的其它端均有内部上拉,因此用P1口控制ISD芯片的地址线时,P1.0和P1.1两端应外接上拉电阻,否则地址控制会出错。
在图4的复制电路中,源芯片工作在放音状态,从SP+输出的声音波形经过分压电阻R和隔直电容C的简单调整,即可被送入目的芯片的ANA IN输入端,在录音过程中被存储在目的芯片的E2PROM中。
在单片机程序设计中,通常把源芯片中所有信息段的起始地址放在一张表中,这样可以通过查表指令获取起始地址,便于对每个信息段进行放音录音操作。同时,应该注意程序中的延时处理,通常在给出启动录放操作的CE低电平之前,应插入1~10ms的延时,以确保PD、P/R和地址信号稳定;在查询到源芯片有效的EOM输出状态时,考虑到ISD2532芯片的EOM低电平宽度为12.5ms,这里也应加入12ms左右的延时;最后,在进入另一次循环处理下一信息段的复制之前,应相应地加入一些延时,以确保芯片能稳定工作。
4 结束语
本文在介绍ISD2532语音芯片原理的基础上,针对ISD2532芯片内容复制的问题,较为全面地给出了源芯片多信息段起始地址的获取方法,同时给出了一个简单单片机控制下的ISD芯片内容复制电路的解决方案。在调整相关参数情况下,该方案可适用于处理原理相近的ISD系列芯片的复制拷贝问题。
由于 ISD芯片具有现场录音功能,ISD芯片在供电电源不稳定,特别是上、下电期间可能会出现误录音问题;同时,在允许用户自定义录音时可能存在录错音问题。针对以上问题,本文提出的内容复制电路也可作为一个模块嵌入到实际系统中,作为恢复原始录音的一种解决方案。