u-boot移植(三)使支持norflash

将u-boot 2012.04.01移植到JZ2440开发板 

让u-boot支持自己的开发板比较简单,因为norflash的接口跟内存很相似,我们不需要自己实现NORFLASH的操作集,u-boot中含有norfalsh的操作集

我们要做的工作就是根据自己开发板上的norflash的特性,在u-boot的norflash的匹配表中加入自己的norflash的数据

u-boot中 board_init_r函数中的flash_init用来对norflash进行初始化,这个函数在u-boot中位置参见http://blog.csdn.net/r21nn/article/details/73718514
如下代码分别用新老两种方法检测norflash,如果用旧的方法检测失败,则使用新方法检测,如果就的方法检测成功,则不使用新方法
在移植时,我们使用旧方法检测到norflash,即新方法没有机会执行
if (!flash_detect_legacy(cfi_flash_bank_addr(i), i))
			flash_get_size(cfi_flash_bank_addr(i), i);
			
flash_detect_legacy中有如下代码
			if (board_flash_get_legacy(base, banknum, info)) {
		if (!info->vendor) {
			int modes[] = {
				CFI_CMDSET_AMD_STANDARD,
				CFI_CMDSET_INTEL_STANDARD
			};
			int i;

			for (i = 0; i < sizeof(modes) / sizeof(modes[0]); i++) {
				info->vendor = modes[i];
				info->start[0] =
					(ulong)map_physmem(base,
							   info->portwidth,
							   MAP_NOCACHE);
				if (info->portwidth == FLASH_CFI_8BIT
					&& info->interface == FLASH_CFI_X8X16) {
					info->addr_unlock1 = 0x2AAA;
					info->addr_unlock2 = 0x5555;
				} else {
					info->addr_unlock1 = 0x5555;
					info->addr_unlock2 = 0x2AAA;
				}
				flash_read_jedec_ids(info);              /*读取noflash的相关信息*/
				debug("JEDEC PROBE: ID %x %x %x\n",
						info->manufacturer_id,
						info->device_id,
						info->device_id2);
				if (jedec_flash_match(info, info->start[0]))   /*将读取到的信息和u-boot中norflash的信息表匹配,看读取到的norflash是否被支持*/
					break;
				else
					unmap_physmem((void *)info->start[0],
						      MAP_NOCACHE);
			}
		}
我们要做的工作就是,如果我们开发板的norflash信息在u-boot的jedec_table表里没有,那么我们应该添加一项,使得u-boot支持我们开发板上的u-boot
在jedec_table的末尾添加如下一项
		{
		.mfr_id		= (u16)MX_MANUFACT,               /*厂家ID*/
		.dev_id		= 0x2249,                         /*设备ID*/
		.name		= "MXIC MX29LV160DB(NOR FLASH)",    /*名字*/
		.uaddr		= {
			[1] = MTD_UADDR_0x0555_0x02AA /* x16 */   /*解锁地址,16位的使用[1],8位的使用[0]*/
		},
		.DevSize	= SIZE_2MiB,                      /*总大小*/
		.CmdSet		= P_ID_AMD_STD,                   /*操作集*/
		.NumEraseRegions= 4,                        /*块的种类*/
		.regions	= {                               /*如下4行为具体的4中块大小和个数*/
			ERASEINFO(16*1024, 1),
			ERASEINFO(8*1024, 2),
			ERASEINFO(32*1024, 1),
			ERASEINFO(64*1024, 31),
		}
关于怎样填充上述部分的内容,我们要参考具体norflash的数据手册,并参考jedec_table的其他条项进行填写

MX29LV160DT/B数据手册中有如下内容
Sector Structure
- 16K-Byte x 1, 8K-Byte x 2, 32K-Byte x 1, 64K-Byte x 31
Notes:
1. Device ID : MX29LV160DT: 22C4; MX29LV160DB: 2249.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值