zoukankan      html  css  js  c++  java
  • s3c2440裸机-nandflash编程(二. nand控制器和nand访问时序)

    一.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

  • 相关阅读:
    宠物收养场 Treap
    最佳课题选择
    [USACO08JAN]手机网络Cell Phone Network
    [USACO09MAR]地震损失2Earthquake Damage 2
    字符串距离 简单DP
    小行星群 网络流 二分图
    游览牧场 最小费用流
    BZOJ1391: [Ceoi2008]order
    BZOJ1570: [JSOI2008]Blue Mary的旅行
    BZOJ2243: [SDOI2011]染色
  • 原文地址:https://www.cnblogs.com/fuzidage/p/13020052.html
Copyright © 2011-2022 走看看