k60 NANDFLASH控制器(NFC)

来源:互联网 发布:网站源码腾讯 编辑:程序博客网 时间:2024/04/27 14:45

NANDflash控制器提供标准NAND flash存储器设备的接口。由不同的控制逻辑单元和一个9KB 的SRAM buffer组成。提供一个8-和16位的nand flash设备的无缝接口,nand flash 的页大小可以是512字节、2KB、4KB和8KB。

Block — (specified by device) NAND device最小的擦除单元, 由许多页组成。

Page — (specified by device) unit of flash data containing main and spare areas
• Main area of a page — stores data
• Spare area of a page — stores ECC and other software information
Sector — 一个基本的传输单元
• 对于设备的页是 2KB甚至更小,与页一样大小;
• 对于设备的页大于2KB, 页被分解为许多虚拟页,这种情况下,sector size就是virtual page大小
• Virtual page — is the physical page size divided by the splitting factor,
NFC_CFG[PAGECNT]

ECC — error-correcting code
• BCH (Bose Chaudhuri Hocquenghem) — cyclic error-correcting code that corrects
multi-bit errors

32.1.2 功能

NAND flash控制器有以下功能:

8位或者16位NAND flash接口

9 KB RAM buffer
• Memory-mapped registers and SRAM buffer

支持flash device指令, such as page read, page program, reset, block
erase, read status, read ID, copy-back, multiplane read/program, interleaved read/
program, random input/output, read in EDO mode.
• Integrated DMA engine
• Two configurable DMA channels
• Use DMA channel 1 only to read/write a page for main and spare area of a
page
• Use DMA channel 1 to read/write the main area of a page, and DMA
channel 2 for the spare area
• ECC mode
• In ECC mode, NFC supports 4/6/8/12/16/24/32-bit error correction.
• ECC mode 可以被绕过.

32.2 外部信号描述

Table 32-1. NFC Signal Properties
Name                                                  Function                                             I/O                        Reset
NFC_ALE                                     Flash address 锁存使能                             O                               1
NFC_CE                                           Flash chip enable                                  O                               1
NFC_CLE                                        Flash command锁存使能                        O                               1
NFC_R/B                                          Flash ready/busy                                    I                           Pull up
NFC_RE                                             Flash read enable                                O                               1
NFC_WE                                           Flash write enable                                 O                               1
NFC_IO[15:0]                                     Flash data bus                                     I/O                              —

Need to configure both PE and PS bit to 1'b1 of pin control register PORTC_PCR18 to make NFC_R/B pull up, when  PTC18 is configured to MUX=6 (NFC_R/B).

32.3 Memory Map/Register Definition

32.3.1 Flash command 1 (NFC_CMD1)

定义可能会被传送到flash设备的第二第三指令字节。

31-24 BYTE2

23-16 BYTE3

32.3.2 Flash command 2 (NFC_CMD2)

31-24 BYTE1 定义可能会被传送到flash设备的第一指令字节。

23-8 CODE 用户定义的flash操作顺序

每一位代表一个行为。如果位被设置,相应的行为在写1来开始后就会被执行。

0111_1110_1110_0000 (0x7EE0) 读数据(BYTE1, 5x Address, BYTE2, R/ B , read data)
1111_1111_1101_1000 
(0xFFD8) 写页 (DMA,BYTE1, 5x Address, write data, BYTE2, R/ B , BYTE3, read

status)
0100_1110_1101_1000 (0x4ED8) 块删除(BYTE1, 3x Address, BYTE2, R/ B , BYTE3, read status)
0100_1000_0000_0100 (0x4804) 读 ID (BYTE1, 1x Address, read ID)
0100_0000_0100_0000 Reset (0x4040) (BYTE1, R/ B )
0111_1110_0000_0000 CMD+address (0x7E00) (BYTE1, 5xaddress)
1111_1111_1100_0000 Write page burst (0xFFC0) (DMA,BYTE1,5xAddress, write data, BYTE2,R/ B )

0 BUSY_START还有一个忙指示器和开始指令BUSY_START

值为0 在读的过程中,flash控制器空闲并且可以传送下一条指令。在写过程,无行为。

值为1 在读过程中,指令执行是忙状态。在写过程,开始指令执行。

32.3.3 Column address (NFC_CAR)

列地址的第二字节与第一字节column

