5.2 闪存NAND电路
闪存芯片(Flash)一般分为NOR Flash和NAND Flash两种,NOR Flash容量小,有独立的地址线,多用于存储较小的程序代码(如引导代码)和程序参数。NAND Flash则容量大,地址数据共用一组引线,现在人们多用NAND Flash,在平板电脑中NAND Flash相当于电脑中的硬盘,用来安装操作系统,如Andriod、iOS,Linux等,还可以存放应用程序,以及保存用户的数据、文件等。
平板电脑中的闪存芯片如图5-7所示。
图5-7 闪存芯片
5.2.1 闪存控制器
闪存芯片中数据的存取由闪存控制器来控制,其方框图如图5-8所示。
图5-8 闪存控制器方框图
CPU内部总线和闪存控制器的接口电路相连,经过接口电路将数据和命令及逻辑地址分开,数据送往数据FIFO电路进行缓存,命令(即操作码)及逻辑地址(即地址码)被送往寄存器组,连同寄存器组中的控制设置参数一起送给控制器,并由控制器中的命令解码电路和时序形成电路生成具有时序和逻辑关系的控制信号,输出给闪存芯片的相应引脚,同时控制器中的地址形成电路将逻辑地址转换为闪存地址,送给多路数据合成器,控制器中形成的命令也一并被送到多路数据合成器。当CPU有数据要写入闪存时,32 位的数据经数据FIFO缓存后,经过8位/32位数据位宽互换电路后,转换为4组的8位数据,然后依次送往ECC校验电路,生成校验码,该校验码连同数据一起,送往多路数据合成器,在控制器的作用下,由多路数据合成器,将数据、地址和命令一起经过I/O接口,送往闪存存储器芯片。当读取数据时,从闪存芯片读出的数据,经由I/O接口输出至多路数据合成器,在控制器的作用下,将数据部分提取出来,送往ECC校验纠错电路,和校验码进行比较并校验纠错。然后将这些8 位的数据,合并成32 位的数据,送至数据FIFO中,再经接口电路送至CPU总线,经CPU总线送至CPU内部,由CPU进一步处理,送给其他程序使用。
5.2.2 闪存内部电路结构
闪存芯片完成数据存储的作用,闪存电路的内部结构方框图如图5-9所示。
图5-9 闪存电路内部结构方框图
由CPU内置的闪存控制器输出的控制信号线和I/O数据复用信号线,对应接到闪存NAND存储器的各个引脚,控制信号线接到NAND存储器内部的控制逻辑电路,并分别将命令送到命令寄存器,地址送到行地址寄存器和列地址寄存器,数据送到I/O缓存和锁存器。命令寄存器和控制逻辑一起确定对闪存执行什么操作。行地址寄存器经过行地址译码后,确定闪存阵列中的某一页,而列地址寄存器经过译码后,确定某一页中的某个字节。当执行读命令时,将由行列地址确定的某一页中的所有数据读出暂存到页数据缓存中,然后在控制逻辑电路的作用下将数据送到I/O缓存和锁存器,经数据驱动,送到I/O接口。当写数据时,数据经I/O接口,送到数据驱动,再到数据缓存,在控制逻辑电路的作用下,将数据提取出来送到I/O缓存和锁存器,之后根据行列地址所确定的某一页中的内容读取出来放到页数据缓存中,新写入的数据也合并到页数据缓存中,这时编程/擦写控制器开始工作,将某页数据删除,然后,将页缓存中的数据写入到闪存阵列中。
5.2.3 闪存电路连接图及引脚符号定义
闪存电路连接图,如图5-10所示,
图5-10 闪存NAND电路连接图
引脚说明如下。
IO0~IO7:地址、命令、数据和复用引脚,用于输入地址、命令,输入和输出数据。
RE#:读使能信号,在读取数据之前,应先使该信号为低电平。同时表明即将出现在IO0~IO7引脚上的信号是读出的数据。
WE#:写使能,在向闪存写数据之前,应先使该信号为低电平。同时表明即将出现在IO0~IO7引脚上的信号是写入闪存的数据。
WP#:写保护,低电平时不能写入闪存数据。
CE#:片选信号,在进行任何操作之前,应先使该信号为低电平,表示将对该芯片进行操作,如果该引脚为高电平,则所有操作对该芯片无效,与该芯片无关。
CE1#~CE4#:表示可以连接1~4个芯片。
R/B#:就绪/忙信号,低电平表示芯片内部正在执行操作,高电平表示操作已经完成,准备就绪,可以接受其他操作和指令了。
R/B1#~R/B4#:与CE1~CE4对应。
CLE:命令锁存信号。输入命令之前,应先使能该信号,即使其为高电平信号,同时表明即将出现在D0~D7上的信号是操作命令。
ALE:地址锁存信号。输入地址之前,应先使该信号为高电平,即使能。同时表明即将出现在D0~D7上的信号是地址。
其他引脚的说明:
没有标出来引脚号的引脚为RES(保留)引脚,或NC(不用)引脚。共48 个引脚,RES和NC引脚可能接地或电源,也可能悬空。
而另外两个引脚,有的芯片中有,有的芯片中没有(或没有按装):
DQS:双向数据同步信号,用于在续写数据时与数据保持同步。
ZQ:校准信号。可以使信号输出、数据输出更加稳定,外接240Ω电阻。
5.2.4 闪存电路的工作原理
CPU内置闪存控制器,通过内置控制器的输入、输出引脚与闪存芯片相连。并通过闪存控制器控制这些引脚信号,完成对闪存芯片的地址、命令和数据的输入与输出。
闪存控制器要想完成上述功能,需要灵活协调、按序配合各个控制信号线。而完成各个引脚信号线的协调、控制和按序配合功能的就是驱动程序。例如,读数据或写数据的操作,就是由驱动程序控制多个不同的引脚信号来完成的。闪存控制器(即CPU内置的一部分,也受CPU的控制,可粗略认为是CPU)通过运行驱动程序,协调各个控制信号完成数据传输等功能。
闪存芯片的大致工作流程:先将地址送到D0~D7,再将读写等指令送到D0~D7,就可以从D0~D7读出或写入数据了,这就是D0~D7引脚的分时复用功能。
具体工作过程如下:
发送地址到闪存时,闪存控制器首先使CE引脚为低电平,选中该芯片,再使CLE为低电平表明(告诉闪存)这不是命令数据;而使ALE为高电平表明(告诉闪存)即将发往D0~D7数据线上的是地址,然后WE为低电平,便将地址发给闪存了。
按控制信号的顺序标号如下:
地址:① CE为低电平;
② CLE为低电平;
③ ALE为高电平;
④ WE为低电平;
⑤ D0~D7地址,送入闪存芯片内部。
至于为什么是以上这几个控制信号协调配合,而不是其他的控制信号组合,来完成发送地址的功能,则是在(闪存芯片的)硬件电路设计时,由硬件电路的需要而决定的。如果是其他信号的协调配合,就完成其他功能。
当输入命令时,同样先使CE为低电平,CLE为高电平,告诉闪存D0~D7为命令,然后ALE为低电平,说明这个数据不是地址,再使WE为低电平,命令通过D0~D7送入闪存。命令如下:
① CE为低电平;
② ALE为高电平;
③ CLE为低电平;
④ WE为低电平;
⑤ D0~D7将命令送给闪存。
同样的,数据输入和数据输出如下:
数据输入(即写数据到闪存):
① CE为低电平;
② ALE为低电平;
③ CLE为低电平;
④ WE为低电平;
⑤ D0~D7将数据写入闪存。
数据输出(即从闪存读出数据):
① CE为低电平;
② R/B为高电平;
③ RE为低电平;
④ D0~D7数据读取到CPU中。
上述工作过程中各信号高低电平的控制以及D0~D7的数据操作,都是由驱动程序完成的。由驱动程序协调、控制、使用各个控制信号及数据信号,形成多个上述操作指令,完成从闪存到CPU传输数据的功能。
5.2.5 闪存NAND电路检修
闪存电路芯片变化不大,基本上都是48解封装的集成电路,12脚和37脚是3.3V电源端,然后有一个片选信号:CE或CS,和8 个地址/数据共用引脚以及一些控制信号。但闪存电路与其他电路不同的是,闪存芯片内部装有操作系统和应用程序,如果闪存芯片或是外围元器件有问题,会造成不开机、死机、程序运行过程中死机、程序报错等一系列与系统程序、应用程序以及用户数据有关的故障现象。闪存电路方框图如图5-11所示。
图5-11 闪存电路方框图
对于闪存的检修,同样是从简单的方面入手,首先从外观上看闪存芯片及其周围元器件,有无明显变坏、烧毁、少件/缺件/掉件,有无温度过高,以及是否有接触不良、虚焊的元器件和引脚连线等;也可以按压一下闪存芯片,看故障是否变好;或在按压芯片时,看电流是否会发生变化。通过以上这些简单的方法,看能否找出故障原因,如果没有找出故障原因,则需要进行下一步电阻的测量。首先测量电源端的对地阻值,正常时约为几百欧姆;再测一下8 根数据地址共用线的对地阻值,其阻值大小基本一样;接着测量片选信号线和控制信号线的对地阻值,这些线的对地阻值相差也不会太大。如果测量电阻时,发现某根引脚或连线端对地阻值与正常值相比有较大差异,说明与该引脚相连的元器件或集成电路有问题,针对这部分进行仔细检查,或者用代替法替换有问题的无件,如果阻值没有发现异常,则可进一步测量各引脚上的电压值。首先测电源端电压,应为3.3V;再测量一下片选信号端电压,如果该芯片被选中,应为低电平电压,电压值接近0,如果此脚电压是高电平3.3V则说明此芯片未被选中,当然也就不会输出数据。闪存电路主要作用是传输数据,并且数据和控制号会时有时无,测量起来会发现这些电压值跟其他引脚的电压有些不一样。例如,数据是变化的,所以测量起电压值来也会有一些小的波动,如果数据传送的速率特别快,这些电压值就会变小,甚至接近0,有些控制信号的电压也是如此,电压值会有变化。即使是同样工作条件的同型号电脑的同样的芯片,其电压值也不会完全一样。知道了闪存电路上电压的特点以后,再记录一些平时正常工作时的电压值作为测量维修时的参考,就会知道电压值是否正常了,在测量时,如果能用示波器测量,结果会更直观和准确了。
对于闪存电路的测量,主要是电源电压引脚和片选引脚,然后是数据地址引脚和控制信号引脚,如果检测完以后,没有发现什么问题,那么故障的原因可能是程序损坏,可以刷机试试。对于一些难以解释的疑难故障,可能是闪存内的程序数据出现了错误,这时也可以刷机试试,或许能解决问题。当在排除了闪存外围元器件的问题时,也可以更换一片好的闪存芯片,但更换闪存芯片后需要重新刷机刷入程序才行。通过以上方法基本可以解决闪存方面的问题。