收藏 分销(赏)

毕设论文--pm3的设计与应用.doc

上传人:可**** 文档编号:2687438 上传时间:2024-06-04 格式:DOC 页数:35 大小:834KB 下载积分:10 金币
下载 相关 举报
毕设论文--pm3的设计与应用.doc_第1页
第1页 / 共35页
毕设论文--pm3的设计与应用.doc_第2页
第2页 / 共35页


点击查看更多>>
资源描述
本科毕业设计(论文) 题 目 mp3的设计与应用 部 系 地方生部 专 业 电子信息工程 学 员 王傈 指导教员 张力 中国人民解放军海军航空工程学院 2010 年 7 月 前 言 MP3的全称应为MPEG1 Layer-3音频文件,MPEG(Moving Picture Experts Group)在汉语中译为活动图像专家组,特指活动影音压缩标准,MPEG音频文件是MPEG1标准中的声音部分,也叫MPEG音频层,它根据压缩质量和编码复杂程度划分为三层,即Layer-1、Layer2、Layer3,且分别对应MP1、MP2、MP3这三种声音文件,并根据不同的用途,使用不同层次的编码。MPEG音频编码的层次越高,编码器越复杂,压缩率也越高,MP1和MP2的压缩率分别为4:1和6:1-8:1,而MP3的压缩率则高达10:1-12:1,也就是说,一分钟CD音质的音乐,未经压缩需要10MB的存储空间,而经过MP3压缩编码后只有1MB左右。不过MP3对音频信号采用的是有损压缩方式,为了降低声音失真度,MP3采取了“感官编码技术”,即编码时先对音频文件进行频谱分析,然后用过滤器滤掉噪音电平,接着通过量化的方式将剩下的每一位打散排列,最后形成具有较高压缩比的MP3文件,并使压缩后的文件在回放时能够达到比较接近原音源的声音效果。 MP3播放机要分几个部分:中央处理器、解码器、存储设备、主机通讯端口、音频DAC和功放、显示界面和控制键。其中中央处理器和解码器是整个系统的核心。这里的中央处理器我们通常称为MCU(单片微处理器),简称单片机。它运行MP3的整个控制程序,也称为fireware(或者固件程序)。控制MP3的各个部件的工作:从存储设备读取数据送到解码器解码;与主机连接时完成与主机的数据交换;接收控制按键的操作,显示系统运行状态等任务。解码器是芯片中的一个硬件模块,或者说是硬件解码(有的MP3播放机是软件解码,由高速中央处理器完成)。它可以直接完成各种格式MP3数据流的解码操作,并输出PCM或I2S格式的数字音频信号。 存储设备是MP3播放机的重要部分,通常的MP3随身听都是采用半导体存储器(FLASH MEMORY)或者硬盘(HDD)作为储存设备的。它通过接受储存主机通讯端口传来的数据(通常以文件形式),回放的时候MCU读取存储器中的数据并送到解码器。数据的存储是要有一定格式的,众所周知,PC管理磁盘数据是以文件形式,MP3也不例外,最常用的办法就是直接利用PC的文件系统来管理存储器,微软操作系统采用的是FAT文件系统,这也是最广泛使用的一帧2シ呕?渲幸桓鋈挝窬褪且?迪諪AT文件系统,即可以从FAT文件系统的磁盘中按文件名访问并读出其中的数据。 主机通讯端口是MP3播放机与PC机交换数据的途径,PC通过该端口操作MP3播放机存储设备中的数据,拷贝、删除、复制文件等操作。目前最广泛使用的是USB总线,并且遵循微软定义的大容量移动存储协议规范,将MP3播放机作为主机的一个移动存储设备。这里需要遵循几个规范:USB通信协议、大容量移动存储器规范和SCSI协议。 音频DAC是将数字音频信号转换成模拟音频信号,以推动耳机、功放等模拟音响设备。这里要介绍一下数字音频信号。数字音频信号是相对模拟音频信号来说的。我们知道声音的本质是波,人说能听到的声音的频率在20Hz到20kHz之间,称为声波。模拟信号对波的表示是连续的函数特性,基本的原理是不同频率和振幅的波叠加在一起。数字音频信号是对模拟信号的一种量化,典型方法是对时间坐标按相等的时间间隔做采样,对振幅做量化。单位时间内的采样次数称为采样频 率。这样一段声波就可以被数字化后变成一串数值,每个数值对应相应抽样点的振幅值,按顺序将这些数字排列起来就是数字音频信号了。这是ADC(模拟-数字转换)过程,DAC(数字-模拟转换)过程相反,将连续的数字按采样时候的频率顺序转换成对应的电压。MP3解码器解码后的信息属于数字音频信号(数字音频信号有不同的格式,最常用的是PCM和I2S两种),需要通过DAC转换器变成模拟信号才能推动功放,被人耳所识别。 MP3播放机的显示设备通常采用LCD或者OLED等来显示系统的工作状态。控制键盘通常是按钮开关。键盘和显示设备合起来构成了MP3播放机的人机交互界面。 MP3播放机的软件结构跟硬件是相对应的,即每一个硬件部分都有相应的软件代码,这是因为大多数的硬件部分都是数字可编程控制的。 看了上面的介绍是不是已经被单片机原理,编程,信号与系统,电子线路以及诸多协议标准的单词轰炸得晕头转向了。其实这只不过是让大家了解,MP3虽然简单但也很复杂。 总结起来工作流程为读取贮体上的信号-→到解码芯片对信号进行解码(或解压缩)-→通过数模转换器将解出来的数字信号转换成模拟信号-→再把转换后的模拟音频放大-→低通滤波后到耳机输出口。 第一章 编码与解码 本文先介绍符合ISO/IEC 11172-3(MPEG 1 Audio codec Layer I, Layer II and Layer III audio specifications) 或 ISO/IEC 13818-3(BC Audio Codec)的音频编码原理。通过madlib解码库进行实现。 1.1 程序系统结构 mp3解码流程图 其中同步及差错检查包括了头解码模块 在主控模块开始运行后,主控模块将比特流的数据缓冲区交给同步及差错检查模块,此模块包含两个功能,即头信息解码及帧边信息解码,根据它们的信息进行尺度因子解码及哈夫曼解码,得出的结果经过逆量化,立体声解码,混淆缩减,IMDCT,频率反转,合成多相滤波这几个模块之后,得出左右声道的PCM码流,再由主控模块将其放入输出缓冲区输出到声音播放设备。 1.2 主控模块 主控模块的主要任务是操作输入输出缓冲区,调用其它各模块协同工作。 其中,输入输出缓冲区均由DSP控制模块提供接口。 输入缓冲区中放的数据为原始mp3压缩数据流,DSP控制模块每次给出大于最大可能帧长度的一块缓冲区,这块缓冲区与上次解帧完后的数据(必然小于一帧)连接在一起,构成新的缓冲区。 输出缓冲区中将存放的数据为解码出来的PCM数据,代表了声音的振幅。它由一块固定长度的缓冲区构成,通过调用DSP控制模块的接口函数,得到头指针,在完成输出缓冲区的填充后,调用中断处理输出至I2S接口所连接的音频ADC芯片(立体声音频DAC和DirectDrive耳机放大器)输出模拟声音。 1.3 同步及差错检测 同步及差错检测模块主要用于找出数据帧在比特流中的位置,并对以此位置开始的帧头、CRC校验码及帧边信息进行解码,这些解码的结果用于后继的尺度因子解码模块和哈夫曼解码模块。Mpeg1 layer 3的流的主数据格式见下图: 主数据的组织结构图 其中granule0和granule1表示在一帧里面的粒度组1和粒度组2,channel0和channel1表示在一个粒度组里面的两个通道,scalefactor为尺度因子quantized value为量化后的哈夫曼编码值,它分为big values大值区和count1 1值区 CRC校验:表达式为X16+X15+X2+1 1.3.1 帧同步 帧同步目的在于找出帧头在比特流中的位置,ISO 1172-3规定,MPEG1 的帧头为12比特的“1111 1111 1111”,且相邻的两个帧头隔有等间距的字节数,这个字节数可由下式算出: N= 144 * 比特率 / 采样率 如果这个式子的结果不是整数,那么就需要用到一个叫填充位的参数,表示间距为N +1。 1.3.2 头信息解码 头信息解码目的是找出这一帧的特征信息,如采样率,是否受保护,是否有填充位等。头信息见下图: 帧头信息结构图 其长度为4 字节,数据结构如下: typedef struct tagHeader { unsigned int sync : 11 ; / / 同步信息 unsigned int version : 2 ; / / 版本 unsigned int layer : 2 ; / / 层 unsigned int error2protection : 1 ; / / CRC校正 unsigned int bit2rate2index : 4 ; / / 位率索引 unsigned int sample2rate2index : 2 ; / / 采样率索引 unsigned int padding : 1 ; / / 空白字 unsigned int extension : 1 ; / / 私有标志 unsigned int channel2mode : 2 ; / / 立体声模式 unsigned int mode extension : 2 ; / / 保留 unsigned int copyright : 1 ; / / 版权标志 unsigned int original : 1 ; / / 原始媒体 unsigned int emphasis : 2 ; / / 强调方式 } HEADER 1.3.3 帧边信息解码 帧边信息解码的主要目的在于找出解这帧的各个参数,包括主数据开始位置,尺度因子长等。帧边信息如下图所示: 帧边信息(side_infomation)表 1.3.4 main_data_begin main_data_begin(主数据开始)是一个偏移值,指出主数据是在同步字之前多少个字节开始。需要注意的是,1.帧头不一定是一帧的开始,帧头CRC校验字和帧边信息在帧数据中是滑动的。2.这个数值忽略帧头和帧边信息的存在,如果main_data_begin = 0, 则主数据从帧边信息的下一个字节开始。 参见下图: 同步示意图 1.3.5 block_type block_type指出如下三种块类型: block_type = 0 长块 block_type = 1 开始块 block_type = 3 结束块 block_type = 2 短块 在编码过程中进行IMDCT 变换时,针对不同信号为同时得到较好的时域和频域分辨率定义了两种不同的块长:长块的块长为18个样本,短块的块长为6个样本。这使得长块对于平稳的声音信号可以得到更高的频率分辨率,而短块对跳变信号可以得到更高的时域分辨率。由于在短块模式下,3 个短块代替1个长块,而短块的大小恰好是一个长块的1/3,所以IMDCT的样本数不受块长的影响。对于给定的一帧声音信号,IMDCT 可以全部使用长块或全部使用短块,也可以长短块混合使用。因为低频区的频域分辨率对音质有重大影响,所以在混合块模式下,IMDCT对最低频的2个子带使用长块,而对其余的30个子带使用短块。这样,既能保证低频区的频域分辨率,又不会牺牲高频区的时域分辨率。长块和短块之间的切换有一个过程,一般用一个带特殊长转短(即,起始块block_type = 1)或短转长(即终止块,block_type = 3)数据窗口的长块来完成这个长短块之间的切换。因此长块也就是包括正常窗,起始块和终止块数据窗口的数据块;短块也包含18个数据,但是是由6个数据独立加窗后在经过连接计算得到的。 1.3.6 big_values, count1 每一个粒度组的频谱都是用不同的哈夫曼表来进行编码的。编码时,把整个从0 到奈奎斯特频率的频率范围(共576个频率线)分成几个区域,然后再用不同的表编码。划分过程是根据最大的量化值来完成的,它假设较高频率的值有较低的幅度或者根本不需要编码。从高频开始,一对一对的计算量化值等于“0”的数目,此数目记为“rzero”。然后4个一组地计算绝对值不超过“1”的量化值(也就是说,其中只可能有-1,0 和+1共3 个可能的量化级别)的数目,记为“count1”,在此区域只应用了4 个哈夫曼编码表。最后,剩下的偶数个值的对数记为“big values”, 在此区域只应用了32 个哈夫曼编码表。在此范围里的最大绝对值限制为8191。此后,为增强哈夫曼编码性能,进一步划分了频谱。也就是说,对big values的区域(姑且称为大值区)再细化,目的是为了得到更好的错误顽健性和更好的编码效率。在不同的区域内应用了不同的哈夫曼编码表。具体使用哪一个表由table_select给出。从帧边信息表中可以看到:当window_switch_flag == 0时,只将大值区在细分为2个区,此时region1_count无意义,此时的region0_count的值是标准默认的;但当window_switch_flag == 1时再将大值区细分为3 个区。但是由于region0_count 和region1_count是根据从576个频率线划分的, 因此有可能超出了big_values *2的范围,此时以big_values *2 为准. region0_count 和region1_count表示的只是一个索引值,具体频带要根据标准中的缩放因子频带表来查得. 参见下图: 缩放因子、大值区、1值区和零值区分布图 1.3.7 处理流程 1.4 缩放因子(scale factor)解码 缩放因子用于对哈夫曼解码数据进行逆量化的样点重构。根据帧边信息中的scalefactor_compress 和标准中的对应表格来确定的slen1和slen2 对缩放因子进行解码,即直接从主数据块中读取缩放因子信息并存入表scalefac_l[gr][ch][sfb]和scalefac_s[gr][ch][sfb]中。对第2 粒度组解码时,若为长块,则必须考虑尺度因子选择信息。 1.4.1 尺度因子带(scalefactor-band) 在mpeg layer 3中576条频率线根据人耳的听觉特性被分成多个组,每个组对应若干个尺度因子,这些组就叫做尺度因子带,每个长窗有21个尺度因子带而每个短窗有12个尺度因子带。 1.4.2 scfsi scfsi(尺度因子选择信息)用于指出是否将粒度组1的尺度因子用于粒度组2。如果为0表示不用,则在比特流中需读取粒度组2的尺度因子。 1.4.3 处理流程 缩放因子解码流程图 1.5 哈夫曼解码 哈夫曼编码是一种变长编码,在mp3哈夫曼编码中,高频的一串零值不编码,不超过1的下一个区域使用四维哈夫曼编码,其余的大值区域采用二维哈夫曼编码,而且可选择地分为三个亚区,每个有独立选择的哈夫曼码表。通过每个亚区单独的自适应码表,增强编码效率,而且同时降低了对传输误码的敏感度。 在程序实现上,哈夫曼表逻辑存储采用了广义表结构,物理存储上使用数组结构。查表时,先读入4bit数据,以这4bit数据作为索引,其指向的元素有两种类型,一种是值结构,另一种是链表指针式结构,在链表指针式结构中给出了还需要读取的bit数,及一个偏移值。如果索引指向的是一个值结构,则这个值结构就包含了要查找的数据。如果索引指向的是一个链表指针式结构,则还需再读取其中指定的比特数,再把读取出的比特数同偏移值相加,递归的找下去,直到找到值结构为止。 1.5.1 处理流程 1.6 逆量化 1.6.1 逆量化公式 逆量化由下面公式算出: 短窗模式: 长窗模式: 其中: is[i] :由huffman编码构造的频率线 sbg :subblock_gain scalefac_multiplier := (scalefac_scale + 1) / 2 其它值均可在帧边信息中找到。 1.7 联合立体声转换 1.7.1 强度立体声转换 在强度立体声模式中,左声道传的是幅值,右声道的scalefactor传的是立体声的位置is_pos。需要转换的频率线有一个低边界,这个低边界是由右声道的zero_part决定的,并且使用右声道的尺度因子来作为is_pos。 强度立体声比 左声道: 右声道: 1.7.2 M_S立体声转换 在M_S立体声模式中,传送的是规格化的中间/旁边声道的信息 左声道 右声道  其中Mi是channel[0]的值,Si是channel[1]的值 1.7.3 处理流程 强度立体声模式: MS_STEREO因公式单一,较易理解,故流程图略去。 1.7.4 数据帧 PCM信号进行MP3压缩时,以1152个PCM采样值为单位,封装成具有固定长度的MP3数据帧,帧是MP3文件的最小组成单位。在解码时,利用数据帧里的信息就可以恢复出1152个PCM采样值。这1152个采样值被分为2个粒度组,每个粒度组包含576个采样值。一个MP3数据帧分为5个部分:帧头、CRC校验值、边信息、主数据、附加数据。 数据流的同步以及帧头信息的读取MP3数据流的同步以帧为单位,每一帧的帧头都包含同步信息。这个同步信息是连续的12比特的‘1’组成。MP3音频解码过程中的第一步就是使解码器与输入数据流同步。在启动解码器后,可以通过搜索数据流中的12比特长的同步字来完成。在取得同步以后跟着的数据就是帧头信息,包括采样率、填充位、比特率等信息。 主数据的读取在MP3编码过程中使用了比特池技术,所以当前帧的主数据不一定全部都在当前帧中,在解码过程中,必须结合主数据开始指针的值来确定主数据的开始位置。主数据包含的数据有缩放因子、哈夫曼数据及附加数据。这些字段在主数据中有固定的格式。 1.7.5 哈弗曼解码流程 哈夫曼解码和反量化在MP3编码过程中,根据心理声学模型的输出,对离散余弦变换的输出样本以粒度为单位进行的量化和分配,再对量化的结果进行哈夫曼编码。量化和编码主要是通过循环迭代完成的,循环模块分为三层来描述,最高层为帧循环,它调用外层迭代循环,而外层迭代循环又调用内层迭代循环。但在解码过程中,哈夫曼解码和反量化过程是分开实现的。每个粒度组的频率线都是用不同的哈夫曼表来进行编码的,因此在解码过程中,需要采用不同的解码方法。反量化频谱过程就是基于所得到的哈夫曼解码数据,根据逆量化全缩放公式和帧边信息,对于不同的窗类型采用不同的公式以恢复576个频率线的真实值。 1.7.6 立体声处理 反量化过程中得出的频谱值不是按相同顺序排列的。在编码的MDCT过程中,对于长窗产生的频谱值先按子带然后按频率排列;对于短窗,产生的频谱值按子带、窗、频率的顺序排列。为了提供哈夫曼编码效率,短窗中的数据被重新排列,按照子带、频率、窗的顺序排列。解码时,重排序及时将短窗中的频谱值重新排列。同样,在编码的MDCT过程中,为了得到更好的频域特性,对长窗对应每个子带进行了去混叠处理,为了得到正确的音频信号,在解码时必须对长窗对应的子带进行混叠重建。 逆向离散余弦变换逆向离散余弦变换主要是使用逆向离散余弦变换的公式,对反量化得出的信号进行变换。逆向离散余弦变换的计算十分复杂,为了提高效率,可以对计算做一些优化。 频率反转和子带合成频率反转是对逆向离散余弦变换的输出值中的奇数号子带(0到31号子带中的1,3,5,...,31)中的奇数号样本值(每个子带中的0到17号样本值的1,3,5,...,17号样本值)进行反相处理,用来补偿编码时为提高离散余弦变换效率而进行的频率反转。子带合成滤波器将32个带宽相等的子带中的频域信号反变换成时域信号。子带合成是逆向离散余弦变换后的一个通道中32个子带的样值,经过一系列的计算还原出32个PCM数字音频信号的过程。子带合成过程先将32个子带样值进行逆向离散余弦变换,生成64个中间值,将这64个中间值转入到一个长为1024点的类似先进先出FIFO的缓存,再在这1024个值中抽取一半,构成一个512个值的矢量,再进行加窗运算,最后将加窗结果进行叠加生成32个时域输出。 1.8 重排序 重排序的目的在于把哈夫曼解码之后的短块的每个尺度因子带3个窗,每个窗sfbwidth(尺度因子带宽度)个采样的顺序整理成为每个子带三个窗,每个窗六个采样xr[sb][window][freq_line]的顺序。 1.8.1 处理流程 重排序处理流程图 1.8.2 混淆缩减 对于长块,在进入IMDCT之前应当先进行混淆缩减。其算法思想是用蝶形算法进行相邻块相邻频率线的调整。如图: 混淆缩减算法图 其计算公式如下: 其中ci可由ISO 1172.3 table B.9查得 计算流程如下(pascal 描述): For sb = 1 to 32 do For i = 0 to 7 do Xar[18sb- i -1] = xr[18sb – i - 1]cs[i] – xr[18sb + i]ca[i] Xar[18sb+i] = xr[18sb +i]cs[i] + xr[18sb -i- 1]ca[i] End for End for 1.9 IMDCT覆盖叠加 MDCT的目的在于进行时域到频域的转换,减少信号的相关性,使得信号的压缩可以更加高效地完成,而它的反变换IMDCT的目的在于将信号还原为没有变换之前的数值,使频域值向时域值过渡。 其公式如下: 在进行了IMDCT变换之后,需对频率信号进行加窗、覆盖、叠加。 1.9.1 加窗: 长块: 开始块: 结束块: 短块的每个窗口分别计算: 1.9.2 叠加: 将每一块变换出来的值的前半部分与前一块的后半部分相加,并把后半部分保留来和下一块的前半部分相加。如下公式: resulti = zi + si for i = 0 to 17 si = zi+18 for i = 0 to 17 1.9.3 Szu-Wei Lee的快速算法 Szu-Wei Lee的IMDCT快速算法是针对非2的n次幂个点的IMDCT快速算法。他的主要步骤如下: 1 将N点MDCT化为N/2点DCT-IV 2 将N/2点DCT-IV化为N/2点SDCT-II 3 将N/2点SDCT-II化为2个相同的N/4点SDCT-II 4 计算SDCT-II(9点) 在本程序中,因为对短块使用这个快速算法并没有带来较大的速度改善,故只对长块使用此快速算法,相较于直接运算的648次乘和612次加来,它只用43次乘和115次加。 1.10 频率反转 在IMDCT之后,进入合成多相滤波之前必须进行频率反转补偿以校正多相滤波器组的频率反转。方法是将奇数号子带的奇数个采样值乘以-1. 1.11 合成多相滤波 合成多相滤波的目的是将频域信号转化为时域信号。其原理流程如下: 合成多相滤波算法图 上图流程可简述如下: 5 将从32个子带抽来的32个sample值通过一个矩阵运算算出64个中间值 6 将这64个中间值放入一个长度为1024的FIFO缓冲区(这个缓冲区初始化为0)。 7 从这个缓冲区中每连续的128个值中取头尾各32个值,合为64个值。完成后组成512值的向量U 8 加窗,即将Ui与窗口系数Di相乘,得到另一512值向量W 9 最后将这512值向量W每连续的32个值中顺次取一个值,一次共取得512/32 = 16个值相加。完成后一共取得32个最终的时域信号值。 1.1.2 Byeong Gi Lee的dct快速算法 Byeong Gi Lee的DCT快速算法是用于2的n次幂个点的dct快速算法。它用于N点的DCT时仅需(N/2) * log2N次乘法和小于3·*(N/2)*log2 N ) 次加法。 其基本思想是,将N个点的DCT转化为两个N/2个点的DCT的和。进一步分解,即重复这个过程,减少乘法数量。 由于向量Vi的运算是一个类似于DCT的变换,故使用了此快速算法。32点运算共使用了80次乘法和80次加法119次减法。 第二章 存储器设计 摘要:K9K2GXXU0M是三星公司生产的大容量闪存芯片,它的单片容量可高达256M。文中主要介绍了K9K2GXXU0M的特性、管脚功能和操作指令,重点说明了K9K2GXXU0M闪存的各种工作状态,并给出了它们的工作时序。 关键词:闪存;K9K2GXXU0M;大容量 Flash 闪存(FLASH MEMORY闪烁存储器)是一种可以进行电擦写,并在掉电后信息不丢失的存储器,同时该存储器还具有不挥发、功耗低、擦写速度快等特点,因而可广泛应用于外部存储领域,如个人计算机和MP3、数码照相机等。但随着闪存应用的逐渐广泛,对闪存芯片容量的要求也越来越高,原来32M、64M的单片容量已经不能再满足人们的要求了。而 K9K2GXXX0M的出现则恰好弥补了这一不足。K9K2GXXX0M是三星公司开发的目前单片容量最大的闪存芯片,它的单片容量高达256M,同时还提供有8M额外容量。该闪存芯片是通过与非单元结构来增大容量的。芯片容量的提高并没有削弱K9K2GXXX0M的功能,它可以在400μs内完成一页2112个字节的编程操作,还可以在2ms内完成128k 字节的擦除操作,同时数据区内的数据能以50ns/byte的速度读出。 K9K2GXXU0M大容量闪存芯片的I/O口既可以作为地址的输入端,也可以作为数据的输入/输出端,同时还可以作为指令的输入端。芯片上的写控制器能自动控制所有编程和擦除操作,包括提供必要的重复脉冲、内部确认和数据空间等。 2.1 K9K2GXXU0M的性能参数 K9K2GXXU0M的主要特点如下: ●采用3.3V电源; ●芯片内部的存储单元阵列为(256M+8.192M)bit×8bit,数据寄存器和缓冲存储器均为(2k+64)bit×8bit; ●具有指令/地址/数据复用的I/O口; ●在电源转换过程中,其编程和擦除指令均可暂停; ●由于采用可靠的CMOS移动门技术,使得芯片最大可实现100kB编程/擦除循环,该技术可以保证数据保存10年而不丢失。 表1所列是K9K2GXXU0M闪存芯片的编程和擦除特性参数。表中的tCBSY的最长时间取决于内部编程完成和数据存入之间的间隔。 表1 K9K2GXXU0M的编程和擦除特性 参 数 符 号 最 短 典 型 最 长 单 位 编程时间 tPROG   300 700 μs 缓存编程的虚拟忙时间 tCBSY   3 700 μs 在同一页中的局部编程循环 主列 NOP     4 周期 空列     4 周期 块擦除时间 tBERS   2 3 ms 2.2 K9K2GXXU0M的管脚说明 K9K2GXXU0M有48个引脚,其引脚排列如图1所示。具体功能如下: I/O0~I/O7:数据输入输出口,I/O口常用于指令和地址的输入以及数据的输入/输出,其中数据在读的过程中输入。当芯片没有被选中或不能输出时,I/O口处于高阻态。 CLE:指令锁存端,用于激活指令到指令寄存器的路径,并在WE上升沿且CLE为高电平时将指令锁存。 ALE:地址锁存端用于激活地址到内部地址寄存器的路径,并在WE上升沿且ALE为高电平时,地址锁存。 CE:片选端用于控制设备的选择。当设备忙时CE为高电平而被忽略,此时设备不能回到备用状态。 RE:读使能端,用于控制数据的连续输出,并将数据送到I/O总线。只有在RE的下降沿时,输出数据才有效,同时,它还可以对内部数据地址进行累加。 WE:写使能控制端,用于控制I/O口的指令写入,同时,通过该端口可以在WE脉冲的上升沿将指令、地址和数据进行锁存。 WP:写保护端,通过WP端可在电源变换中进行写保护。当WP为低电平时,其内部高电平发生器将复位。 R/ B:就绪/忙输出,R/ B的输出能够显示设备的操作状态。R/ B处于低电平时,表示有编程、擦除或随机读操作正在进行。操作完成后,R/ B会自动返回高电平。由于该端是漏极开路输出,所以即使当芯片没有被选中或输出被禁止时,它也不会处于高阻态。 PRE:通电读操作,用于控制通电时的自动读操作,PRE端接到VCC可实现通电自动读操作。 ● VCC:芯片电源端。 ● VSS:芯片接地端。 ● NC:悬空。 2.3 K9K2GXXU0M的坏块 闪存同其它固体存储器一样都会产生坏块。坏块是包含一位或多位无效位的块。在K9K2GXXU0M中坏块并不影响正常部分的工作,这是因为在K9K2GXXU0M中,各块之间是隔离的。坏块均可以通过地址的布置系统找到,而在K9K2GXXU0M中地址为00h的第一块一定应当是正常的。坏块在大多数情况下也是可擦写的,并且一旦被擦掉就不可能恢复。因此,系统必须能根据坏块信息来识别坏块,并通过流程图建立坏块信息表,以防止坏块信息被擦除。 在闪存的使用中,可能会产生新的坏块,从而使正常工作出现一些错误。在擦除和编程操作后,如果出现读失败,应当进行块置换。块置换是由容量为一页的缓冲器来执行的,可以通过发现一个可擦的空块和重新对当前数据对象进行编程来复制块中的剩余部分。为了提高存储空间的使用效率,当由单个字节错误而引起的读或确认错误时,应由ECC收回而不要进行任何块置换。 2.4 K9K2GXXU0M的工作状态 2.4.1 按页读操作 K9K2GXXU0M的默认状态为读状态。读操作是以通过4个地址周期将00h地址写到指令寄存器为开始指令,一旦该指令被锁存,就不能在下页中写入读操作了。 当地址变化时,随机读操作可以将选定页中的2112字节数据在25μs内存入数据寄存器中。系统可以通过分析R/ B脚的输出来判断数据转移是否完成。而存入数据寄存器的数据可以很快地被读出,如一页的数据通过连续的RE脉冲可以在50ns内读出。 可以通过写入随机数据输出指令来从一页中随机地输出数据。数据地址可以从将要输出的数据地址中通过随机输出指令自动找到下一个地址。随机数据输出操作可以多次使用。图2给出了读操作的时序图。 2.4.2 页编程 K9K2GXXU0M的编程是按页进行的,但它在单页编程周期中支持多个部分页编程,而部分页的连续字节数为2112。写入页编程确认指令(10h)即可开始编程操作,但写入指令(10h)前还必须输入连续数据。 连续装载数据在写入连续数据输入指令(80h)后,将开始4个周期的地址输入和数据装载,而字却不同于编程的数据,它不需要装载。芯片支持在页中随机输入数据,并可根据随机数据输入指令(85h)自动变换地址。随机数据输入也可以多次使用。图3为其编程操作时序图。 2.4.3 缓存编程 缓存编程是页编程的一种,可以由2112字节的数据寄存器执行,并只在一个块中有效。因为K9K2GXXU0M有一页缓存,所以当数据寄存器被编入记忆单元中时它便可以执行连续数据输入。缓存编程只有在未完成的编程周期结束且数据寄存器从缓存中传数后才能开始。通过R/ B脚可以判断内部编程是否完成。如果系统只用R/ B来监控程序的进程,那么,最后一页目标程序的次序则必须由当前页编程指令来安排。如果由缓存编程指令来安排,状态位必须在最后一个程序执行完和下一个操作开始前确定。图4为缓存编程操作时序图。 2.4.4 存储单元复录 该功能可以快速有效地改写一页中的数据而不需要访问外部存储器。因为消耗在连续访问和重新装载上的时间被缩短,因而系统的执行能力会提高。尤其当块的一部分被升级而剩下的部分需要复制到新的块中去时,它的优势就明显显示出来了。该操作是一个连续执行的读指令,但不用连续地到目的地址访问和复制程序。一个原始页地址指令为“35h"的读操作,就可以把整个2112字节的数据转移到内部数据缓冲器中。当芯片返回就绪状态时,带有目的地址循环的页复制数据输入指令就会写入。而该操作中的错误程序会由“通过/失败”状态给出。但是,如果该操作的运行时间过长,将会由于数据丢失而引起位操作错误,从而导致外部错误“检查/纠正”设备检查失效。由于这个原因,该操作应使用两位错误纠正。图5给出了存储单元复录操作的时序图。 2.4.5 块擦除 K9K2GXXU0M的擦除操作是以块为基础进行的。块地址装载将从一个块擦除指令开始,并在两个循环内完成。实际上,当地址线A12~A17悬空时,只有地址线A18~A28可用。装入擦除确认指令和块地址即可开始擦除。该操作必须按此顺序进行,以免存储器中的内容受到外部噪声的影响而出现擦除错误。图6为块擦除操作的时序图。 2.4.6 读状态 K9K2GXXU0M内的状态寄存器可以确认编程和擦除操作是否成功完成。在写入指令(70h)到指令寄存器后,读循环会把状态寄存器的内容在CE或RE的下降沿输出到I/O。而在新的指令到达前,指令寄存器将保持读状态,因此如果状态寄存器在一个随机读循环中处于读状态,那么在读循环开始前应给出一个读指令。 2.5 结束语 由于闪存具有非易失性、可电擦写、掉电后数据不丢失等特点,所以得到越来越广泛的应用。同时随着闪存使用的广泛,对它容量的要求也越来越高。而K9K2GXXU0M的出现则填补了大容量闪存芯片的空白。K9K2GXXU0M除具有容量大的优点外,也可以在400μs内完成一页2112byte的编程操作,并可在2ms内完成128k byte的擦除操作,因此K9K2GXXU0M是目前外部存储的领域的一种非常好的存储芯片。 第三章 电源控制      VCH:充电电压输入端;   SNS :电流捡测电阻连接端;   VIN:电池电压检测输入;   VDD:芯片电源端;   VSS:地端; DQ:数据输入/输出端; 3.1 主要特点   DS2770是Dallas Semiconductor公司生产的一款电池电量计和锂/镍化学电池充电器集成器件,它可以通过1-Wire接口与主系统进行通信,以读取电压、温度等测量信息,同时读写EEPROM存储器,因而可广泛应用于便携式设备中.   DS2770电池管理IC可完成多种功能,它可利用简单的限流型电源给电池充电,也可作为一个高精度电量计.在通过1-Wire通信接口与主系统连接时,DS2770可以提供充电、剩余电量估计、安全管理、非易失性参数存储等功能,DS2770的主要特点如下:   ●可由用户选择锂脉冲充电或镍电池充电(dT/dt充电终止方式)   ●带有实时失调纠正的高精度电流测量功能,可选择内部集成的25mΩ检测电阻   ●带有32字节可锁定的EEPROM和16字节SRAM   ● 具有Dallas 1-Wire 数字通信接口和唯一的64位ID. 3.2 引脚功能   DS2770为16脚TSSOP封装,图1为其引脚排列图,各引脚的功能如下:   UV :电池电压检测端,当检测到电池电压为较低值时,该端输出低电平;   CC:充电控制输出端低电平有效;   LS1与LS2:电流检测输入端. 3.3 DS2770的结构原理   DS2770为锂离子电池充电器时采用脉冲充电方式,该方法在充电源和充电终止方式上与线性充电有所不同.脉冲充电器需要一个限制电流等于期望充电率的电源;在脉冲充电占空比降低到一定程度(如低于5%至10%)时,脉冲充电
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服