2410 NAND BOOT调试总结:
硬件配置:S3C2410A;64MB SDRAM;64MB NAND Flash;UART串口
软件配置:在目标板上不使用操作系统。
开发环境:ADS1.2;烧写NAND FLASH的ARM程序(用AXD执行);PC上的串口发送程序(传送BIN文件到目标板)
工作目标:
做一个boot程序,烧写到NAND中,实现以下功能:
能够从串口下载应用程序到NAND FLASH。
能够从NAND FLASH启动应用程序。
背景:
以前在44B0上做过相同功能的boot程序,主要区别是使用NOR FLASH。
2410包含NAND Flash控制器,可以通过访问特殊功能寄存器(SFR)的方式访问 NAND;并提供ECC校验码生成。
2410提供NAND BOOT模式:
复位时,如果OM[0:1]管脚为'00',则进入该模式。
复位后,从NAND的第0块,通过NAND控制器,拷贝4KB到内部boot SRAM。
boot SRAM被映射到GCS0。
执行boot SRAM中的代码,该代码可以用来从NAND搬移程序到SDRAM并执行。
NAND器件的特性:
以页为单位进行读写(类似硬盘)。每页为512字节。
每页在512字节之外,可以保存该页的ECC校验码和坏块标志等。
存在坏块和位反转问题,至少比NOR严重。
READ速度比NOR略慢;ERASE和PROGRAM速度远快于NOR。
2410的NAND控制器提供了ECC生成功能,能实现检错,但是纠错要由软件来实现。
厂商保证第0块不是坏块。
基本方案:
采用两级boot模式。
一级boot放在NAND的第0块,不超过4KB;在boot SRAM执行;实现二级boot的搬移功能(从NAND到SDRAM)。
二级boot在SDRAM执行,提供三种工作模式(可使用跳线或串口来选择):
AXD调试模式。
下载模式:与PC程序通讯,从串口获取应用程序BIN文件;将应用程序写入NAND。
启动模式:搬移NAND中的应用程序到SDRAM,并执行。
要点总结:
UART中断:
2410的串口中断采用两级中断模式。即在UART ISR中,检查SUBPEND标志,以确定真正的中断源。
NAND的坏块和位反转策略。
在器件手册中提供了如何确认坏块,一般在ERASE和PROGRAM之后检测。
写入应用程序时,如果遇到坏块,标记并跳过该块。
读出时,如果遇到坏块,跳过该块。
如果ECC校验失败,告警但不处理(暂时没有ECC纠错算法)。
在调试中,没有遇到坏块和ECC校验失败的情况。
存储映射:
一级boot:RO为0x0,RW不设置(紧跟RO)。
二级boot:RO为0x30e00000,RW为0x31000000。
应用程序:RO为0x30000000,RW为0x31000000。
题外话:在编写嵌入式软件时,可以不使用操作系统,但应掌握和应用操作系统的思想。