Chinaunix首页 | 论坛 | 博客
  • 博客访问: 401086
  • 博文数量: 96
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 415
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-22 09:08
个人简介

最近的研究方向:Nginx

文章分类
文章存档

2017年(2)

2016年(59)

2015年(35)

我的朋友

分类: LINUX

2015-06-11 17:25:36

原文地址:s3c2440 nand flash controller 作者:nashty

 

s3c2440内部集成有内部sram(steppingstone),当选择从nand flash启动的时候,nand flash的前4k代码将会自动copy到内部sram中后运行。
(一)nand flash控制器的特性:
1、支持读/写/编程 NAND FLASH内存
2、系统复位后nand flash的前4k代码自动copy到内部sram,copy完  成后从sram启动,此时内部sram被映射为nGCS0。(当OM[1:0]=    00时使能NAND FLASH 启动模式)
3、支持硬件ECC校验
4、系统启动后内部sram可以用做其他的用途。
(二)操作nand flash方法
1、设置nand flash配置寄存器NFCONF
2、向命令寄存器NFCMD写入操作命令
3、向地址寄存器NFADDR写入地址
4、读/写数据前要读取状态寄存器NFSTAT来判断nand flash是否处于   忙状态。
(三)ECC

S3C2440在读/写操作时,自动片成512字节的奇偶校验码。
nand flash的页为512B。在读写的时候每页会产生3个byte大小的ECC校验码。
24bit ECC校验码=18bit 线校验码+8bit列校验码

ECC产生模块执行以下步骤:

1:当MCU写数据到NAND时,ECC产生模块生成ECC码。

2:当MCU从NAND读数据时,ECC产生模块生成ECC码同时用户程序将它与先前写入时产生的ECC码作比较。

(四)地址空间分配和片选信号定义

S3C2440 支持两种启动模式:一种是从Nand Flash 启动(MINI2440 即是此种);一种
是从Nor Flash 启动。在此两种启动模式下,各个片选的存储空间分配是不同的,如下图:


上图中,
左边是 nGCS0 片选的Nor Flash 启动模式下的存储分配图;
右边是 Nand Flash 启动模式下的存储分配图;
说明:SFR Area 为特殊寄存器地址控制
下面是器件地址空间分配和其片选定义
在进行器件地址说明之前,有一点需要注意,nGCS0 片选的空间在不同的启动模式
下,映射的器件是不一样的。由上图可以知道:
􀂾 在 NAND Flash 启动模式下,内部的4K Bytes BootSram 被映射到nGCS0 片选的
空间;
􀂾 在 Nor Flash 启动模式下(非Nand Flash 启动模式),与nGCS0 相连的外部存储器

Nor Flash 就被映射到nGCS0 片选的空间
SDRAM 地址空间:0x30000000 ~ 0x34000000

(五)S3C2410A上NAND FLASH控制寄存器的使用

  • 自动导入模式步骤

(1).完成复位

(2).如果自动导入模式使能,NAND FLASH存储器的前面4KByte的内容被自动COPY至Steppingstone内部缓冲器中

(3).Steppingstone被映射到nGCS0

(4).CPU在Steppingstone的4KB内部缓冲器中开始执行引导代码

注意:

       在自动引导模式下,不进行ECC检测。因此,NAND FLASH的前4KB应确保不能有位错误(一般NAND FLASH厂家都确保)。

  • NAND FLASH模式配置

(1).通过NFCONF寄存器配置NAND FLASH

(2).写NAND FLASH命令到NFCMD寄存器

(3).写NAND FLASH地址到NFADDR寄存器

(4).在读/写数据时,通过NFSTAT寄存器来获得NAND FLASH的状态信息。应该在读操作前或写入之后检查R/nB信号(Ready/Busy信号)。

(六)NAND FLASH存储时序

(七)NAND FLASH特殊功能寄存器的详细说明

1、配置寄存器NFCONF(地址:0x4e000000)    0x0000 0100 


    位                功能                                         初始值

   [15:14]    保留    
   [13:12] TACLS:  CLE和ALE持续时间设置(0-7)          01 
            持续时间=HCLK*(TACLS+1 )

   [11]      保留

   [10:8]  TWPRH0:   TWPRH0持续时间设置(0-7)          000 
            持续时间=HCLK*(TWPRH0+1)
   [7]      保留
   [6:4]   TWRPH1 持续时间设置(0-7)                              000
           

