新增norflash支持的修改方法


目标:阅读uboot中的flash驱动代码,根据IC25LP128的datesheet参数写驱动函数

static ST_WRITE_PROTECT _pstWriteProtectTable_IC25LP128[] 和 hal_SERFLASH_t_hal_SERFLASH_table[]。

1. 在drvDeviceInfo.c文件中作如下更改

  1. 参考IC25LP128的datesheet文件增加写保护函数

    写保护函数参考

    static ST_WRITE_PROTECT _pstWriteProtectTable_IC25LP128[] =
    {
        //   BPX,                    Lower Bound         Upper Bound
        {   BITS(5:2, 1),   0x00FEFFFF,     0x00FFFFFF  },
        {   BITS(5:2, 2),   0x00FDFFFF,     0x00FFFFFF  },
        {   BITS(5:2, 3),   0x00FBFFFF,     0x00FFFFFF  },
        {   BITS(5:2, 4),   0x00F7FFFF,     0x00FFFFFF  },
        {   BITS(5:2, 5),   0x00DFFFFF,     0x00FFFFFF  },
        {   BITS(5:2, 6),   0x00CFFFFF,     0x00FFFFFF  },
        {   BITS(5:2, 7),   0x009BFFFF,     0x00FFFFFF  },
        {   BITS(5:2, 8),   0x0037FFFF,     0x00FFFFFF  },
        {   BITS(5:2, 9),   0x00FFFFFF,     0x00FFFFFF  },
        {   BITS(5:2, 10),  0x00FFFFFF,     0x00FFFFFF  },
        {   BITS(5:2, 11),  0x00FFFFFF,     0x00FFFFFF  },
        {   BITS(5:2, 12),  0x00FFFFFF,     0x00FFFFFF  },
        {   BITS(5:2, 13),  0x00FFFFFF,     0x00FFFFFF  },
        {   BITS(5:2, 14),  0x00FFFFFF,     0x00FFFFFF  },
        {   BITS(5:2, 15),  0x00FFFFFF,     0x00FFFFFF  },
        {   BITS(5:2, 0),   0xFFFFFFFF,     0x00FFFFFF  },
    };
    
  2. 在hal_SERFLASH_t_hal_SERFLASH_table[]函数中增加flash的信息

    hal_SERFLASH_t _hal_SERFLASH_table[] =
    
    {
    
    ……………..
    
    …………….
    
    {
    
    FLASH_IC_IC25LP128, //u16FlashType
    
    MID_IC, //u8MID
    
    0x60, // u8DID0
    
    0x18, // u8DID1
    

    _pstWriteProtectTable_IC25LP128, //pWriteProtectTable
    
    NULL, // pSpecialBlocks
    
    0x1000000, // u32FlashSize
    
    256, //u32NumBLK
    
    SIZE_64KB, //u32BlockSize
    
    256, // u16PageSize
    
    50, // u16MaxChipWrDoneTimeout
    

    BITS(5:2, 0x0F), //u8WrsrBlkProtect
    
    ISP_DEV_NEXTFLASH, // u16DevSel
    
    ISP_SPI_ENDIAN_LITTLE, //u16SpiEndianSel
    
    E {E_SPI_86M ,_DUAL_AD_MODE}, // Support 2XREAD(SPI CMD is 0xBB)
    
    TRUE, TRUE},}
    

2. 在drvDeviceInfo.h中检查以下几个宏定义,看是否需要定义

  1. flash IC 的定义

    #define FLASH_IC_IC25LP128 0x0F00UL // 16M

  2. Flash Manufacture ID的定义(可以在datesheet找到)

    #define MID_IC 0x9DUL

  3. Flash Storage Size的定义(看是否需要从新定义)

    #define SIZE_16MB 0x1000000UL

  4. ISP_DEV_SEL

    #define ISP_DEV_NEXTFLASH BITS(2:0, 1)

  5. ISP_SPI_ENDIAN_SEL

    #define ISP_SPI_ENDIAN_LITTLE BITS(0:0, 0)