u-boot移植随笔:终于解决Nor Flash的问题了

今天解决了困扰我好几个月的问题了。这个问题本来应该在过年前就解决的,但是那个时候死活就是没招。

其实问题很简单:将u-boot下载到内存中,再使用cp命令将u-boot从内存复制到Nor Flash零地址处,之后就可以从新的u-boot启动了。网上说得很轻松,然而实际解决起来却不然。因为,我的Nor Flash是64Mbit的,即8MB。解决封装问题很轻松——开发板上的地址线预留出来了,可以扩大容量。使用并口下载的问题也解决了——到H-JTAG官方论坛上下载对应的配置文件。

不过,需要修改的代码却很多。这次移植跟网上的文章不同。我们是使用board目录下dave下面的两个flash.c文件合并到一起,再将Nor Flash的对应配置添加上去的。这个是在boss指导下进行的(我们在玩不同的板子,他的是2410)。

出错的现象很诡异:从内存复制到内存中,字节顺序没有发生变化,但从内存中复制到Flash中,字节顺序就反过来了,比如正确的数据是12 00  00 ea,但是复制到Flash中,却变成了ea 00 00 12(u-boot映像文件开头的4个字节)。我百思不得其解。难道是大端小端的问题?但又觉得不可能。

 

这次修改的地方有两处:

1、再次认真学习datasheet,将操作命令序列对照一次,主要是地址及对应的数据,比如第一个Bus写周期的地址是555H,数据为AAH等等。结果还真找到错误来,原来将Block擦除和Sector擦除的地址反过来了。

2、将这个文件中所有CONFIG_B2改成自己的配置宏定义。

这样总算解决了。

 

以前还有一个疑问,宏CONFIG_SYS_FLASH_ADDR0的定义为0x5555,这个第一个写周期(1st Bus Write Cycle)的地址,但是手册里的却是555H,我想了很久也没想通。今天再研究了一下,原来,手册里对这个地址的解释是:

Address format A10-A0(Hex).

Addresses A11-A21 can be VIL or VIH, but no other value, for Command seqence for SST39VF640xB.

原来,地址格式是A10-A0而已,其它可以为高、低电平。这样,0x5555与555H在低11位来看是完全一样的。这样写可能是凑够一个字(32bit),利于代码而已。真正原理层次的东西,还没研究,也不想再研究了。这里的VIL和VIH分别为输入低电平和输入高电平,在我来看,就是0和1,即代码中的二进制。或者,在我们的角度来看没有数值上的区别吧,等作了试验才能知道结论。

另外,我也看了SST39VF6402的手册,里面的地址跟原来代码中的是一样的。可见,SST39VF6402与SST39VF6402B是不同的芯片——看Device ID也可以知道。

 

今天还有个好消息,开发板的64MB Nand Flash换成了128MB的了。这样,Nor Flash和Nand Flash都扩大容量了,我也白赚了一笔了。哈哈!

 

另外,过年前依据东山大哥在百问网公开的代码来做一下USB下载,结果不成功。由于版本差别太大了,许多函数、结构体都发生了很大的变化,改起来问题多多。不得不放弃,或者是暂时的,或者以后都不搞了。

                                                                                                                        2011-3-2 木草山人记

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值