NandFlash的时序分析

首先申明我用的NandFlash的型号是K9K8G08U0B,这里不做这款NandFlash芯片硬件结构的分析,只是分析NandFlash初始化的时候要配置NFCONF寄存器,这里涉及到这个寄存器中的三个参数,分别是TACLS,TWRPH0,TWRPH1,这三个参数关系到这款NandFlash的一个基本的时序问题。之前一直没有仔细研究过这么一段NandFlash的初始化函数,我先把这个子函数的代码贴出来:

static void NF_Init(void)
{
	GPACON = (GPACON & ~(0x3f<<17)) | (0x3f<<17);   //设置芯片引脚
	//TACLS=1、TWRPH0=2、TWRPH1=0,8位IO
	NFCONF = (TACLS<<12) | (TWRPH0<<8) | (TWRPH1<<4) | (0<<0);
	//非锁定,屏蔽nandflash中断,初始化ECC及锁定main区和spare区ECC,使能nandflash片选及控制器
	NFCONT =(0<<13) | (0<<12) | (0<<10) | (0<<9) | (0<<8) | (1<<6) | (1<<5) | (1<<4) | (1<<1) |(1<<0);
}

这段代码来自http://blog.csdn.net/zhaocj/article/details/5795254此链接,是赵春江老师的博客,个人觉得写得非常不错。

第一句代码,配置芯片的引脚,一开始我看赵老师的博客,给这句代码这么注释,我也一头雾水,今天通过一个高中的同桌给我分析的这时序问题,偶然发现第一句代码,注释成“设置芯片引脚”,现在能看懂了,哈哈,我这里顺便解释一下,看到s3c2440A的芯片手册的281页,发现是配置GPA17,GPA18,GPA19,GPA20,GPA21,GPA22分别为CLE引脚,ALE引脚,nFWE引脚,nFRE引脚,nRSTOUT引脚,nFCE引脚,这里我说的太啰嗦了,结合下面的图片,可以理解成,向寄存器GPACON的17位到22位这中间的6位分别都写1,不要让这几位配置成output(输出)引脚,你要使用NandFlash,引脚必须这么配置呀,对照着下面的图片,可以理解一下:

《嵌入式Linux应用开发》里没有写这么一句,其实也没有多大关系,因为复位以后,寄存器GPACON的默认值就是0xffffffff,所以不用写,不过基于程序的严谨性,我觉得还是写写为妙。至于这里CLE引脚,ALE引脚,nFWE引脚,nFRE引脚,nRSTOUT引脚,nFCE引脚是什么东西,就是NandFlash的原理图和s3c2440A芯片连接的状态图了,把NandFlash的原理图贴出来就明白了:

CLE表示命令锁存使能,高电平有效;CE表示芯片使能,上面加了一个横杆,表示低电平有效;RE同样加了横杆,表示读使能,低电平有效等等;这些为后面的时序分析做铺垫了。

讲了半天,只是说解释了第一句代码,想必你已经看得不耐烦了,不用急,下面分析第二句代码:

NFCONF为NandFlash的配置寄存器,里面配置TACLS,TWRPH0,TWRPH1这三个值。

看了赵春江老师博客里对三个值是这么解释的:“NFCONF主要用到了TACLS、TWRPH0、TWRPH1,这三个变量用于配置nandflash的时序。s3c2440的数据手册没有详细说明这三个变量的具体含义,但通过它所给出的时序图,我们可以看出,TACLS为CLE/ALE有效到nWE有效之间的持续时间,TWRPH0为nWE的有效持续时间,TWRPH1为nWE无效到CLE/ALE无效之间的持续时间,这些时间都是以HCLK为单位的(本文程序中的HCLK=100MHz)。通过查阅K9F2G08U0A的数据手册,我们可以找到并计算该nandflash与s3c2440相对应的时序:K9F2G08U0A中的tWP与TWRPH0相对应,tCLH与TWRPH1相对应,(tCLS-tWP)与TACLS相对应。K9F2G08U0A给出的都是最小时间,s3c2440只要满足它的最小时间即可,因此TACLS、TWRPH0、TWRPH1这三个变量取值大一些会更保险。在这里,这三个值分别取1,2和0。”引用的话我先用红色标记一下,其实对于一个软件工程出生的我来说,看懂这么一大段,还是有点吃力的,先把时序相关的原理图晒出来:

