开发板只带有一片SST的FLASH,而u-boot中at91sam9260ek中没有运行程序在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_FLASH、CONFIG_FLASH_CFI_DRIVER、 CONFIG_SYS_FLASH_CFI: 定义此变量表明不使用nor flash。CONFIG_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标准的FLASH,drivers/mtd/jedec_flash.c被添加到编译文件中。
3) CONFIG_SYS_FLASH_BASE:FLASH的访问地址。
4) CONFIG_SYS_MAX_FLASH_SECT:FLASH的BLOCK数目。
5) CONFIG_SYS_MAX_FLASH_BANKS:FLASH的BANKS数,表示有多少个FLASH,一般设置为1。
6) CONFIG_FLASH_CFI_WIDTH:FLASH的端口宽度。
(2) 修改jedec_flash.c.
由于使用的FLASH是JEDEC标准的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) NumEraseRegions和ERASEINFO:设置FLASH的区域,如设置的FLASH块的大小为64K字节,共128个块。也可设置多个区域,NumEraseRegions设置区域的数目。