uboot-2010.06移植到mini2440经验(3)添加nor flash支持

Mini2440开发板上配置的是Spansion公司的S29AL016J芯片

S29AL016J芯片与smdk2410默认使用的芯片(AMD的AM29LV160D)除了大小不一样外,其他如命令序列,操作方式都是一样的(也难怪在做完国嵌实验手册的2.4以后就可以进行环境变量的保存)。所以根据AM29LV160D来移植的话所做的修改不多。

该Norflash芯片,分成35个扇区,(Bottom Boot Device)前4个扇区的大小分别为16KB,8KB,8KB,32KB,后31个扇区的大小都是64K,加起来总共2MByte。芯片id为0x2249,厂商id为0x01。

引用自http://blog.csdn.net/fengyaqi123/article/details/7854484

1、修改include/configs/mini2440.h

/*注释掉以下两个*/
#if 0
#define CONFIG_AMD_LV400    1   /* uncomment this if you have a LV400 flash */
#define CONFIG_AMD_LV800    1   /* uncomment this if you have a LV800 flash */
#endif
/***此为自己添加*************************************************/
#define CONFIG_AMD_LV160    1
/***此为自己添加*************************************************/
#define CONFIG_SYS_MAX_FLASH_BANKS  1   /* max number of memory banks */
#ifdef CONFIG_AMD_LV800
#define PHYS_FLASH_SIZE     0x00100000 /* 1MB */
#define CONFIG_SYS_MAX_FLASH_SECT   (19)    /* max number of sectors on one chip */
#define CONFIG_ENV_ADDR     (CONFIG_SYS_FLASH_BASE + 0x0F0000) /* addr of environment */
#endif
#ifdef CONFIG_AMD_LV400
#define PHYS_FLASH_SIZE     0x00080000 /* 512KB */
#define CONFIG_SYS_MAX_FLASH_SECT   (11)    /* max number of sectors on one chip */
#define CONFIG_ENV_ADDR     (CONFIG_SYS_FLASH_BASE + 0x070000) /* addr of environment */
#endif
/***此为自己添加*************************************************/
#ifdef CONFIG_AMD_LV160
#define PHYS_FLASH_SIZE     0x00200000 /* 512KB */
#define CONFIG_SYS_MAX_FLASH_SECT   (35)    /* max number of sectors on one chip */
#define CONFIG_ENV_ADDR     (CONFIG_SYS_FLASH_BASE + 0x070000) /* addr of environment */
/***此为自己添加*************************************************/
#endif

2、修改 board/mini2440/flash.c

flash_init (void) 函数中

#if defined(CONFIG_AMD_LV400)
                     (AMD_MANUFACT &FLASH_VENDMASK) |
                     (AMD_ID_LV400B &FLASH_TYPEMASK);
#elif defined(CONFIG_AMD_LV1800)
                     (AMD_MANUFACT &FLASH_VENDMASK) |
                     (AMD_ID_LV800B &FLASH_TYPEMASK);
/*此为自己添加*********************************************/
#elif defined(CONFIG_AMD_LV160)
                     (AMD_MANUFACT &FLASH_VENDMASK) |
                     (AMD_ID_LV160B &FLASH_TYPEMASK);
/*此为自己添加*********************************************/

flash_print_info (flash_info_t *info)函数中

case (AMD_ID_LV400B &FLASH_TYPEMASK):
              printf ("1xAmd29LV400BB (4Mbit)\n");
              break;
case (AMD_ID_LV800B & FLASH_TYPEMASK):
              printf ("1xAmd29LV800BB (8Mbit)\n");
              break;
之后加入
/*此为自己添加*********************************************/  
       case (AMD_ID_LV160B &FLASH_TYPEMASK):
              printf ("1x S29AL016J(16Mbit ,Bottom Boot Device) \n");
              break;
/*此为自己添加*********************************************/


3、通过jlink下载到开发板测试:

MINI2440 # flinfo

Bank # 1: SPANSION:1x S29AL016J(16Mbit)

Size: 2 MB in 35 Sectors

Sector Start Addresses:

00000000 00004000 00006000 00008000 00010000

00020000 00030000 00040000 00050000 00060000

00070000 00080000 00090000 000A0000 000B0000

000C0000 000D0000 000E0000 000F0000 00100000

00110000 00120000 00130000 00140000 00150000

00160000 00170000 00180000 00190000 001A0000

001B0000 001C0000 001D0000 001E0000 001F0000

MINI2440 #

观察到总共35个扇区,第一个扇区大小为0x4000=16KB,第二个,第三个扇区大小为0x2000=8KB,第四个扇区大小为0x80000=32KB,剩下31个扇区大小都为0x10000=64KB,与芯片实际情况相同。

你可能感兴趣的:(uboot)