关键词: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条评论)
登录后参与讨论