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

来源:互联网 发布:qq视频录制软件 编辑:程序博客网 时间:2024/05/22 23:07

将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;elseunmap_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.

阅读全文
0 0
原创粉丝点击