uboot移植--nor flash驱动移植

今天按照国嵌视频,进行uboot--nor flash驱动移植


难点:mini2440开发板子上的nor flash芯片是:SST39VF1601,我用的天嵌开发板子上nor flash芯片是:EN29LV160AB。不同的nor flash,芯片资料的介绍区别还是比较大,EN29LV160AB资料中,没有涉及到块擦除和块操作的本分,如果按照国嵌视频的移植,需要修改块操作和块擦除部分,所以移植难度还是挺大的,特别是对我这菜鸟级别的来说。


1、nor flash工作原理:其核心就是读、写、擦除操作,以及对应的命令操作时序,见数据手册。(但是EN29LV160AB没有块操作时序和命令,也没有提到有多少块)


2、SST39VF1601移植参考文件是SST39VF160,在uboot/board/dave/common/flash.c 文件,但是EN29LV160AB移植参考文件也是可以用这个文件吗??


3、国嵌中SST39VF1601,移植修改如下

(1)先读取nor flash ID,即要吻合software ID Entry命令操作序列。(在函数flash_init中,先修改函数flash_get_size())

(2)函数中不识别device ID为234BH的SST39VF1601的片子,所以在flash.c中添加相应的宏定义

(3)在函数flash_get_size()的device ID匹配中添加代码,使初始化时能够识别芯片

(4)建立flash的block分区的地址表,驱动按照每块64kb来建立分区的

(5)修改flash的擦除函数flash_erase(),实验时可以选择按块方式擦除

(6)修改法拉盛写函数write_word函数

(7)修改函数write_buff

(8)修改函数flash_print_info

(9)此时去编译uboot的时候会报一些错误,因为没有CFG_FLASH_ADDR0没有定义,参考include/configs/B2.h,在board/mini2440/flash.c添加宏定义的代码

(10)屏蔽原来flash有关的宏定义

(11)添加有关新的flash宏定义(CONFIG_ENV_ADDR定义了环境变量的起始地址为0x30000,环境变量的大小为64k)


解决:

由于我的nor flash芯片是EN29LV160AB,所以就不能按照国嵌视频上移植的方法进行移植。参考了网上的一个移植文件点击打开链接

文件大概如下:

EN29LV160AB 是TQ2440选的NOR FLASH芯片,定义的sector总数手册上的是35 。

通常,在嵌入式bootloader中,有两种方式来引导启动内核:从Nor Flash启动和从Nand Flash启动。u-boot中默认是从Nor Flash启动的。翻开此芯片的datasheet看到:

TQ2440原理图上的第47脚 BYTE#是接高电平的,so 此芯片工作于16位模式(半字模式)
A0-A19是地址线,在半字模式下,D0-D15做为数据输入输出口。因为数据位是16位,A0-A19可以选择2^20 = 1M *2BYTE = 2Mbyte。正好是AM29LV160DB的容量。S3C2440的ADDR1要接AM29LV160DB的A0。上图中AM29LV160DB的A20,A21是空脚,分别接的是LADDR21,LADDR22。这应该是为了以后方便扩展NOR FLASH的容量。LADDR21,LADDR22对AM29LV160DB是没用的。

<1>2048K * 8bit

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值