RV1108新增Spi Flash XT25F256B支持

Posted by huangbaoLiu on May 18, 2021

RV1108新增 spi flash XT25F256B支持

一、主要修改内容

  1. 增加flash特性相关参数项

    在sfc_nor.c中

    flash_info spi_flash_tbl[] =
    {
    	{0xc84016, 128, 8, 0x03, 0x02, 0x6B, 0x32, 0x20, 0xD8, 0x0D, 13, 9, 0}, /* GD25Q32B */
    	{0xc84017, 128, 8, 0x03, 0x02, 0x6B, 0x32, 0x20, 0xD8, 0x0D, 14, 9, 0}, /* GD25Q64B */
    	{0xc84018, 128, 8, 0x03, 0x02, 0x6B, 0x32, 0x20, 0xD8, 0x0C, 15, 9, 0}, /* GD25Q127C and GD25Q128C*/
    	{0xc84019, 128, 8, 0x13, 0x12, 0x6C, 0x3E, 0x21, 0xDC, 0x1C, 16, 6, 0}, /* GD25Q256B/C */
    	{0xc84020, 128, 8, 0x13, 0x12, 0x6C, 0x3E, 0x21, 0xDC, 0x1C, 17, 6, 0}, /* GD25Q512MC */
    	{0xef4017, 128, 8, 0x13, 0x02, 0x6B, 0x32, 0x20, 0xD8, 0x0C, 14, 9, 0}, /* 25Q64JVSSIQ */
    	{0xef4018, 128, 8, 0x03, 0x02, 0x6B, 0x32, 0x20, 0xD8, 0x0C, 15, 9, 0}, /* 25Q128FV and 25Q128JV*/
    	{0xef4019, 128, 8, 0x13, 0x02, 0x6C, 0x32, 0x20, 0xD8, 0x3C, 16, 9, 0}, /* 25Q256FV */
    	{0xef6017, 128, 8, 0x13, 0x02, 0x6B, 0x32, 0x20, 0xD8, 0x0C, 14, 9, 0}, /* 25Q64FWSSIG */
    	{0xc22018, 128, 8, 0x03, 0x02, 0x6B, 0x38, 0x20, 0xD8, 0x00, 15, 6, 0}, /* MX25L12835E/F */
    	{0xc22019, 128, 8, 0x03, 0x02, 0x6B, 0x38, 0x20, 0xD8, 0x30, 16, 6, 0}, /* MX25L25635E/F */
    	{0x207017, 128, 8, 0x03, 0x02, 0x6B, 0x32, 0x20, 0xD8, 0x0C, 14, 0, 0}, /* XM25QH64A */
    	{0x207018, 128, 8, 0x03, 0x02, 0x6B, 0x32, 0x20, 0xD8, 0x0C, 15, 0, 0}, /* XM25QH128A */
    	{0x1c7018, 128, 8, 0x03, 0x02, 0x6B, 0x32, 0x20, 0xD8, 0x0C, 15, 0, 0}, /* EN25QH128A */
    //added by lhb, 20210510
    	{0x0b4019, 128, 8, 0x13, 0x02, 0x6C, 0x32, 0x20, 0xD8, 0x3C, 16, 9, 0}, /* XT25F256B */
    };
    
  2. 增加flash Manufactory ID宏定义

    在sfc_nor.h中

    /*Manufactory ID*/
    #define MID_WINBOND             0xEF
    #define MID_GIGADEV             0xC8
    #define MID_MICRON              0x2C
    #define MID_MACRONIX            0xC2
    #define MID_SPANSION            0x01
    #define MID_EON                 0x1C
    #define MID_ST                  0x20
       
    //added by lhb, 20210510
    #define MID_XTX		            0x0B
    
  3. SNOR_EnableQE/SNOR_DisableQE参照MID_WINBOND增加MID_XTX判断

    在sfc_nor.c中

    static int32 SNOR_EnableQE(void)
    {
    	int32 ret = SFC_OK;
    	int reg_index;
    	int bit_offset;
    	uint8 status;
    	pSFNOR_DEV pDev = &SFNorDev;
       
    	if (pDev->Manufacturer == MID_GIGADEV
    	|| pDev->Manufacturer == MID_XTX
    	|| pDev->Manufacturer == MID_WINBOND) {
    		reg_index = pDev->QE_bits >> 3;
    		bit_offset = pDev->QE_bits & 0x7;
    		ret = SNOR_ReadStatus(reg_index, &status);
    		if (ret != SFC_OK)
    			return ret;
       	
    		if (status & ( 1 << bit_offset))   //is QE bit set
    			return SFC_OK;
       	
    		status |= ( 1 << bit_offset);
    		return pDev->WriteStatus(reg_index, status);
    	}
       	
    	return ret;
       
    }
       
    static int32 SNOR_DisableQE(void)
    {
    	int32 ret = SFC_OK;
    	int reg_index;
    	int bit_offset;
    	uint8 status;
    	pSFNOR_DEV pDev = &SFNorDev;
       
    	if (pDev->Manufacturer == MID_GIGADEV		
    	|| pDev->Manufacturer == MID_XTX
    	|| pDev->Manufacturer == MID_WINBOND) {
    		reg_index = pDev->QE_bits >> 3;
    		bit_offset = pDev->QE_bits & 0x7;
    		ret = SNOR_ReadStatus(reg_index, &status);
    		if (ret != SFC_OK)
    			return ret;
       	
    		if (!(status & ( 1 << bit_offset)))
    			return SFC_OK;
       	
    		status &= ~( 1 << bit_offset);
    		return pDev->WriteStatus(reg_index, status);
    	}
       	
    	return ret;
       
    }
    

二、修改的文件

kernel:

​ kernel/drivers/rkflash/sfc_nor.c

​ kernel/drivers/rkflash/sfc_nor.h

loader:

​ loader/src/common/sfc/sfc_nor.c

​ loader/src/common/sfc/sfc_nor.h

rkdsp.bin:

​ 该固件用来从flash分区加载nn.bin模型文件到内存。

​ 通过16进制查看工具,修改flash table中的原有flash参数项为XT25F256B的参数,替换原来支持的flash。

​ 然后用build目录下的build_dsp.sh生成dsp_fw.bin文件。