15-8 BYTE2 

7-0   BYTE1

32.3.4 Row address (NFC_RAR)

29 CS1  1是使能。

28 CS0

25 RB1

Ready/busy  1使能

决定是否NFC_R/B正在等待R/B指令。如果NFC_CE与NFC_R/B线数相等,则CSn与RBn区域必须保持相等的值。如果只有NFC_R/B正在使用,则CSn决定真正的片选,并且该区域一直是0.

RB0

。。。。。。。。。。。。则CSn决定真正的片选,并且该区域一直是1.

行地址的第一、第二、第三字节。ROW

23-16 BYTE3

15-8   BYTE2

7-0     BYTE1

32.3.5 Flash command repeat (NFC_RPT)

15-0 COUNT

 16-bit repeat count
确定 NFC_CMD2[CODE] 被执行
多少次。 If 0 or 1, flash command 被执行了一次。

32.3.6 Row address increment (NFC_RAI)

行地址增量

23-16 INC3 行地址的第三字节增量

15-8   INC2 行地址的第二字节增量

7-0     INC1 行地址的第一字节增量

32.3.7 Flash status 1 (NFC_SR1)

read ID command返回的第一、第二、第三、第四字节。

31-24 read ID指令返回的第一字节

23-16 。。。。。。。。。二。。

15-8  。。。。。。。。。三。。

7-0   。。。。。。。。。四。。

32.3.8 Flash status 2 (NFC_SR2)

read ID command返回第五字节。由读状态指令返回的字节。

31-24 read ID返回的第五字节

23-8保留

7-0  由读状态指令返回的字节。

32.3.9 DMA channel 1 address (NFC_DMA1)

31-0 ADDRESS   DMA 通道1 地址. 8-byte aligned.

32.3.10 DMA configuration (NFC_DMACFG)

被DMA通道传输的字节数,8字节倍数。DMA通道的状态(被激活,当触发就会开始传输;不被激活)。

31-20 count1 DMA通道1

19-13 COUNT2 DMA通道2

12-9  OFFSET2 DMA通道2的256字节偏移。

8-2 保留

ACT1 DMA通道1状态  0是未被激活 ;1激活

ACT2 DMA通道2 状态 0是未被激活; 1 激活

32.3.11 Cach swap (NFC_SWAP)

