移植u-boot.2016.09 ——(三、支持NorFlsh)

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

猜你喜欢

转载自www.cnblogs.com/liuyuchun/p/9173444.html