原创 sep4020在ADS下实现u-boot启动跳过坏块

2010-1-18 10:33 2649 1 1 分类: MCU/ 嵌入式

先介绍一下NandFlash u-boot的启动说明:


当通过硬件跳线选择从NandFlash启动后,CPU首先读取第一页的代码,进行必要的硬件配置,然后将第二页的代码搬运到ESRAM中,由第二页的程序将UBOOT主程序搬运到目标地址:SDRAM的0x30700000地址,最后将PC切换到0x30700000,执行UBOOT程序,完成系统启动。
我要做的就是在第二页搬运代码中添加跳过坏块的程序,中间遇到很多问题,因为第二页的代码都是用ARM汇编来写,学了四年大学,可以说对汇编一点都不熟的,一些指令它认识我,我却不认识它,感到非常郁闷,没办法,只好重补汇编了,中间遇到很头疼的问题:立即数方式,每个立即数由一个8位的常数循环右移偶数位得到。一开始以为立即数可以随便写,可是这样总出错,问了一下师兄,才知道立即数应该这样写,感到很郁闷。比如:0xff,0x104,0xff0,0xff00这些都是立即数,而0x101,0x104,0xff1则都不是立即数。


还有一个比较头疼的地方是LDR是字数据读取指令,就是32位数,当我 执行


add  r4,  r7, #0x200


ldr    r4,    [r4,#0x5]


cmp     r4,    #0xff
的时候r4总是不能和0xff相等,后来用multi-ice把它读取出来看了一下,原来r4是0xffffffff,当然不可能和0xff相等的,后来查了一下书,ldrb才是字节数据读取指令,这才恍然大悟,在改过之后,如果中间不存在坏块的话,执行是没有问题的,但如果有坏块,出现了问题,它的r4还是0xff,当时很粗心大意,因为我没有真正把坏块标志写到nandflash中,只是把它读出来放到一个数组中,在数组中改它的坏块标志的,通过这次实验发现自己有很多地方需要注意,需要改进,比如:粗心大意,不会自己独立寻找问题所在等等都是很大的问题,通过这次,我一定要更加努力了,加油!

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
1
关闭 站长推荐上一条 /3 下一条