1.分析
board_init_r()
init_sequence_r()
initr_flash()
flash_init()
flash_detect_legacy()
jedec_flash_match()
jedec_table[];
2、jedec_table[]就是设置NorFlash的数组,先查看电路图
3、看手册
这一款 NORFLASH,当为 16 位位宽时,先从“555”处写入“AA”,再从“2AA”处写
入“55”,接着在“555”处写入“90” ,最后从 0 地址“X00”处可以读到“01”。
周期“First”和“Second”是“解锁”,周期“Third”是发出命令
5 、修改代码
vi jedec_flash.c 在 #ifdef CONFIG_SYS_FLASH_LEGACY_512Kx16 . . . #endif //在这里加上我们S3c2440 NoR Flash 的配置 /* JZ2440v2使用的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_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), } },
7、修改最大扇区数
vi include/configs/smdk2440.h #define CONFIG_SYS_MAX_FLASH_SECT (128)
8、采用CFI不采用JEDC模式
修改函数返回值,使uboot采用CFI方式进行nor flash检测:
book@book-desktop:~/uboot/u-boot-2015.04-rc4$ vim board/samsung/smdk2410/smdk2410.c
如图所示,将返回值改为0即采用CFI方式,return 1就是legacy方式,具体可查看源代码,二种方式只能取其一哦。
图 6