(注:上图来自s3c2440A的216页,把它称为图a)

(注:上图来自K9K8G08U0B数据手册的24页,把它称为图b)

首先解释一下HCLK是系统的运行的时候主频,因为我用的开发板是mini2440arm9的,主频最快达到400MHz,所以,我可以设置HCLK为100MHz,所以一个时钟周期是10ns,这里算出这里的时钟周期在后面是有用的。接下来看图a的第二条时序(CLE/ALE),这个时序表示的意思是命令或地址锁存使能,高电平有效,所以当CLE或者ALE发出一个高电平的时候,对应表示使能了命令锁存使能或者使能了地址锁存器;第三条时序(nWE)这个表示的意思是写使能,低电平有效;由上面的分析得首先CLE或者ALE电平被拉高(有效),接着nWE被拉低(有效),之间的时间差为TACLS,再看图b,图b中的那句英文Command
Latch cycle(命令持续周期),可以看出这是一个发送命令的时序图,发送命令分为两步,首先使能CLE(这时你可以看到ALE是低电平并没有被使能),NandFlash告诉s3c2440A说:我现在要发送命令给你了,第二步,发送什么命令,由WE来控制,低电平的时候表示准备发送命令的具体内容了。所以上面TACLS=tcls-twp,,,因为tcls和twp在芯片中都有一个固定的最小时间的可以参考下面的表格:

(注:上图为表1)

根据上面表格,可以看出tcls和twp持续时间的最小值都是12ns,所以TACLS的最小时间可以为0,就是你在使能CLE的同时就可以使能WE了,理论上是可以这样。

所以寄存器NFCONF的13和12位可以配置成0,也就是TACLS的值可以为0,不过寄存器的默认值是设置为01的,即TACLS的值为01更加保险吧,中间各一个时钟周期(10ns)更安全吧。

对应的TWRPH0,分析要结合图b中的CLE中的tCLH,tCLH时间表示的是CLE使能命令至少要持续tCLE纳秒的时间,才会使使能信号有效,所以这里设置TWRPH0的值为2,再加上上图中 的1就可以分析出现在Duration的时间为3倍的时钟周期,也就是30ns,对应图b,如果TWRPH1的值写0的话,则TWRPH1的Duration时间也就是tCLH的时间为10ns,大于5ns,满足了一个条件;还可以分许出tCLS为40ns,大于最小要求12ns了,满足了条件2;最后这里的twp为30ns,大于12ns,满足条件3,所以到这里时序就配置好了。

写到凌晨2点多终于可以结束了,还是感谢高中的同桌,学电子的,为我耐心解答,下面你再看看上面红色的那段话,是不是又有重新的体会呢?

时间: 2024-09-28 12:56:58

NandFlash的时序分析的相关文章

u-boot-2016.03 在mini2440上移植之nandflash 硬件ecc

MINI2440 开发板使用的是8bit,256M blocksize= 128k,pagesize =2k的nandflash. 宽带为8bit ,由S3C2440 datasheet 可知硬件生产的ecc为4byte. S3C2440 硬件ecc 操作流程: 1.先读出NFMECC0寄存器中由硬件生产的ecc data. 2.将读出的ecc数据,进行处理之后,分别写入NFMECCD0和NFMECCD1寄存器, 硬件自动检测,检测结果可从NFESTAT0 寄存器读取. 3. 读取NFESTAT

norflash和nandflash电路

一.nandflash电路 二.norflash电路