持续时间=HCLK*(TWRPH1+1)
   [3]AdvFlash   高级nand flash
 存储设定(只读)          (HW set)NCON0

        Advance NAND flash memory for auto-booting
         0: Support 256 or 512 byte/page NAND flash memory
         1: Support 1024 or 2048 byte/page NAND flash memory
         This bit is determined by NCON0 pin status during reset
         and wake-up from sleep mode.

   [2]   PageSize  Nandflash 页设定(只读)                   (HW set)GPG13

        NAND flash memory page size for auto-booting AdvFlash
         PageSize
         When AdvFlash is 0,0: 256 Word/page, 1: 512 Bytes/page
         When AdvFlash is 1,0: 1024 Word/page, 1: 2048 Bytes/page
         This bit is determined by GPG13 pin status during reset
         and wake-up from sleep mode. After reset, the GPG13 can
         be used as general I/O port or External interrupt.

  [1]  AddrCycle (Read only)    地址周期设定            (HW set)GPG14

        NAND flash memory Address cycle for auto-booting
      AdvFlash AddrCycle
      When AdvFlash is 0,
               0: 3 address cycle 1: 4 address cycle
      When AdvFlash is 1,
              0: 4 address cycle 1: 5 address cycle
     This bit is determined by GPG14pin status during reset
       and wake-up from sleep mode. After reset, the GPG14can
     be used as general I/O port or External interrupt.

[0] BusWidth (R/W) 总线宽度设定                          H/W Set(GPG15)

       NAND Flash Memory I/O bus width for auto-booting and
   general access.
        0: 8-bit bus 1: 16-bit bus
        This bit is determined by GPG15 pin status during reset
   and wake-up from sleep mode.
        After reset, the GPG15 can be used as general I/O port or
    External interrupt.
        This bit can be changed by software.

2、控制寄存器NFCONT(地址:0x4e000004)                 0x0384

 [15:14]    保留

 [13] Lock-tight                                                                          0

     Lock-tight configuration
       0: Disable lock-tight 1: Enable lock-tight,

        Once this bit is set to 1, you cannot clear. Only reset or
    wake up from sleep mode can make this bit disable(can
    not cleared by software).

 [12] Soft Lock configuration                                                  1
             0: Disable lock 1: Enable lock

 [11] 保留

 [10]EnbIllegalAccINT                                             0

   Illegal access interrupt control
     0: Disable interrupt 1: Enable interrupt
    Illegal access interrupt is occurred when CPU tries to
     program or erase locking area (the area setting in
     NFSBLK(0x4E000038) to NFEBLK(0x4E00003C)-1).

 [9]EnbRnBINT                                                  0

    RnB status input signal transition interrupt control
               0: Disable RnB interrupt         1: Enable RnB interrupt
 

 [8] RnB_TransMode                                              0

      RnB transition detection configuration
           0: Detect rising edge             1: Detect falling edge

 [7] 保留 

 [6] SpareECCLock                                                   1

          Lock spare area ECC generation.
           0: Unlock spare ECC                  1: Lock spare ECC
          Spare area ECC status register is FSECC(0x4E000034)

[5]MainECCLock                                                        1

         Lock Main data area ECC generation
              0: Unlock main data area ECC generation
              1: Lock main data area ECC generation
          Main area ECC status register is NFMECC0/1(0x4E00002C/30)

[4]InitECC                                                                 0

       Initialize ECC decoder/encoder(Write-only)
          1: Initialize ECC decoder/encoder

[3:2]保留                                                                   00

[1]Reg_nCE                                                                   1

         NAND Flash Memory nFCE signal control
            0: Force nFCE to low (Enable chip select)
            1: Force nFCE to high (Disable chip select)
         Note: During boot time, it is controlled automatically.
              This value is only valid while MODE bit is 1

[0]MODE                                                                         1

          NAND flash controller operating mode
            0: NAND flash controller disable (Don’t work)
            1: NAND flash controller enable

3、命令寄存器NFCMMD(地址:0x4e000008)

   [15:8]    保留
   [7:0]    命令寄存器                        0x00


4、地址寄存器NFADDR(地址:0x4e00000C)


   [15:8]   保留
   [7:0]    地址寄存器                         0x00

 5、数据寄存器NFDATA(地址:0x4e000010)

   [15:8]   保留
   [7:0]    数据寄存器                         0x00


阅读(1480) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:S3C2410 Nand Flash Controller

给主人留下些什么吧!~~