最近的研究方向:Nginx
分类: 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厂家都确保)。
(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