- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
u_ boo移植(六)之支持 Nand Flash操作
通过上一节uboot中Nand Flash操作的 分源码分析我们可以知道 ,如果
想在uboot中驱动我们自己开发板上的Nand Flash设备,只需要完成以下
几件事情就可以了。
1.修改include/configs/fsc100.h,定义宏CONFIG_CMD_ N ND,取消
宏CONFIG_CMD_ONEN ND
2.修改include/configs/fsc100.h,定义
宏CONFIG_SYS_ M X_ N ND_ DEVICE,值为1
3.需要在drivers/mtd/nand目录下添加s5pc100_nand.c文件 ,完成
FSC100的N ND Flash设备初始化
(1)初始化Nand Flash硬件接线到SOC上的GPIO口
(2)初始化SOC的Nand Flash控制器
(3)实现s5pc100_hwcontrol函数中实现根据ctrl值是否含
有N ND_CLE、N ND_ LE来决定是向NFCMD寄存器写值还是向
NF DDR寄存器写值
(4)实现s5pc00_select_chip函数 ,完成对Nand Flash设备片选和取消片
选
(5)实现s5pc100_dev_ready函数 ,完成对Nand Flash设备进行是否忙
碌探测
关于如何对Nand Flash进行读、写、擦除、坏块管理等操作 ,uboot源码
中的MTD框架已经帮我们做好了。
好了 ,我们已经知道需要干什么了 ,接下来就开始干活吧!
一、修改include/configs/fsc100.h文件 ,添加和取消相应的宏
在fsc100.h文件里面 ,添加以下代码:
二、drivers/mtd/nand 目录下添加s5pc100_nand.c文件
大家可以将此 目录下的s3c2410_nand.c拷贝成s5pc100_nand.c ,然后进
行修改。下面给出给我修改的代码:
需要注意的是 ,不同的开发板配置不一样 ,流程都一样 ,说白了就是操作
的寄存器不一样,大家可以根据自己开发板实际情况自行修改。
怎么 ,让它编译呢?嗯 ,肯定是修改Makefile。打开Makefile文件 ,找到
s3c2410_nand ,我们在其后面添加。修改如下:
很明显 ,如果想将s5pc100_nand.c编译成s5pc100_nand.o则需要定义宏
CONFIG_ NAND_S5PC100。
在include/configs/fsc100.h文件 ,定义宏CONFIG_ NAND_S5PC100。
修改如下:
修改结束 ,接下来进行编译。编译的过程可能出错 ,为了能清楚的看到正
确信息 ,大家在编译的时候 ,可以这样做 。
嗯 ,其实就是将标准输出重定向到/dev/null文件中去了 ,/dev/null是一
个垃圾处理站 ,什么东西丢进去都直接销毁了。
这样终端上就只会输出错误信息了。
过了 ,几秒钟 ,顺理成章的出错了 ,出错信息如下:
错误原因很简单 ,CONFIG_SYS_ NAND_ BASE宏没有定义。这个宏的含义
是标识SOC中和Nand Flash相关联的寄存器起始地址的。我们就查阅一下
手册 ,看看S5PC100中和Nand Flash相关联的寄存器起始地址是多少。
修改include/configs/fsc100.h文件 ,添加宏
CONFIG_SYS_ NAND_ BASE ,值为0xe7200000。修改如下:
接着 ,编译 ,继续报错 ,错误如下:
奇怪 ,怎么编译的是env_onenand.c文件 ,我们使用的是nand呀 ,打开
common目录下的Makefile文件 ,寻找答案。
在Makefile文件中搜索env_onenand ,内容如下:
我们需要的是env_nand.o ,不需要env_onenand.o。嗯 ,做法很简单 ,
在include/configs/fsc100.h中 ,定义宏CONFIG_ ENV_IS_IN_ NAND,去
掉CONFIG_ ENV_IS_IN_ONENAND宏定义。修改如下:
接下来 ,我们先清除一下 ,然后在重新编译。
哈哈 ,一路绿灯 ,编译成功。
三、测试uboot是否支持nand 操作
测试内容如下:
1.Nand Flash擦除操作
2.N
文档评论(0)