uboot移植(二)

来源:互联网 发布:大数据安全问题 编辑:程序博客网 时间:2024/06/06 08:58
 

二、修改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

原创粉丝点击