FLASH 存储器 浏览次数:约 822 次] 存储器[浏览次数: ? FLASH 存储器又称闪存,它结合了 ROM 和 RAM 的长处,不仅具备电子可擦 除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据(NVRAM 的优 势),U 盘和 MP3 里用的就是这种存储器 。在过去的 20 年里,嵌入式系统一直使用 ROM(EPROM)作为它们的存储设备, 然而近年来 Flash 全面代替了 ROM(EPROM)在嵌入 式系统中的地位, 用作存储 Bootloader 以及操作系统或者程序代码或者直接当硬盘使用(U 盘)。 目录 ? ? ? Flash 存储器的简介 Flash 存储器的擦除 FLASH 存储器的测试方法研究 Flash 存储器的简介 ? 在众多的单片机中都集成了 Flash 存储器系统, 该存储器系统可用作代码和数 据的存储。它在整个存储器中所处的位置在最起始的位置,一般其起始地址从 0 开始,如 图 1 所示。 图 1 存储器系统示意图 Flash 是由一组可独立擦除的 1KB 区块所构成的, 对一个区块进行擦除将使该区块的 全部内容复位为 1。 下面这幅图是 Flash 存储器的简单示意图, 此图形象的体现了 Flash 存储器是由 1KB 区块构成,而且每个区块的基地址都固定的,其基地址如图 2 所示。 图 2 Flash 存储器示意图 Flash 存储器的操作 对 Flash 存储器的操作一般是进行读、 写和擦除。 Flash 存储器的擦除必须是以 1KB 为单位对齐的地址并指定哪一区块被擦除,或者全部擦除。 Flash 存储器的编程写入的地址必须以字(4 个字节)为单位对齐,且指明要写入的 具体地址。也就是说可以是任意地址,但必须满足写入的地址是字对齐的。 Flash 存储器的读取也可以是任意地址的数据,但必须满足读取的地址是字对齐的, 否则,读出的数据绝对不正确,结果也难以预料。 Flash 存储器的擦除 ? Flash 存储器的擦除必须是以 1KB 为单位对齐的地址并指定哪一区块被擦 除,或者全部擦除。也就是说以区块是 flash 擦除的最小单位。 ●执行 1-KB 页的擦除 执行 1KB 页的擦除步骤如下: (1) 将页地址写入 FMA 寄存器 (2) 将 Flash 写入匙码(flash write key)写入 FMC 寄存器, 并将 ERASE 位置位 (写 入 0xA4420002)。 (3) 查询 FMC 寄存器直至 ERASE 位被清零。 如图 1 所示: 图 1 执行 1KB 页的擦除步骤示意图 实例程序如程序清单 1 所示: 程序清单 1 ●执行 Flash 的完全擦除 执行完全擦除的步骤如下: (1) 将 Flash 写入匙码(flash write key)写入 FMC 寄存器,并将 MERASE 位置位 (写入 0xA4420004)。 (2) 查询 FMC 寄存器直至 MERASE 位被清零。 如图 2 所示: 图 2 执行完全擦除的步骤示意图 实例程序如程序清单 2 所示: FLASH 存储器的测试方法研究 ? 1.引言 随着当前移动存储技术的快速发展和移动存储市场的高速扩大,FLASH 型存储器的用 量迅速增长。FLASH 芯片由于其便携、可靠、成本低等优点,在移动产品中非常适用。市 场的需求催生了一大批 FLASH 芯片研发、生产、应用企业。为保证芯片长期可靠的工作, 这些企业需要在产品出厂前对 FLASH 存储器进行高速和细致地测试,因此,高效 FLASH 存储器测试算法的研究就显得十分必要。 不论哪种类型存储器的测试, 都不是一个十分简单的问题, 不能只将存储器内部每个存 储单元依次测试一遍就得出结论, 这是因为每一个存储单元的改变都有可能影响存储器内部 其他单元的变化(这种情况又是常常发生的)。这种相关性产生了巨大的测试工作量[1]。 另外,FLASH 存储器有其自身的特点,它只能将存储单元内的数据从“1”写为“0”,而不能 从“0”写为“1”,若想实现“0”->“1”操作,只能把整个扇区或整个存储器的数据擦除,而擦 除操作要花费大量的时间。FLASH 存储器还有其他特性,比如读写速度慢、写数据之前要 先写入状态字、很多 FLASH 只适于顺序读写而不适于跳转操作等,这些特点都制约了 FLASH 存储器的测试。 为解决 FLASH 测试中的这些问题,人们提出了应用内建自测试[2]或利用嵌入式软 件[3]等测试方法测试相关性能,都取得了比较好的效果,但这些方法大多不适用于利用 测试仪进行批量的产品测试。而多数对通用存储器测试很有效的算法,由于受到 FLASH 器 件自身的限制(如不能不能直接从“0”写为“1”),很难直接适用于 FLASH 测试。 文本在简单介绍 FLASH 芯片的结构与特点之后, 说明了 FLASH 存储器测试程序原理。 在此基础上,分析和改进了几种通用的存储器测试方法,使之能有效地应用于 FLASH 测试 中。这些方法简单高效,故障覆盖率高,并且可以快速预先产生,与其他一些测试算法[4] [5]相比,更适于应用在测试仪中进行工程测试。本文分析了这些方法的主要特点,在此基 础之上,介绍了实际 FLASH 存储器测试中应用的流程。 2.FLASH 芯片的结构特征 FLASH 存储器种类多样, 其中最为常用的为 NOR 型和 NAND 型 FLASH。 通常, NOR 型比较适合存储程序代码,其随机读写速度快,但容量一般较小(比如小于 32 MB),且价 格较高;而 NAND 型容量可达 lGB 以上,价格也相对便宜,适合存储数据,但一般只能整 块读写数据,随机存取能力差。它们对数据的存取不是使用线性地址映射,而是通过寄存器 的操作串行存取数据。 一般来说,不论哪种类型的 FLASH,都有一个 ID 寄存器,用来读取存储器信息,可 根据供应商提供的芯片资料进行具体的类型判断。另外,FLASH 存储器的擦除过程相对费 时,且擦除流程相对复杂。图 1 为 FLASH 芯片擦除的一般流程。 可见,擦除数据的操作限制了 FLASH 芯片的工作速度。此外,其他一些特性,比如读 写速度慢、写数据之前要先写入状态字、很多 FLASH 都设有冗余单元等等,这些特点都制 约了测试速度的提高。因此,设计合理的方法,或将几块 FLASH 并测,并且应用测试算法 减少测试时间就显得十分必要。 3.系统连接 本文选用的芯片为 AMD 公司的 NOR 型 FLASH——Am29LV400B 及三星公司的 NAND 型 FLASH K9F5608UOB,它们都可通过 44 PIN 专用适配器 和数字电路测试仪 的数字通道直接相连。我们所采用的硬件实验平台是北京自动测试技术所开发的 BC3192 数模混合测试系统, 该系统可提供工作速度快, 算法图形产生方式灵活, 非常适合测试需要。 4.测试实现方法 假设存储器可选址的存储单元数为 N, 由于存储器芯片每次只能访问一个存储单元, 每 个单元只有“0”或“1”两种状态, 所以所有可能出现的状态共 2N 种。 由于选取的地址又是随 机的,所以,当测试步数为 M 时,选址序列组合可能有 2N NM 种之多。即使采用全“0”或 全“1”两种图案测试,总的测试图形也将有 2NM 种,这是个巨大的数字。 为了能够有效地检测存储器芯片, 必须分析半导体存储器的结构, 确定和选择几种能够 有效检验存储器功能的图形,使之既能达到检测目的,又使测试量限定在允许范围之内。但 实际应用中, 由于每种测试图形都有其局限性, 再加上各个生产厂家以及各种型号存储器的 特性不完全一致,现在还没有最佳的统一测试方法。 根据 FLASH 芯片的特点,我们主要改进并使用了以下几种办法: 4.1 奇偶校验图形检验法 奇偶校验图形检验法 [6] 是一种比较适合存储器测试的方法。 在奇偶性图形检验法中, 向存储单元矩阵写入的数据图案是根据存储单元选址地址码的奇偶性而定的。 如果存储单元 的行地址码和列地址码中有偶数个 1, 其奇偶性为 0, 则在该存储单元中写入“0” (或“1”) ; 如果有奇数个 1,其奇偶性为 1,则在该存储单元中写入“1”(或“0”);存储单元矩阵存入 的信号数据将是行地址码和列地址码之间的异或关系,其算法如下: 式中 Pr 为行地址的奇偶性,Pc 为列地址的奇偶性。 FLASH 芯片奇偶性图形功能检测的流程是:首先根据算法写入背景图形,然后逐位读 出并检验结果的正确性,再将芯片数据擦除,以反码图形重复上述测试过程。其总的测试步 数为 M=4N。 由于奇偶性图形是不对称的, 任何一位的地址译码器失效都会引起本应写入互为反码数 据的两个存储单元之一重复选址, 并且第二次选址改变了第一次选址时写入的内容, 而另一 个存储单元未被访问。因此地址奇偶性图形可以很好地检验出地址译码器的故障。 奇偶性图形每次都把整个存储器单元写完后再整体读出, 没有反复擦除的过程 (整个过 程只需擦除两次),非常适用于 FLASH 芯片测试。 4.2 齐步法 齐步法[6]是对存储器的每个单元依次进行检验的一种方法。首先从第一个存储单元 开始, 逐个对每个单元进行取反和检验, 直到最后一个单元检测结束才完成一遍扫描。 然后, 在背景为反码的情况下,从第一个存储单元开始,逐个对每个单元进行取反和检验,直到最 后一个单元检测结束。整个过程就像所有单元一起向前走步一样,因此称为“齐步法”。根据 FLASH 芯片特点,我们改变在反码背景条件下走步的过程,把它改造如下,形成了适合的 齐步算法。 在图 2 中给出了测试 FLASH 齐步法的测试流程: 在测试之前,每个存储单元具有信息“1”。首先在存储矩阵中写入背景图案(初始状态 为全“1”),然后从地址 A0 开始选址进行读“1”,写“0”,读“0”操作,并检验读出结果。接 着,依次到下一个选址单元重复该操作(读“1”,写“0”,读“0”),直到全部存储单元(A =N-1)重复完为止。再在读操作方式下对全部存储单元进行一次正向扫描读出,检查有 无正向对反向的多重写入问题。然后将存储器输入擦除,使之全部单元为全“1”。进而开始 反向扫描:从最高地址 AN-1 开始执行读“1”,写“0”,读“0”操作,逐位进行上述操作过 程,直至最终地址为 AN-1,最后对全部存储单元进行读“0”扫描,以检验读出结果的正确 性。 用这种测试算法检测存储芯片, 可使每个存储单元都被访问。 既能保证每个存储单元都 能存储“1”和“0”数据, 又能保证每个存储单元都受到周围其他单元的读“1”、 读“0”和写“1”、 写“0”的打扰。齐步法总的测试步数为: 式(3)中,W 表示写操作,R 表示读操作,Q 表示“1”, 表示“0”。Bij 表示存储器第 i 行 j 列的存储单元。 WBij(Q)就表示对第 i 行 j 列的存储单元进行写“1”操作所用的时间。 如 由式(3)可知,其测试步数共 9N,且整个过程只需两次擦除操作,可见它是一种即 快速又有效的方法。 4.3 移动变反法 移动变反测试法[6]是按顺序变反每个地址存储单元数据的方法。它需要在变反前后 读出每个存储单元的数据,而且,还必须借助于前进和后退的地址寻址序列产生地址跳跃, 地址以 20、21…、2n-1 次方的增量变化(n 是地址位数)。按照以上规律进行地址跳变 后,再对每个地址进行三次操作:读、写和读即可完成一个循环。 以上操作的目的主要在于地址间产生有效相互打扰, 但显然如果以整个芯片为单元进行 上述操作需要多次擦除数据,因此对 FLASH 测试芯片应做如此改进:以扇区为单元完成操 作。假设 FLASH 芯片有 N 个扇区,移动变反法的功能测试先要以“1”为背景图案写入全部 存储单元。首先,在第一个扇区,对 A0 存储单元读出并验证是“1”,再将该存储单元改写 成“0”,最后读出该存储单元的信息以证明新写入的“0”仍存于该存储单元中。第一扇区测 试地址按有效位的阶 20 递增,对每个存储单元都要重复上述的读“1”,写“0”读“0”的操作 过程,需要测试步长为 3n(n 为该扇区的存储单元数)才能使全部的存储单元都变成“0”。这 次测试的地址序列是递增 1 的,即由地址最低位 A0 增加到最高位 A(n-1),对 A(n- 1)存储单元进行读“1”,写“0”和读“0”验证。 对第二个扇区,以下一个地址阶 21 作为地址增量的变化量,每次用不同的地址位作为 最低位(分别为第 0 位和第 1 位),使地址以此增量的变化通过所有可能的地址。因此在 一次测试程序中所有地址的存储单元都被测试一次。 然后,依次以 22、24…2N 作为地址增量,重复上述过程,每完成一个循环便产生一 个循环进位。 由于各个扇区的大小不同,移动变反法功能测试图形步长为 3n(n 为最大扇区存储单 元个数)。