分类: 嵌入式
2011-02-08 17:21:11
本节主要讲述支持NOR Flash,本人的开发板上的NOR Flash芯片型号是:SST39VF1601
上面所编译出来的U-BOOB.bin文件还无法通过U-BOOT的命令来烧写NOR
FLASH,在配置文件include/configs/fs2410.h里默认的信号是AM29LV400,而我的是SST39VF1601。所以要对其进行修改,修改如下(include/configs/smdk2440.h):
添加:
#define
CONFIG_SST_39VF1601
#define CFG_MAX_FLASH_BANKS 1
#define
PHYS_FLASH_SIZE
#define
CFG_MAX_FLASH_SECT
#define CFG_ENV_ADDR (CFG_FLASH_BASE +
0x40000)
另外,NOR
FLASH的操作函数在board/smdk2440/flash.c中实现。它支持AM29LV400和AM29LV800.为了快速了解
NORFLASH的操作并达到目的,本人直接修改这个文件。修改以上步骤以后,接下来我们修改board/smdk2440/flash.c:
将:
#define MAIN_SECT_SIZE 0x10000
修改为:
#define MAIN_SECT_SIZE 0x1000
(按sector操作)
将:
#define
MEM_FLASH_ADDR1
#define
MEM_FLASH_ADDR2
修改为:
#define
MEM_FLASH_ADDR1
#define
MEM_FLASH_ADDR2
在flash_init函数里仿照:
if defined(CONFIG_AMD_LV400)
添加对SST39VF1601厂商ID和DEVICE ID的设置:
添加:
#if defined
(CONFIG_SST_39VF1601)
由于SST39VF1601每个SECTOR的大小都是一样的。所以修改:
将:
for (j = 0; j < flash_info[i].sector_count; j++)
{
........
........
修改为:
for (j = 0; j < flash_info[i].sector_count; j++)
{
当我们键入flinfo命令的时候,将我们的nor
flash的信息答应,这里我们在flash_print_info添加相应的支持:
在:
case (AMD_MANUFACT & FLASH_VENDMASK):
后添加:
case (SST_MANUFACT & FLASH_VENDMASK):
在:
case (AMD_ID_LV800B & FLASH_TYPEMASK):
之后添加:
case (SST_ID_xF1601& FLASH_TYPEMASK):
接下来修改flash_erase函数,这里我们用SECTOR进行擦出操作。具体修改如下:
将:
if ((info->flash_id &
FLASH_VENDMASK) !=
修改为:if ((info->flash_id &
FLASH_VENDMASK) !=