二、修改NorFlash驱动支持
现在检测到的Flash容量是512kB的,因为uboot默认的NorFlash配置是AM29LV400,nuaa2440上使用的NorFlash型号为S29AL016J(容量2M),我们需要修改成2M NorFlash的配置
注意:以下仅仅是修改了NorFlash的Size和Sectors Number的定义,驱动都是一样的。我们可以定义NorFlash型号为AM29LV160。
修改include/configs/nuaa2440.h
注释掉AM29LV400和AM29LV800的定义,加入AM29LV160的定义:
#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
#ifdef CONFIG_AMD_LV160
#define PHYS_FLASH_SIZE 0x00200000 /* 2MB */
#define CONFIG_SYS_MAX_FLASH_SECT (35) /* max number of sectors on one chip */
#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + CONFIG_ENV_OFFSET) /* addr of environment */
#endif
修改board/nuaa2440/flash.c
74行处加入:
#if defined(CONFIG_AMD_LV400)
(AMD_MANUFACT & FLASH_VENDMASK) | (AMD_ID_LV400B & FLASH_TYPEMASK);
#elif defined(CONFIG_AMD_LV800)
(AMD_MANUFACT & FLASH_VENDMASK) | (AMD_ID_LV800B & FLASH_TYPEMASK);
#elif defined(CONFIG_AMD_LV160)
(AMD_MANUFACT & FLASH_VENDMASK) | (AMD_ID_LV160B & FLASH_TYPEMASK);
#else
150行处加入:
case (AMD_ID_LV400B & FLASH_TYPEMASK):
printf ("1x Amd29LV400BB (4Mbit)\n");
break;
case (AMD_ID_LV800B & FLASH_TYPEMASK):
printf ("1x Amd29LV800BB (8Mbit)\n");
break;
case (AMD_ID_LV160B & FLASH_TYPEMASK):
printf ("1x Amd29LV160B (2M)\n");
break;
default:
printf ("Unknown Chip Type\n");
195加入:
#define CONFIG_ENV_OFFSET 0x10000
查看NorFlash信息,输入命令#flinfo,信息如下:
Bank # 1: AMD: 1x Amd29LV160B (2M)
Size: 2 MB in 35 Sectors
Sector Start Addresses:
00000000 (RO) 00004000 (RO) 00006000 (RO) 00008000 (RO) 00010000 (RO)
00020000 (RO)00030000 00040000 00050000 00060000
00070000 00080000 00090000 000A0000 000B0000
000C0000 000D0000 000E0000 000F0000 00100000 (RO)
00110000 (RO) 00120000 00130000 00140000 00150000
00160000 00170000 00180000 00190000 001A0000
001B0000 001C0000 001D0000 001E0000 001F0000
RO表示该扇区处于写保护状态,只读
在对该扇区擦除、写入之前,要先解除写保护,命令为:“#protect off all”
擦除命令:
#erase all 擦除整片Flash
#erase start end 擦除sectors 如:#erase 0x20000 0x2ffff
#erase start +len 擦除指定大小 如:#erase 0x40000 +0x12345
写入命令:
#cp.b 内存地址 Flash地址 文件大小
如:#cp.b 0x30000000 0 0x12345