在u-boot-2016.05\drivers\mtd\jedec_flash.c中的如下结构体数组jedec_table:
static const struct amd_flash_info jedec_table[] = {
...
};
中最末尾添加一项:
{
.mfr_id = (u16)MX_MANUFACT,
.dev_id = 0x2249,
.name = "MXIC MT29LV160DB",
.uaddr = {
[1] = MTD_UADDR_0x0555_0x02AA /* x16 */
},
.DevSize = SIZE_2MiB,
.CmdSet = P_ID_AMD_STD,
.NumEraseRegions= 4,
.regions = {
ERASEINFO(16*1024, 1),
ERASEINFO(8*1024, 2),
ERASEINFO(32*1024, 1),
ERASEINFO(64*1024, 31),
}
},
修改完后编译烧写到NOR FLASH后可以看到NOR FLASH的大小识别出来了,但是提示错误:
ERROR: too many flash sectors
搜索too many flash sectors这句话,可以在u-boot-2016.05\drivers\mtd\jedec_flash.c和u-boot-2016.05\drivers\mtd\cfi_flash.c中找到:
...
if (sect_cnt >= CONFIG_SYS_MAX_FLASH_SECT) {
printf("ERROR: too many flash sectors\n");
break;
}
...
其中初始定义的最大FLASH扇区数CONFIG_SYS_MAX_FLASH_SECT是19,而我们用的NORFLASH的扇区数是35,超过了最大扇区数限制,所以会提示too many flash sectors的错误,在u-boot-2016.05\include\configs\smdk2440.h中修改宏定义CONFIG_SYS_MAX_FLASH_SECT为大于我们所用NOR FLASH的扇区数即可,在这里我们用128。
修改后烧写到NOR FLASH可以看到下面的输出:
U-Boot 2016.05 (Aug 20 2016 - 22:49:31 +0800)
initcall: 33f0aa6c
U-Boot code: 33F00000 -> 33F480A4 BSS: -> 33F92BE0
initcall: