s3c2440裸机-nandflash编程(二. nand控制器和nand访问时序)

发布者:MagicalSerenade最新更新时间:2023-08-02 来源: elecfans关键字:s3c2440  裸机 手机看文章 扫描二维码
随时随地手机看文章

一.Steppingstone

我们知道nand没有独立地址线,cpu无法直接访问nand上的指令,所以nand不能片上执行。那么为何程序还能支持nand启动的呢?


为了支持NAND启动,S3C2440A配备了一个称为“ Steppingstone”的内部SRAM缓冲区,容量为4K。 开机时,Nandflash中的前4K数据将被加载到Steppingstone中,而引导代码将被加载到SRAM中将被执行,如下图所示:

我们知道s3c2440支持2种boot方式,nand或者nor,那么需要配置OM引脚来设置引导方式,如下图:


内存控制器的地址映射表如下:

我们得知OM1接地,OM0接了一个开关SW2,那么我们的OM0的电平状态由SW2开关决定:


当SW2闭合,OM0=1, OM[1:0]=01, 0地址对应nor,那么从nor启动。

当SW2断开,OM0=0, OM[1:0]=00, 0地址对应bootSRAM(4K),那么0地址对应该SRAM, 那么从nand启动。

二.引脚配置

当上电启动时,NAND Flash 控制器将通过下面的引脚配置来获取连接的 NAND Flash 的信息。


NCON:NAND Flash 存储器选择(普通/先进)


0:普通 NAND Flash(256 字或 512 字节页大小,3 或 4 个地址周期)

1:先进 NAND Flash(1K 字或 2K 字节页大小,4 或 5 个地址周期)

GPG13:NAND Flash 存储器page size选择


0:页=256 字(NCON=0)或页=1K 字(NCON=1)

1:页=512 字节(NCON=0)或页=2K 字节(NCON=1)

GPG14:NAND Flash 存储器地址周期选择


0:3 个地址周期(NCON=0)或 4 个地址周期(NCON=1)

1:4 个地址周期(NCON=0)或 5 个地址周期(NCON=1)

GPG15:NAND Flash 存储器总线宽度选择


0:8 位宽度

1:16 位宽度

如下表所示更直观:

三.nand控制器时序配置(nand访问原理)

nandflash访问时需要遵循一定的时序才能完成命令、地址、数据的发送。nandflash有8bit位宽数据总线,那么没有地址线它是怎么和cpu通信的呢?


  1.nandflash是DATA0~DATA7上既传输数据,又传输地址,又传输命令;

①当ALE为高电平时传输的是地址;

②当CLE为高电平时传输的是命令;

③当ALE,CLE都为低电平表示传输的是数据


  2. 先发送片选CS和WE/RE信号

  3. 再发送CLE

  4. 再发送ALE

  5. 最后发送数据


下面分别介绍命令、地址、数据的发送过程。

1.命令/地址锁存时序

1)首先看时钟,nand控制器的时钟源采用的是HCLK, 也就是AHB高速总线模式,可以参考s3c2440裸机-时钟编程(一、2440时钟体系介绍)那么HCLK=100Mhz, T=1/HCLK=10ns。

2)从上图可知命令、地址锁存的时序是一样的,复用一个时序图,当到达①的位置时,CLE/ALE=0;

3)当到达位置②时,CLE/ALE=1,表示命令/地址信号拉高,命令/地址开始使能,然后往数据总线DATA上放入命令或地址;

4)经过TACLS时间,到达位置③时,拉低nWE引脚,这时数据总线DATA上的命令/地址开始被锁存,锁存需要一定的时间,所以经过TWRPH0时间后,数据总线DATA上的命令/地址锁存完成;

5)到达位置④,此时释放nWE信号,nWE=1,这时还需要经过TWRPH1时间后,释放CLE/ALE,此时一个完整的命令/地址锁存过程完成。

上面分析了命令/地址的锁存时序过程,下面详细解释下上面几个时间参数的含义:

TACLS:CLE/ALE使能信号发送多久后才可以发送nWE信号
TWRPH0:nWE信号发送多久后数据(commamd/addr)才会被锁存成功
TWRPH1:nWE信号释放多久后才能释放CLE/ALE

那么这些时间参数要怎么配置呢?

这个需要根据我们实际使用的具体nandflash型号和性能来配置我们的nand控制器。我们以K9F2G08U0C这款nandflash为例进行讲解,手册上命令和地址锁存周期如下:

和nand控制器的命令/地址锁存时序图对比发现:

TACLS = max(tCLS,tALS) - tWP;TWRPH0 = tWP;TWRPH0 = max(tCLH,tALH);

