基于EPG3231和闪存的声音播放器设计
2.2 EPG3231简介
EPG323l是ELAN公司的8位RISC单片机,它有11个8位并行口、1个8位电流输出型的D/A、1个10位逐次逼近型A/D、1个通用异步收发器UART、1个8,16,24位的串行外设接口SPI、3个定时器等,硬件资源丰富,还支持手写识别、语音识别、ADPCM编解码等功能。另外,EPG3-23l的速度较快,在时钟频率为16 MHz时,指令周期为125 ns。
2.3 EPG3231与K9G8G08的电路连接
图3为EPG3231与K9G8G08的电路连接图。图中没有给出K9G8G08,只给出了EPG323l的基本电路及用网络标号标出的与K9G8G08的连接引脚。K9G8G08的19引脚是写保护,在实际电路中接+3.3 V(不保护)。需要说明的是,EPG323l的D/A输出是48引脚(PBl),输出电流信号,需要将其输出转换为电压信号再送至后续的功放。其中比较简单且可行的做法是在PBl与地之间接一只电阻来完成电流与电压的转换,关键是该电阻的取值。若电阻阻值较大,输出波形的上部会出现限幅失真;若阻值较小,则不能最大限度地利用D/A的动态范围。因此确定该电阻阻值的方法是:先接一只可调电阻,写一段测试程序,向D/A反复连续地送00~FFH的数值,通过示波器观察PBl输出,调整可调电阻,使输出为不失真的锯齿波,且最高点为3.3 V(即参考电源VREX(70引脚)电压)。本文引用地址:https://www.eepw.com.cn/article/166661.htm
另外,图3中使用EPG323l的D端口(PD0~PD7)与K9G8G08的I/O端口相连,这个端口必须是双向的,使用其他的双向端口也可以,但不要使用J端口和K端口,这两个端口适用按键的输入/输出(矩阵键盘时的扫描输出),速度比较慢,不能用于与K9G8G08的通信。还需注意的是,由于WAV文件中的编码是无符号数(即OOH是最低电平,FFH是最高电平),而EPG323l的D/A输入是有符号数(即80H是最低电平,7FH是最高电平),所以程序中应将WAV声音数据的最高位取反后送到D/A。
3 声音播放器软件设计
在声音播放器软件设计之前,应确定好K9G8G08中数据存放的格式。
首先是地址的格式。对K9G8G08内部存储单元操作的地址是分5个字节送出的,所以地址的格式最好是按这5个字节编排,如表l所示。
其次,根据NAND Flash的特点,其内部是可能有坏块(BAD BLOCK)存在的,但BLOCK 0一定是有效块(VALID BLl3CK),所以将坏块信息存在BLOCK 0中。而K9G8G08的有效块的个数在3 996~4 096之间,也就是说,坏块的个数不大于100个。块地址是由A19~A30决定的,为方便程序的编写,将块地址分3个字节存储,各个地址位的安排同表1中的第3、4、5个字节,将A12~A18位放O。坏块信息存储区最多占用300个字节。
第三,将声音文件的目录也存在BLOCK O中。目录中的每条记录占用64字节,其中前5个字节是声音文件的起始地址,同样为了方便程序的编写,每字节中包含的地址位与表1一致;后面的59个字节是声音的名字,比如歌曲名等,用0表示结束,如表2所示。从表2中可知,目录区最多有4 088个记录,应该能满足一般的需要。
评论