在u-boot中增加nor flash的支持

来源:互联网 发布:物业软件哪个好 编辑:程序博客网 时间:2024/04/28 04:08

开发板只带有一片SSTFLASH,而u-bootat91sam9260ek中没有运行程序在norflash中的实例。花时间修改配置,将其运行在norflash中。

 

(1)      修改板子头文件mprts2.h:

/* NAND flash */

 

/* NOR flash - no real flash on this board */

//#define CONFIG_SYS_NO_FLASH

 

#define CONFIG_FLASH_CFI_LEGACY         1

#define CONFIG_SYS_FLASH_BASE             0x10000000

#define CONFIG_SYS_FLASH_CFI         1

#define CONFIG_FLASH_CFI_DRIVER          1

 

 

#define CONFIG_SYS_MAX_FLASH_SECT           128

#define CONFIG_SYS_MAX_FLASH_BANKS       1

#define CONFIG_FLASH_CFI_WIDTH           FLASH_CFI_16BIT

1)       CONFIG_SYS_NO_FLASHCONFIG_FLASH_CFI_DRIVERCONFIG_SYS_FLASH_CFI:定义此变量表明不使用nor flashCONFIG_SYS_FLASH_CFI表示添加CFI FLASH的驱动,在MAKE过程中,生成include/autoconf.mk的时候会添加一行:

CONFIG_SYS_FLASH_CFI=y

此时,drivers/mtd/cfi_flash.c驱动将添加到编译文件中。

2)       CONFIG_FLASH_CFI_LEGACY:定义是JEDEC标准的FLASHdrivers/mtd/jedec_flash.c被添加到编译文件中。

3)       CONFIG_SYS_FLASH_BASEFLASH的访问地址。

4)       CONFIG_SYS_MAX_FLASH_SECTFLASHBLOCK数目。

5)       CONFIG_SYS_MAX_FLASH_BANKSFLASHBANKS数,表示有多少个FLASH,一般设置为1

6)       CONFIG_FLASH_CFI_WIDTHFLASH的端口宽度。

 

(2)      修改jedec_flash.c.

由于使用的FLASHJEDEC标准的FLASH,它需要使用jedec_flash驱动。碰巧驱动文件中没有我使用的FLASH型号,修改它的内容如下:

static const struct amd_flash_info jedec_table[] = {

//内容略

 

      {

             .mfr_id          = (u16)SST_MANUFACT,

             .dev_id           = SST_FLASH_ID,

             .name             = "SST_FLASH",

             .uaddr            = {

                    [1] = MTD_UADDR_0x0555_0x02AA

             },

             .DevSize = SIZE_8MiB,

             .CmdSet         = P_ID_AMD_STD,

             .NumEraseRegions= 1,

             .regions   = {

                    ERASEINFO(0x10000,128),

             }

      },

 

};

有几个参数需要说明一下:

1) uaddr: 设置FLASH操作的前两个指令,可以查DATASHEET得出。如果是8位的端口设置“[0]”,16位的端口设置“[1]”的内容,如上面的那样;

2) NumEraseRegionsERASEINFO:设置FLASH的区域,如设置的FLASH块的大小为64K字节,共128个块。也可设置多个区域,NumEraseRegions设置区域的数目。

 

原创粉丝点击