这篇文章不是介绍nandflash的物理结构和关于nandflash的一些基本知识的。你需要至少了解你手上的nandflash的物理结构和一些诸如读写命令操作的大概印象,你至少也需要看过s3c2440中关于nandflash控制寄存器的说明。由于本人也没有专门学过这方面的知识,下面的介绍也是经验之谈。这里我用的K9F2G08-SCB0这款nandflash来介绍时序图的阅读。不同的芯片操作时序可能不同,读的命令也会有一些差别。当然其实有时候像nandflash这种s3c2440内部集成了他的控制器的外设。具体到读写操作的细节时序(比如CLE/ALE的建立时间,写脉冲的宽度。数据的建立和保持时间等),不明白前期也没有多大的问题。因为s3c2440内部的nandflash控制器做了大部分的工作,你需要做的基本就是设置几个时间参数而已。然后nandflash会自动进行这些细节操作。当然如果处理器上没有集成nandflash的控制器那么久必须要自己来写时序操作了。所以了解最底层的时序操作总是好的但是上层一点的,比如读写操作的步骤时序(比如读操作,你要片选使能,然后发命令,然后发地址,需要的话还需发一个命令,然后需要等待操作完成,然后再读书数据)。是必须要明白的。这都不明白的话,怎么进行器件的操作呢也就是说s3c2440可以说在你设置很少的几个时间参数后,将每一个步骤中细微的操作都替你做好了。(比如写命令,你只要写个命令到相应寄存器中,cpu内部就会协各个引脚发出适应的信号来实现写命令的操作)。而我们所需要做的就是把这些写命令,写地址,等待操作完成。等步骤组合起来。从而完成一个读操作就像上面说的,虽然我们不会需要去编写每个步骤中的最细微的时序。但是了解下。会让你对每个操作步骤的底层细节更加明了先来看一个命令锁存的时序。也就是上面说的读nandflash操作中不是有一个写命令步骤吗。那么这个步骤具体是怎么实现的。首先我们肯定是要片选nandflash。只有选中芯片才能让他工作啊nandflash是通过ALE/CLE(高电平有效)来区分数据线上的数据时命令(CLE有效),地址(ALE有效)还是数据(CLE/ALE都无效)。那么这里既然是写命令那么就一定是CLE有效(高电平)ALE无效(低电平)。同样命令既然是写给nandflash的那么肯定有一个写周期。我们需要注意的是,写是在上升沿有效还是下降沿有效。时序图如下:1这里是命令锁存是时序,那么我们要注意的其实就只有CLE为高电平期间这段时序。(写命令啊,CLE有效时(高电平)指示现在的数据其实命令)ALE此时一定为低电平我们可以不关心他2所以,CLE为低电平的时期,其他大部分引脚上都是灰色的阴影,这代表我们不需要关心这段时期这些引脚的电平3那么这个数据是什么时候被nandflash读取到的呢,注意到nWE信号在上升沿有一个贯穿所有其他引脚时序的竖线(这好像是叫生命线?我也不清楚)这就是说明,写入的数据(命令也是数据啊,只是可以通过CLE有效来区分)是在WE的上升沿有效。也就是说,虽然WE是在低电平有效,但并不是说WE一变成低电平,命令就被锁存了(即真正获得命令)而是在WE的上升沿,命令才真正被锁存。知道了上面这三点,也就知道了一个大概,那么剩下的图中也只剩那些txx的标号。明显它指的是时间,但是具体指什么时间呢。指的就是箭头两边所指的两条竖线之间的时间。(在每个信号的跳变沿,都有小竖线)剩下的就是这些时间到底是代表什么了。这里没什么难的,刚接触的觉得看不懂。是因为之前从来没接触过。(就像单片机刚学的时候不也是各种不懂,原因就是我们从没接触过)。这些时间标号,在数据手册的前面都有说明比如tCLStCLH从数据手册中我们可以看到分表代表的CLE建立时间,和CLE信号保持时间。简单点你可以理解为,我让CLE引脚变成高电平,总得给人间一点时间去变成高电平吧。总不能瞬间就变成高电平不过从时序图中我们能看到更多的端倪,之前不是说过WE的上升沿上不是有一个最长贯穿其他信号线的竖线吗。我们说他指示了,数据(命令也是数据)是在上升沿被锁存的,在WE的上升沿,我写到数据线上的命令数据才真正被锁存(接收),但是我们注意到CLE信号在WE上升沿之前有就有效了。所以我们说,在命令数据真正被锁存之前,CLE有效的那段tCLS时间叫做CLE信号建立时间。WE上升沿后。命令已经被接受了,但这时候CLE其实可以变为无效了,因为已经获取到命令了但是他并没有立刻结束,而是Tclh时间之后才结束。那么我们称这段时间tCLH为CLE保持时间。那么再根据手册中的说明tCS表示片选信号建立时间,tCH表示片选信号保持时间tDS表示数据建立时间,tDH表示数据保持时间这里我们看到一个小规律,在数据手册中以S结尾的时间通常指的是建立时间,以H结尾的时间指的是保持时间这里命令锁存的时序就分析完了。我们再来看看地址锁存时序图,这个图有点复杂,因为nandflash的特性是地址周期通常需要好几个,就是一个地址是分几次发送的再给出数据手册中对应时间标号的说明同样我们按照上面分析的步骤1这里是地址锁存是时序,那么我们要注意的其实就只有ALE为高电平期间这段时序。(写命令啊,ALE有效时(高电平)指示现在的数据其实是地址)CLE此时一定为低电平,可以不用管2所以,ALE为低电平的时期,其他大部分引脚上都是灰色的阴影,这代表我们不需要关心这段时期这些引脚的电平3同样WE的上升沿有一个贯穿其他信号线的长竖线,这也是代表数据(这里其实是地址)在上升沿被锁存那么剩下的也好理解tCLS这个我们不需要关心,因为CLE压根就是无效的。tCS就像之前分析的,它是指CE片选信号在WE上升沿也就是锁存地址之前的有效时间,也就是CE建立时间tWC呢?不知道?不知道看手册啊,前面也说过这些时间标号在手册中都会给出。从上面手册的解释我们看到,它指的是一个写周期的时间tWP写脉冲宽度(也就是WE是低电平有限,twp指低电平持续时间,就是有效时间)tWH好理解了,就是高电平时间ALS这不就是地址信号ALE建立时间嘛ALHALE信号有效保持时间啊TDSTDH数据建立和保持时间就像上面对命令时序的分析,这里信号的建立和保持时间都是以数据被锁存分界点(WE上升沿)看到这里相信仔细看的人,应该大致该如何看一个时序图了,但是这里我们牵涉到的无非都是一些上面建立/保持时间。复杂点的呢。下面就来看一个复杂点的时序图,其实也不复杂,主要是说明如何在不看手册就能知道txx指的是什么时间这个时序其实并不复杂,只是他不是像上面分析的那样都是一些建立时间和保持时间。这里牵涉到跟多的时间标号不过就像前面说的.看手册!手册里对每个时间参数都有说明。不过初学者通常即使看手册,对这些时间参数也是不知道是什么意思。这里我们看手册前,先来自己分析下。方法会了,手册就成了验证你对不对的东西了,而不是你寻找答案的东西。TRC这个参数有点简单。看他的范围是一个RE周期的时间,那么就跟前面的tWC应该是一样的。那它应该代表的就是RE信号的一个周期时间(读信号的一个周期)TREA呢?看标号看不出所以然,那么我们就看他的起始和结束时间从时序图能看到,这个指的是从RE有效(变低)到数据出现之间的时间。那么tREA可想而知就应该是读信号有效到数据被读之间的时间后面的都是这个同样的分析方法比如最后的那个tRHZ是从RE无效(高电平)到数据线变成高阻态之间的时间(数据线画在中间表示的是高阻态)看下手册中的解释也基本就是这个意思到这里对于时序图怎么看,相信大家都应该能理解了。甚至可能连手册都不用看,就知道他是什么意思了。因为我们能从时间的起始地址来推测时间标号的意思上面这些分析,都是很底层的操作,如果我们使用s3c2440这种高级的处理器这些时序操作我们根本不需要去实现,顶多也就往几个寄存器中设置一下上面说的一些时间然后,CPU中的nandflash控制器会自动完成上面所的所有操作。但是还需要了解的原因是,如果你碰到一个没有nandflash控制器的处理器怎么办,那你只能亲自实现这些具体的写命令,写地址。等等单元操作。然后才能将这些单元操作组合成读数据,写数据等操作(上面说过比如读操作他并不是一个简单的命令而是一系列操作,你要片选使能,然后发命令(读命令),然后发地址(要读的数据的地址),需要的话还需发一个命令,然后需要等待操作完成,然后读书数据)说完了这些具体的单元操作,那么我们再来看看一个读操作具体需要哪些步骤。也就是我们需要真正必须掌握的时序操作对于我这款nandflash读操作时序如下我们要注意的主要是最下面一行即I/Ox信号线的状态,他指示了读操作需要哪些,单元步骤。1首先我们看到有一个0x00是什么?数据?地址?命令?看ALE/CLE线啊,这两根线不是决定了现在的数据的类型嘛顺着往上看,我们知道0x00是在CLE有效期间的数据那么它就是一个命令2然后是address(5Cycle)即五个地址序列(这款nandflash指定读数据的地址时要发送五个地址序列),往上看,是在ALE有效期间的数据,那么应该就是地址了(对于这五个地址,前面两个是列地址,后面三个是行地址。在nandflash的物理结构中行地址对应的某一页,列地址就对应这一页中的某一列)3接着又是0x30,此时CLE有效,那么就是命令了(也就是说这款nandflash的读操作需要两个命令)。但是之后数据并未立刻出来,我们看到在到DATAOutput即数据输出之前还有一段时间,为什么有这段时间?往上看R/nB这个数据线上说明了原因,这段时间内它是低电平即指示现在处于忙碌状态,还未准备好数据输出。为什么会这样?因为你写了一个命令,写了要读数据的地址,又写了一个命令。你总要给cpu一些时间去处理这些命令吧,R/nB为低电平这段时间就是在处理这些命令(实际上是根据命令将你定位的那一页数据读到内部寄存器中),等R/nB变成高电平了,就指示命令处理完毕,现在数据也就可以读出来了。综上我们从手册中我们就知道了读操作的具体步骤,1首先nandflash也是一个外设,要访问他就需要片选它,所以在执行时序图上的步骤之前需要片选nandflash.2看后面就是安装时序图来了,看时序图!第一步先是发送一个命令0x00.3看时序图!然后发送五个地址序列(先发送两个列地址,在发送三个行地址(即页地址))4看时序图!接着再是一个命令0x30.5看时序图!R/nB引脚为低表示现在正忙,正在处理这些命令,那就要等待R/nB引脚变为高电平6看时序图!这个时候就可以读数据了7一次读操作结束了nandflash暂时是不需要使用了,那么别忘了应该取消片选信号。至于这每一个步骤中具体的时序,cpu中的nandflash控制器会帮我们完成。我们要做就是设置几个时间参数这里我们反复强调了要看时序图。其实学嵌入式前期对数据手册一定要多看,看多了你就回知道,什么东西的你重点要看的,什么是和你的编程操作无关的你不需要关心。这样后面你才能,拿到一个外设就能写出他的操作。而不用跟着书背步骤。只要手册在就行了。上面的步骤,是一个具体的读操作的步骤,不过在使用一个器件之前我们需要初始化一下它。至于初始化也就是设置我们上面多次提到的我们说过s3c2440已经帮我做了很多底层的单元操作,我们只需设置几个时间参数片内的nandflash就会自动发出相应操作的时序操作那么到底设置那几个时间呢。s3c2440手册上给出了需要我们设置的几个参数。从中我们可以看出第一幅时序图是命令和地址锁存的时序,第二幅是数据读取和写入的时序。可以看出,他们要设置的时间都是一样的。前面分析了那么多,这里应该不难看出1TACLS很明表示的是CLE/ALE的建立时间(这里并不准确,其实是CLE/ALE有效到WE变成低电平之间的时间,但WE却是在上升沿才锁存命令/地址)2TWRPH0代表的是WE的脉冲宽度,即有效时间3TWRPH1代表的是CLE/ALE的保持时间那到底设置成什么数字呢。既然上图中读/写/命令/地址操作需要的时间参数都是一样的那么我们从