我们知道2440 nand控制器把命令、地址锁存时序复用成了一个时序图,其实命令和地址锁存时序参数基本一致,只不过发命令只需要一个周期就OK了,发地址需要5个时钟周期,为什么?

你想,命令多简单,无非就是读写擦,像我们这款nand数据位宽8bit,一个周期绰绰有余。但地址就不一样了,比如此款nandflash容量256M = 2^28,那么需要28根数据线来传输才能一个周期传输完,但这款nandflash的数据总线位宽只有8bit, 只有8根数据线,所以需要把地址拆分成多次发送,先发送col地址,再发送row地址,此款nandflash是用了5个周期发送地址。

2.数据锁存时序(写数据)

从前面的命令地址锁存时序图中我们得知,CLE信号拉高,ALE信号拉低时,表示发送的命令;当CLE信号拉低,ALE信号拉高时,表示发送的地址;那么当CLE、ALE都拉低时,表示发送的数据,如下图,nCE, CLE, ALE都拉低了,表示传输的是数据。

1)当到达①时,nWE还是高电平,写使能没有开启;

2)当到达②,③时,那么经过了tWP时间(TDS时间),数据开始被锁存;

3)到达④,经过tDH时间,数据锁存完成;

4)到达⑤,也就是数据开始锁存后再过了tWH时间后释放nWE信号;

5)重复②③④⑤过程。

根据上面这三个图(手册上的命令、地址、数据锁存时序图),下面详细解释各个时间参数的含义:

3.顺序访问周期(读数据)

1)①处,表示要过tRR后才能发送读使能信号nRE进行访问(上一次的访问结束后,需要等待ready状态稳定后才可以进行下一次访问);

2)当到达②,需要经过rREA时间后nRE信号才有效(待nRE稳定);

3)当到达③,DATA总线上的读取被读取;

4)当到达④,nRE释放tREH时间后才允许下一次读使能

我们看到连续顺序访问时,单次访问的时间为tRC,那么这些时间参数的值也可以从K9F2G08U0C datasheet中找到:为25ns


关键字:s3c2440  裸机 引用地址:s3c2440裸机-nandflash编程(二. nand控制器和nand访问时序)

上一篇:s3c2440裸机-nandflash编程(三. 初始化及识别)
下一篇:s3c2440裸机-nandflash编程(一. nandflash原理及结构简介)

推荐阅读最新更新时间:2024-11-04 18:57

