原创 PEEDI NAND闪存编程

2010-10-11 14:50 1167 5 5 分类: EDA/ IP/ 设计与制造

关键词:NAND flash,PEEDI支持所有NAND,设定PEEDI和flash,损坏区域的管理;



简介


NAND FLASH 闪存编程器比他的上一代产品 NOR FLASH 要便宜。NAND 开始抛弃嵌入式装置里面的NOR,现在它可以建立一个不包含 NOR FLASH 的设备,仅用一个 NAND flash 用来支持引导装入和其它的从RAM里面复制和执行的所有执行代码。PEEDI 可以编写带有8位和16位甚至高达8GB总线的所有型号的NAND。NAND 闪存编程器很简单,第一步就是设定PEEDI 和目标一起工作。这一步包含PEEDI配置文件的初始化设定部分和设置FLASH 部分。



硬件要求


通常 NAND 闪存编程器是 CPU的独立部分,但是给定的目标必须服从下面的硬件要求:


CPU 必须对NAND 闪存编程器进行随机存储:


1、 可以通过一条存储传输指令进行读/写数据从/到NAND 闪存编程器。


2、 可以通过一条存储传输指令写ADDRESSES和 COMMANDS (ALE and CLE)到NAND闪存编程器上。


3、 可以通过一条存储写指令确保ASSERT和 RELEASE对NAND 进行选择。


PEEDI不使用Read/Busy符号。


PEEDI 的描述


配置文件的INIT部分一定要包含对集成芯片选择的初始化设定和GPIOs,因为闪存器本身没有初始化的。


这里有一个INIT 部分对AT91M55800配置的例子:




[INIT_AT91M55800]
memory write 0xFFFF4020 0x004F0002 ; enable main clock (4MHz) 
wait 10 ; wait to stabilize 
memory write 0xFFFF4020 0x004F4002 ; switch to main clock 
memory write 0xFFFF4020 0x3F006102 ; enable PLL (MUL=33) 
wait 10 ; wait to lock 
memory write 0xFFFF4020 0x3F00A122 ; switch to PLL (DIV=4,MUL=33;MCK=33MHz) 
memory write 0xFFE00020 0x00000001 ; Cancel reset remapping 
memory write 0xFFE00000 0x004020A5 ; csr0 - Flash at 0x400000, 2 Ws 
memory write 0xFFE00004 0x00C03029 ; csr1 - SRAM at 0xC00000, 2 Ws 
memory write 0xFFFFF124 0xFFFFFFFF ; disable all interrupts

; setup for the NAND Flash: PB13 - Chip Select 
mem write 0xFFFF4010 0x6000 ; enable periph. clock for PIOA and PIOB 
mem write 0xFFFF0000 0x2000 ; PIOB_PER - enable PIO13 
mem write 0xFFFF0010 0x2000 ; PIOB_OER - configure as output 
mem write 0xFFFF0054 0x2000 ; PIOB_MDDR - disable open drain 
mem write 0xFFFF0030 0x2000 ; set PB13 

; setup CS2 (chip select 2) 
mem write 0xFFE00008 0x3002126 ; CSR2 - 8-bis, 2 WS 


闪存部分给出关于DATA, ADDR 和 COMMANDS基地址的信息。


它同时也给出一种声明和释放NAND 闪存芯片的选择。



[NAND_FLASH]
CHIP = NAND_FLASH
DATA_BASE = 0x03000000 ; data
CMD_BASE = 0x03400000 ; commands (CLE)
ADDR_BASE = 0x03200000 ; addresses (ALE)
FILE = "test.bin", 0x0

; address and value for asserting the Nand Flash chip select
; [addr] = value
CS_ASSERT = 0xFFFF0034, 0x2000 ; PB13 <- 0 
; address and value for releasing the Nand Flash Chip select
; [addr] = value
CS_RELEASE = 0xFFFF0030, 0x2000 ; PB13 <- 1

; list of blocks to be marked as bad
;BAD_BLOCKS = 4, 27, 1002

; CAUTION!!!
; Enable erasing of bad blocks
; DO NOT Enable this if you don't know what you are doing
ERASE_BAD_BLOCKS = NO

; how to deal with the oob (spare) info
; ? RAW - program 528/2112 bytes from file
; ? JFFS2 - program 512/2048 bytes from file and add ECC bytes
; ? FF - program 512/2048 bytes from file, the spare info is 0xFF 
OOB_INFO = JFFS2 


从我们的例子中可以看到at91sam9261_pm9261.cfg 和 pxa270_custom.cfg的描述:


http://download.ronetix.info/peedi/cfg_examples


损坏区域的管理


NAND 闪存编程器会有一些区域变坏之后是不能使用的。


一个不能使用的区域可能包含一个或者多个坏的位,另外坏的区域可能经常还在用。


这个机器可能在被数据损坏之前就能识别出来,而不是FFh (x8)或 FFFFh (x16)进入第一个空白处的坏区域的第一或第二页。


PEEDI 自动检测坏区域然后把它们报出来:


一旦察觉出来,这个坏的区域将被禁止擦除或编程。


一经要求,PEEDI可以强制把现有的坏区域擦除掉。


它同样有可能像坏的区域一样处理其他区域。


要清除所有坏区域(包括坏区域),那么下面的参数将要修改:



peedi> flash info 

FLASH configuration for core #0: 
Nand Flash: ID = 0x75, 8-bit, 32 MB 
page size = 512 + 16 bytes 
pages per block = 32 
number of blocks = 2048 
number of bad blocks = 2 (use "flash query" to get the list) 
erase bad blocks = true 

peedi> flash query 
Total blocks = 2048 
Bad blocks = 2 
? ? Bad blocks list: 
1289 
1291 

peedi> 


After PEEDI restart, the command "flash erase" will erase all blocks. 
当PEEDI重新启动后,"flash erase"指令将会清除所有的区域。

注意:


如果擦出的时候出现错误,立刻去查处哪个是坏区域。


确保你已经保存了"flash query"这个指令的输出,你可以再一次标记这个区域为坏区域。


强行标记4,27和1002为坏区域:


BAD_BLOCKS = 4, 27, 1002


当PEEDI 重新启动后,"flash info"指令将会标记给定的区域为坏区域


一旦标记为坏区域,这个就不能再进行标记了。


编程


现在所有都已经形成了,你可以准备编写你的NAND板了。


PEEDI 支持JFFS2对NAND闪存的直接编程,这样的话,OOB_INFO参数要设置成 JFFS2。这样PEEDI将会从程序文件写数据,同时也会计算ECC写进OBB/spare bytes里面。512 字节的NAND闪存编程器每一页有6个ECC 字节。2048字节的编程器有24个ECC字节。PEEDI 只支持BIN image。当编写到坏的区域时候,自动会跳过去,不会去编写。它们不会改变区域的位置。


如果你用一个传统的文件系统,用PEEDI 你可以编一个启动器到 NAND芯片上。考虑到你用的NAND文件系统和给定的坏区域,当它重新运行和掌握剩下的NAND闪存编程的之后它将会控制这个系统。


更多资料,请联系我们:


广州虹科电子 http://www.hkaco.com 


吴工 020-38743030  wj@hkaco.com  QQ:534807413

文章评论0条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /2 下一条