移植新版本u-boot之四--- 支持nor flash

先给自己打个广告,本人的微信公众号正式上线了,搜索:张笑生的地盘,主要关注嵌入式软件开发,股票基金定投,足球等等,希望大家多多关注,有问题可以直接留言给我,一定尽心尽力回答大家的问题

a. 将前面文章中做好的uboot烧写到板子上之后,会提示nor flash的error,我们先解决这个问题。因为我们此时从nand启动,不涉及到nor flash,需要注释掉相关判断,避免从nand启动时,在nor初始化部分卡死,修改board.c函数 board_init_r,注释掉下面部分

else {
    puts("0 KB\n\r");
    //puts(failed);
    //hang();
}

b. 修改G:\100ask\systems\u-boot-2012.04.01\drivers\mtd\cfi_flash.c,支持调试打印,我们放开flash_get_size函数中的打印

#define   _DEBUG  1
#define   DEBUG  1

c. 修改arch\arm\lib\boards.c board_init_r函数中flash_inint初始化失败部分 drivers/mtd/jedec_flash.c, jedec_table数组中加上新的flash型号

/* jz2440 v2使用的是MT29LV160DB芯片 */
{
	.mfr_id		= (u16)MX_MANUFACT,    /* 厂家id */
	.dev_id		= 0x2249,              /* 设备id */
	.name		= "MXIC MT29LV160DB",  /* 名字 */
	.uaddr		= { /* nor flash 看到的解锁地址 */
		[1] = MTD_UADDR_0x0555_0x02AA /* x16 */
	},
	.DevSize	= SIZE_1MiB,          /* 总大小 */
	.CmdSet		= P_ID_AMD_STD,
	.NumEraseRegions= 4,           /* 擦除区域,比如10个128k,10个256块,那么擦除区域就是2*/
	.regions	= {
		ERASEINFO(16*1024, 1),
		ERASEINFO(8*1024, 2),
		ERASEINFO(32*1024, 1),
		ERASEINFO(64*1024, 31),
	}
},

d. 将上面的修改移植到虚拟机下面,并重新编译make,烧写到板子上,发现有打印:

ERROR: too many flash sectors

e. 修改smdk2440.h中的宏定义,解决上面的错误打印信息,如下,(此时,去掉flash中我们在步骤b中增加的打印调试宏定义)

#define CONFIG_SYS_MAX_FLASH_SECT	(128)

f. 修复了重定位时留下来的bug: sp要重新设置,修改start.S,

   .globl base_sp
base_sp:
	.long 0
 
 
    ldr	r0,=0x00000000
	bl	board_init_f

	/* unsigned int的值存在r0里,正好给board_init_r */
	ldr r1, _TEXT_BASE
	ldr sp, base_sp          /* 重新设置栈指针 */

	/* 调用第二阶段代码 */
	bl board_init_r

以及修改board.c,在board_init_f函数中

extern ulong base_sp;
base_sp = addr_sp;

g. 编译完成之后,重新烧写代码

       loady 32000000   //此时不能烧写到30000000
       protect off all
       erase 0 80000
       cp.b 32000000 0 80000
       reset

h. 验证代码是否正确

       protect off all
       erase 80000 8ffff
       cp.b 30000000 80000 8ffff
       cmp.b 30000000 80000 10000
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值