S3C2440处理器UART专用寄存器
这里只介绍与UART有关最常用的几种寄存器,至于在编程时涉及到的其它功能的寄存器这里不做介绍。 1.ULCONn(n=0,1,2) //校验和模式寄存器 0=正常模式、1=红外模式 0XX=无校验、100=奇校验、101=偶校验 0=1位停止位、1=2位停止位 00=5位数据长度、01=6位数据长度、10=7位数据长度、11=8位数据长度 2.UCONn(n=0,1,2) //工作方式寄存器 0=PCLK、1=UCLK 0=脉冲出发、1=电平触发 0=脉冲出发、1=电平触发 0=禁止接收暂停、1=允许接收暂停 0=禁止接收错误中断、1=允许接收错误中断 0=禁止巡检模式、1=允许巡检模式
[单片机]
s3c2440裸机-I2c编程-4-i2c中断服务程序
1.顺寻访问(Page Read) 下图的表格,来说明NAND FLASH内部结构,前面2K(0~2047)表示页数据,后边64字节(2048~2111)表示oob。 CPU想读取,第2048个数据,它是哪以一个? 是Page1的第0个字节。CPU使用某个地址访问数据的时候,是在页数据空间来寻址的。 下图为读NAND FLASH的read时序操作: 1.首先需要锁存00命令,nCE、CLE、nWE有效,0x00命令被锁存; 2.此时CLE无效,ALE开始有效,地址被锁存(从NAND FLASH的地址周期中可以看出来,先发出2个周期的col列地址,再发出3个周期的Row行地址); 3.锁存0x30命令; 4.然后会有
[单片机]
s3c2440裸机-内存控制器(三-2、norflash编程之适配访问时序)
前面我们了解了 norFlash的特性和原理 ,那么cpu是如何和nor进行通信的呢?下面开始详细介绍。 1.内存控制器适配norflash 如图是S3C2440的内存控制器的可编程访问周期读写时序,里面的时间参数要根据外部norflash的性能进行配置,这里先列出时间参数的含义: Tacs: Address set-up time before nGCSn(表示地址信号A发出多久后才能发出nGCS片选) Tcos: Chip selection set-up time before nOE(表示片选信号nGCS发出多久后才能发出读使能信号) Tacc:access cycle(数据访问周期) Tacp:page模式下的访问周
[单片机]
<font color='red'>s3c2440</font><font color='red'>裸机</font>-内存<font color='red'>控制器</font>(三-2、norflash<font color='red'>编程</font>之适配<font color='red'>访问</font><font color='red'>时序</font>)
操作系统与裸机的区别,stm32能运行什么操作系统?
我们在学习STM32到一定阶段可能会了解操作系统,然后便有这种问题产生,下面我就来粗略说说“操作系统与裸机的区别,以及STM32能运行什么操作系统,能运行linux系统吗”等问题。 操作系统与裸机的区别 裸机运行的程序代码,一般由一个main函数中的while死循环和各种中断服务程序组成,平时CPU执行while循环中的代码,出现其他事件时,跳转到中断服务程序进行处理,没有多任务、线程的概念。 而引入操作系统后,程序执行时可以把一个应用程序分割为多个任务,每个任务完成一部分工作,并且每个任务都可以写成死循环。操作系统根据任务的优先级,通过调度器是CPU分时执行各个任务,保证每个任务都能够得到运行。若调度方法优良,则可使
[单片机]
s3c2440裸机-LCD编程(三、框架准备和LCD初始化)
1.准备框架 为了让程序更加好扩展,体现出”高内聚、低耦合 的特点,能够兼容各种不同型号的lcd,假如有两款尺寸大小的lcd,如何快速的在两个lcd上切换? 首先我们抽象出lcd_3.5.c和lcd_4.3.c的共同点,比如都有初始化函数init(),我们可以新建一个lcd.c,然后定义一个结构体: struct lcd_opr{ void (*init)(void); }; 用户不接触lcd_3.5.c和lcd_4.3.c,只需要在lcd.c里通过指针访问对应的结构体的函数,也就调用了不同init(),如下图所示: 我们的目的是在LCD显示屏上画线、画圆(geomentry.c)和写字(font.c)其核心是画点
[单片机]
<font color='red'>s3c2440</font><font color='red'>裸机</font>-LCD<font color='red'>编程</font>(三、框架准备和LCD初始化)
mini2440裸机编程------IIS
这段时间做了IIS的试验。被这个试验也折腾了很久。总的来讲IIS还是一个相对简单的通信协议。 s3c2440一共有5个引脚用于IIS:IISDO、IISDI、IISSCLK、IISLRCK和CDCLK。前两个引脚用于数字音频信号的输出和输入,另外三个引脚都与音频信号的频率有关。 要用好IIS,就要把信号频率设置正确。下面介绍这几个时钟: fs:采样频率。fs不是任意设置的,一般基于不同的应用场合和听觉效果,设置不同的几个固定的值,如8kHz、16kHz、22.05kHz、44.1kHz、48kHz、96kHz等。通常,在wav文件的头部中, 会给出该文件的fs。 IISSCLK:串行时钟,每一个时钟信号传送一位音频
[单片机]
S3c2440ARM异常与中断体系详解5---_swi异常模示程序示例
这节我们再来演示swi的处理流程 swi软件中断: software interrupt 在前面的视频中我们讲过ARMCPU有7中模式(下图为7种模式),除了用户模式以外,其他6种都是特权模式,这些特权模式可以直接修改CPSR进入其他模式 usr用户模式不能修改CPSR进入其他模式 Linux应用程序一般运行于用户模式 APP运行于usermode,(受限模式,不可访问硬件) APP想访问硬件,必须切换模式,怎么切换? 通过发生异常中断进入特权模式 发生异常3种模式 1、中断是一种异常 2、und也是 3、 swi + 某个值(使用软中断切换模式) 由上图可知道,当进入reset时,进入的svc模式
[单片机]
S3c2440ARM异常与中断体系详解5---_swi异常模示程序示例
S3C2440 DMA驱动程序编写及测试(三十二)
DMA(Direct Memory Access) 即直接存储访问,DMA传输方式无需CPU直接控制传输,通过硬件为RAM、I/O设备开辟一条直接传输数据的通路,能使CPU的效率大为提高。 学了这么多驱动,不难退出DMA的编写套路: 1)注册DMA中断,分配缓冲区 2)注册字符设备,并提供文件操作集合fops - 2.1)file_operations里设置DMA硬件相关操作,来启动DMA 由于我们是用字符设备的测试方式测试的,而本例子只是用两个地址之间的拷贝来演示DMA的作用,所以采用字符设备方式编写 1、驱动编写之前,先来讲如何分配释放缓冲区、DMA相关寄存器、使用DMA中断 1.1 在linux中,分配释
[单片机]
<font color='red'>S3C2440</font> DMA驱动程序编写及测试(三十二)
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved