原创 u-boot: NAND flash读写操作

2009-7-23 14:08 4394 13 15 分类: MCU/ 嵌入式

NAND启动完成之后,下一步要进行的就是参数在NAND flash中的保存了,因为NAND启动的话NOR是无法读取的.


rar主要代码大家可以参考,如果您觉得有点用的话请在左边顶一下啊! ^_^


最近工作比较忙,所以这个事情一直拖到了现在,昨天才把程序弄通了,今天在这里总结一下,写点体会.


1. u-boot-1.3.4对NAND flash的支持有两套代码:


drivers/mtd/nand为新的代码,据说是从linux而来,智能型较强,为今后改进的方向.


drivers/mtd/nand_legacy为老的代码,目前保留它主要是为了兼容性. 在不久的将来,我想这个会去掉的.


使用老的代码需要首先定义宏:  CONFIG_NAND_LEGACY, 同时也需要对一些程序中的error信息做屏蔽处理. 不知何故,网上不少人给的用的都是老的.


反正是为了玩玩,所以我选择了使用新的代码,直接去掉宏CONFIG_NAND_LEGACY的定义.


2. 接下来就是NAND flash相关宏的定义了,这里主要是定义如下内容:


#define CFG_MAX_NAND_DEVICE 1
#define PHYS_NAND_SIZE  SIZE_64M


// NOR/NAND Flash选择
#define CFG_NO_FLASH     // 使用NAND FLASH


// 环境变量大小
#define CFG_ENV_SIZE  0x10000


// 环境变量地址
#define CFG_ENV_IS_IN_NAND 1   // NAND flash 保存环境变量
#define CFG_ENV_OFFSET  (PHYS_NAND_SIZE-CFG_ENV_SIZE) // 环境变量地址


3. include/linux/mtd/nand_ids.h中定义了相关NAND flash ID,这里我们添加FS2410使用的FLASH:


{"Samsung K9F1208U0A",   NAND_MFR_SAMSUNG, 0x76, 26, 0, 3, 0x4000, 0},  /** FS2410*/


4. 由于此时定义了 CFG_NO_FLASH ,所以需要关闭NOR flash相关的操作,


  /common/cmd_bootm.c中关于imls命令的程序段和
  /common/cmd_flash.c中的程序.
我们可以直接注释或是使用 #ifudef  CFG_NO_FLASH  来屏蔽.


还有就是我们之前实现的SST39VF1601的函数flash.c也需要屏蔽起来啊!


自此,NAND flash便可以正常的启动以及保存参数了.

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户1343658 2011-3-12 00:17

呵呵,正在做这方面的工作,谢谢LZ 顶起来

用户402930 2009-7-31 16:31

come on!
相关推荐阅读
用户1156376 2014-08-18 17:23
[博客大赛]MDK下代码的分段管理 续3
继续写点分段管理的问题。 设计思想主要是设计一个通用的BSP,固化后只需要修改APP代码就可以,这适用于远程升级的系统或是进行二次开发的系统。 考虑到编译器链接的时候会把没有使用的代码段(...
用户1156376 2014-02-27 18:14
Freescale MCU SPI
Freescale S12 SPI: 0. 以下所述为查询模式使用SPI 1. SPI控制器有两个中断, 数据发送(SPTEF)和数据接收(SPIF) 2. 数据发送(SPTEF)标志...
用户1156376 2014-02-26 09:17
Freescale MCU摘记
仅用于记录Freescale的点滴记录: 1. 把AD口用作IO口的方法: 除了正常的设置外,还需要把 ATDDIEN 寄存器写为0xFF, 这样使能了数字IO。否则默认为AD输入。 ...
用户1156376 2013-12-14 11:33
[STM32]MDK下代码的分段管理 续2
前文所述的代码分段,限定比较大,对于使用 #pragma arm section code=".ARM.__at_0x8100000" 固定地址的方式,每个文件都需要指定不同的地址以区别。...
用户1156376 2013-12-09 18:12
[STM32]MDK下代码的分段管理
编译大型的程序时,可能某一段代码固定之后不再改变(比如BSP),而应用部分经常修改。在这种情况下,如果使用在线升级或是Bootloader的方式升级程序时,你就觉得每次升级的代码有一部分是重复的(...
用户1156376 2012-10-14 09:10
【uCOS-III移植笔记】OS启动过程
(1) 关闭系统中断 (2) CPU_Init(); 初始化CPU服务(时间戳、中断时间测量、CPU信息初始化等) (3) OSInit(); 初始化系统(系统变量、系统任务...
EE直播间
更多
我要评论
2
13
关闭 站长推荐上一条 /3 下一条