当DMA传输数据从或去NFC cache (NFC SRAM buffer),或者当CPU读或者写数据来自或者去NFC cache通过内部总线,所有的到达nfc_swap[addr1]的通道都直接到达nfc_swap[addr2]。类似的,所有到达nfc_swap[addr2[的通道也直接到达nfc_swap[addr1].

这个功能可以允许坏块标记在页空余空间的第一个位置。因为flash控制器的交织数据和页大小大于2KB的flash设备上的ECC字节方式,坏块标记的位置被转移了,并且不在页的空余空间的第一位置出现。cache swap功能可以让坏块标记在希望出现的位置上。

27-17 ADDR1 低的交换地址

11-1  ADDR2 高的交换地址

32.3.12 Sector size (NFC_SECSZ)

12-0  如果只有页的部分被编程或者读,SIZE可以被设置为affected bytes, 不是页的大小.然后ECC和DMA(data bytes)在指定的字节数上操作,由SIZE表明。

对于16位数据宽度的flash设备,只有odd SIZE被支持。实时的大小是SIZE-1.

当用到ECC功能,确保SIZE等于默认的值(data+ECC字节)。

32.3.13 Flash configuration (NFC_CFG)

31 STOPWERR     错误停止位 0 写错误时不停止

30-22 ECCAD[11:3]  ECC状态在SRAM中的字节地址

21 ECCSRAM  0 不将ECC状态写入SRAM ;1 将ECC状态写入SRAM

20 DMAREQ  0 在ECC执行后不传输sector;1 在ECC执行后使用DMA传输sector

19-17 ECCMODE 

000 No correction, ECC bypass
001 4-error correction (8 ECC bytes)
010 6-error correction (12 ECC bytes)
011 8-error correction (15 ECC bytes)
100 12-error correction (23 ECC bytes)
101 16-error correction (30 ECC bytes)
110 24-error correction (45 ECC bytes)
111 32-error correction (60 ECC bytes)

16 FAST 快速1、慢速 0  flash timing

15-13 IDCNT 读id指令的读的字节数

12-8 timeout

7 位宽BITWIDTH 0是8位宽flash mode;1是16位flash mode

5 AIAD  1自动增加flash行地址 ;0不自动增加行地址

4 AIBN  1自动增加buffer number;0不自动增加。。

3-0 PAGECNT

虚拟页来编程或者读的数量。

32.3.15 Interrupt status (NFC_ISR)

写错误中断、结束中断、指令空闲中断、忙等。。。

31 WERR      写错误中断

30 DONE      完成中断

29 IDLE        指令空闲中断

28 保留

27 WERRNS   写错误状态

26 CMDBUSY  指令忙

25 RESBUSY   residue engine busy

24 ECCBUSY   ECC engine 忙

23 DMABUSY   DMA engine忙

22 WERREN     NFC_ISR[WERR]使能

21 DONEEN      Enable bit for NFC_ISR[DONE]

20 IDLEEN        Enable bit for NFC_ISR[IDLE]

19 WERRCLR  写1清除NFC_ISR[WERR].

18 DONECLR  写1清除NFC_ISR[DONE].

17 IDLECLR    写1清除NFC_ISR[IDLE].

5-4 RESBN     Residue buffer number

3-2 ECCBN     ECC buffer number

1-0  DMABN    DMA buffer number

32.4 功能描述

NFC在单个或者一堆外部NAND flash芯片上执行命令。操作包括读、编程、复位、擦除、状态读、读ID。

NFC块包含一个DMA engine和build-in ECC logic。对于每一个读和写,NFC执行ECC计算on-the-fly。两个DMA通道被配置成每一个读和写:一个为了main area,一个为了spare area。可以把第二个DMA通道失能,只用第一个DMA通道来传输main和spare数据。

有8种ECC设置:0,4,6,8,12,16,24,32位错误。使用0,8,12,15,23,30,45和60ECC字节。The ECC works on page sizes of 512+spares bytes, 1K+spares bytes, 2K+spares bytes. The ECC algorithm used is a BCH code.

error corrector可以将ECC状态写入spare area,因为读是流水线的。

ECC状态被写入sector的辅助区,并且传送到存储器,It's up to the CPU to inspect the ECC
result in memory, and act appropriately.

读是流水线型. 写是 flow-through;在写过程中没有提前操作被执行. 在写过程中发现了问题,指令序列就会被中断,CPU被告知。

32.4.1 NFC Buffer Memory Space

存储器大小是1152 X 64位,被分成4个缓冲区,在non-boot模式下,地址范围是

• Buffer 0: 0x0000 – 0x08FF
• Buffer 1: 0x1000 – 0x18FF
• Buffer 2: 0x2000 – 0x28FF
• Buffer 3: 0x3000 – 0x38FF

32.4.5  NAND Flash中的数据组织

在flash上的页可以被分解成很多虚拟的ECC/DMA页。控制参数是NFC_CFG[PAGECNT]。参数给出了虚拟ECC/DMA页的数量在一个flash 页中。

虚拟页被分解为用户(主要)区域和ECC(spare)区域。在用户区域的数据可以被应用设置或使用,在ECC区域的数据被ECC设置和使用。

32.4.6 Flash Command Code Description

在NFC_CMD2[CODE]16位指令代码,有一位被设置,行为就会执行,指令重复的次数根据NFC_RPT[COUNT]的值。如果值是1或者0,指令执行一次。

32.4.7 Interrupts

有两种标识指令执行结束的中断:

1、执行完中断NFC_ISR[DONE].标志着当一个新的指令被分配。结束中断在flash数据被改正和送入存储器之前被给出,因为ECC engine和DMA engine的操作是流水线的。

2、指令空闲中断NFC_ISR[IDLE].如果你想使用在接下来的过程中产生的数据就使用该中断。

当使用1完成中断,可以假定当done中断被接收写页面传输结束。当done被读页面接收,数据可能还在DMA或者ECC中。为了检查这个,CPU应该记住与指令联系的缓存的号码(NFC_CMD2[BUFNO]),并且等待直到DMA和ECC有一个空闲或者都在不同缓存号码上忙。(The ECC buffer

number and DMA buffer number fields do not match the BUFNO specified with
command.)可以检查任意done中断或者查询寄存器。


0 0