路由器 NorFlash与NandFlash区别

在淘宝上买修改openwrt的路由器,基本上都是改的16MB flash,那么为什么不改到1GB呢? 现在U盘的价格也很便宜啊. 于是我调查了一下,发现flash分为两种,NorFlash与NandFlash. 一般路由器需要一个bootloader来启动,一开始上电启动的时候,从0x00开启运行代码, 这个bootloader代码一般是可写的,不是固化在ROM里的,是烧写在flash里面的. 那么需要从flash里面运行代码这一点,就决定了路由器需要采用NorFlash,而不是NandFlas

Timequest Timing Analyzer进行时序分析(二)

四.用TimeQuest对DAC7512控制器进行时序分析 在对某个对象下时序约束的时候,首先要能正确识别它,TimeQuest会对设计中各组成部分根据属性进行归类,我们在下时序约束的时候,可以通过命令查找对应类别的某个对象. TimeQuest对设计中各组成部分的归类主要有cells,pins,nets和ports几种.寄存器,门电路等为cells:设计的输入输出端口为ports:寄存器,门电路等的输入输出引脚为pins:ports和pins之间的连线为nets.具体可以参照下图(此图出自Al

Timequest Timing Analyzer进行时序分析(三)

上面已经把DAC7512控制器中所有的时钟都创建好了.下面我们再额外讨论一下关于时钟属性方面的一些问题和在做时序分析时的处理方法.对于具有单一时钟的系统,设计和时序分析都相对简单.但是现在很多设计都有多个甚至几十个时钟乃至更多的时钟.比如说DAC7512控制器,在设计中用到的时钟实际上是有3个,CLK25M,CLK50M和DA_SCLK.在对多时钟设计进行时序分析的时候,我们首先要搞清楚各时钟之间的关系. 当设计中有多个时钟时,时钟之间可能存在三种关系,分别是同步,异步和互斥.如果两个或者多个时

uboot在nandflash和norflash是如何运行的

转自:http://www.aiuxian.com/article/p-2796357.html 电子产品如果没有了电,就跟废品没什么区别,是电赋予了他们生命,然而程序则是他们的灵魂. 小时候一直很好奇,一个个死板的电子产品为什么一上电以后就能够工作了呢?为什么一个小小芯片就能够运行我们编写的程序呢?一个开发板从刚上电到整个操作系统能够运行起来是怎么办到的呢?这些东西困扰了好久,参考了好多资料现在才慢慢弄明白其中一些原理. 我们现在接触的大多数电子产品都是使用数字电路设计出来的,数字电路的精髓就

s3c2440——Nandflash

简介: Nandflash与计算机的硬盘类似,用于保存系统运行所必须的操作系统.用户数据.运行过程等各类数据.并且在Nandflash中的数据在掉电后仍可永久保存. 一.目标芯片(K9F1208U0M) 1.此芯片为三星公司生产的容量为64MB.(下图为网上图片.非本人原创).由下图可以看出,1page = 528byte(其中Data feild = 512bytes.spare = 16bytes). 1 block = 32 pages = 32 * 528byte.其中可以存储数据的是

ALTERA系列FPGA时序分析(一)

一. 约束的基本介绍 1.约束的分类 <1>.时序约束:主要用于规范设计的时序行为,表达设计者期望满足的时序条指导综合和布局布线阶段的优化算法等. 区域与位置约束:主要用于指定芯片I/O引脚位置以及指导实现工具在芯特定的物理区域进行布局布线. 其他约束:泛指目标芯片型号.接口位置,电气特性等约束属性. 2.时序约束的主要作用 <1>.提高设计的工作频率 通过附加时序约束可以控制逻辑的综合.映射.布局和布线,以减小逻辑和布线延时,从而提高工作频率. <2>.获得正确的时序

Nandflash的访问

1.Nandflash的硬件连接: 2.命令字及其操作方法: a.传输命令 b.传输地址 c.读/写数据