关键词:微控制器;语音电脑复读机;闪烁存储器;SPI总线;AT45DB161B
AT45DB161B是一种工作电压可低至2.7V,并具有串行接口的数据快闪存储器(Flash Memory)。它的主存储区容量为16兆位,分为4096页,每页528字节。除了主存储区外,AT45DB161B还带有2个528字节的SRAM数据缓存。通过这些数据缓存(称为缓存1和缓存2)可使SPI总线上的主设备通过SPI接口向AT45DB161B高速写入数据流,从而使 AT45DB161B控制电路能够自动完成对内部快闪存储器的写操作。
AT45DB161B可以通过一个SPI串行接口来进行通信,它的外围及硬件设计非常容易,同时系统可靠性也很强且开关噪音小。该芯片可用于存储图象、数据和数字声音。AT45DB161B数据闪存中SPI的工作时钟频率高达20MHz,读操作电流典型值为4mA,该SPI的读写与系统使用同一个工作电源(2.7~3.6V),并可以直接与具有SPI接口的微控制器相连。
1语音电脑复读机控制器硬件电路
图1所示是一个语音电脑复读机的控制电路。图中,首先由具有SPI接口的RISC微控制器AVRAT90S8535将一个语音信号(模拟信号)通过内置的A/D转换器转换为数字信号写入到 AT45DB161B;从AT45DB161B取出的数据则通过PWM滤波和放大电路后进行声音回放。
用户可以用“记录”和“回放”两个按钮来控制系统。如果按钮没有被按下,那么,器件将通过内部的上拉电阻把PD1和PD2端接到VCC,而按下按钮则使输入接地。LED用于指示系统的当前状态,同时可作为给用户的反馈信号。数据闪存则直接通过SPI总线与AVR微控制器相连接。接有两个22pF退耦电容的石英晶体振荡器可用来产生系统时钟。
2语音信号的分析、采样、记录与回放
语音信号被存储在数据闪存之前,必须将其转换成数字信号,这一转换过程的实现如图2所示。在该系统中,模拟信号将通过定时采样的方式转换成离散信号,两次采样的时间间隔叫做“采样周期”,其倒数为 “采样频率”。根据采样定理———采样频率最小值为信号频率最大值的两倍,否则,采样信号将不能正确的恢复为被采样信号。语音信号的频率主要在低于 3kHz的频段,因此,对3kHz的语音信号采样频率必须达到6kHz。用数字量来表示采样的模拟样本的过程称为“量化”,模拟信号应被量化为最接近模拟信号的一个数字量。
转换为数字信号的语音信号通过编程的方式可以储存于数据闪存。数据闪存在编程前可以通过特定的命令自动擦除主存储区阵列中的指定页面。数据闪存提供有一个可选的“页面擦除”命令以擦除一个单独的主存储区页面,而可选的“块擦除”命令则允许一次擦除8个主存储区页面。主存储器被擦除之后,数据就可以被记录直到用完所有的页面。如果要往数据闪存里写数据,缓存1将被激活。当用完缓存1后(保存了528个样本),在第529个样本完成转换时,缓存1将被写入主存储器区,同时激活缓存2。主存储器区的数据将一直被记录,直到“记录”按钮被释放或者主存储区已满。如果整个主存储区满了,在数据闪存擦除之前不会存储任何新数据。如果主存储区只用了一部分而且“记录”按钮又被按了一次,那么新数据将直接追加到已有的数据后面。
声音回放总是从数据闪存的第0个页面开始,当所有记录的数据都已回放或者“回放”按钮被释放时,“回放”停止。
数据闪存既允许直接从主存储器读数据,也允许通过复制一个页面到两个缓存中的一个然后从缓存里读数据。直接访问的方法不适合语音电脑复读机的应用,因为页面和字节位置的地址以及初始化序列必须一个字节一个字节地转化到数据闪存里,这将花费比一个PWM周期还长的时间,大约每8位PWM信号需要512个时钟周期。因此,笔者在此采用第二种方法,即一个主存储区页面被复制到两个缓存中的一个,如缓存1,当数据从缓存1读出的时候,下一个页面将被复制到缓存2 里。这样,当从缓存1读出所有的数据后,可切换到缓存2继续读取数据,而缓存1将被重新装载。
从数据闪存的缓存里读取数据必须和PWM的频率同步。数据使用脉宽调制器(PWM)来回放。图3展示了范例信号的样本2和3。PWM信号的一个周期是由一个计数器递增到可表示的最大值(本例为8),然后再递减到0。当PWM计数器与数字信号值相匹配的时候,输出即被接通,当计数器重新低于这个值后,输出被切断,因此图3中黑色区域表示信号在该样本上的功率。图4为该范例信号的PWM输出信号。
如果使用8MHz的系统时钟,则10位PWM的频率为3906Hz(8MHz/2×210=3906Hz),9位PWM的频率为7813Hz,8位PWM的频率是15625Hz。也就是说:只有最后的值才可以作为4kHz信号的携带频率。因此,在模拟信号被转换成数字信号之后,应将高8位的一个字节存储在数据闪存中。
3语音电脑复读机的系统软件设计
该语音电脑复读机的系统软件包括主程序、记录、回放等功能模块,本文仅介绍主程序、记录和回放的软件设计流程。
3.1主程序
在主程序中,当端口被初始化以后,两个按钮将被循环扫描。此后如果某一个被按下了,LED将变亮以表示系统正忙于调用相对应的子程序。LED不亮则表示系统空闲。图5是该系统的主循环流程。
3.2记录子程序
系统软件中的记录子程序包括A/D转换和一个空循环的设置。若其达到15625Hz的采样率时,每512个周期(15625Hz×512=8MHz)就必须采样一次。由于每个ADC周期需要32个时钟周期,一次数模转换需要14个ADC周期,因此,一次转换需要花费448个周期。
当一次转换完成后,系统会产生一个中断。在一个新的A/D转换发生之前,这个中断程序将执行一个循环来填补失去的64个(512-448)周期。图6为记录程序流程图。
3.3回放子程序
在“回放”子程序中,数据闪存中的内容以15625Hz的频率被送到PWM口,同时经过滤波和放大后驱动扬声器。为了得到更快的速度,数据不是直接从主存储区读出,而是轮流从两个缓存中读取。在从其中一个缓存读取数据时,另一个缓存会从主存储区中读取下一个数据页。
在当前缓存区数据被读完后,数据读取将自动切换到另一缓存区。当全部主存储区中的内容被读完时,应将主存储区页面计数器置0,以开始下一次循环。图7 为回放程序流程图。程序中也可以设置一个计数器来存储主存储区已记录的页面,以便在按下“回放”按钮时只回放已记录的页面。
4结束语
该电脑复读机在采样频率为6kHz时,记录时间为6分钟;采样频率为8kHz时,记录时间为4.5分钟。如果要得到更长久的记录时间,可将这些数据压缩。限于篇幅,本文不再涉及。
数据闪存也可以用于手持终端数据采集系统或电话应答器等其它方面。
