2009.08到mini2440(三) NorFlash设置

二、目的

从上一节的成果我们观察到Flash的信息不正确,mini2440板子上为2M的Nor Flash(型号为SST39VF1601),还有就是提示*** Warning - bad CRC, using default environment的警告。

本节,笔者主要完成这2项的修改工作。

2009.08到mini2440(三) NorFlash设置


三、修改Flash配置

1、 修改命令行前的名字

这个一般是在.h文件里面定义,首先笔者查找了include/configs/mini2440.h。在115行找到如下语句

#define    CONFIG_SYS_PROMPT            "SMDK2410 # "    /* Monitor Command Prompt       */

我们将其修改为

#define    CONFIG_SYS_PROMPT            "mini2440/care # " /* Monitor Command Prompt       */

2、 修改flash部分代码

使用source insight 阅读源代码,我们可以找到Flash:512KB的打印信息所对应的函数位置。

lib_arm/board.c [214行] void display_flash_config (ulongsize)函数

找到调用该函数的地方,在本文件329行

#ifndef CONFIG_SYS_NO_FLASH        /* configure available FLASH banks */       display_flash_config (flash_init ());   #endif /* CONFIG_SYS_NO_FLASH *  

flash_init()函数定义在board/samsung/mini2440/flash.c

        flash_info[i].flash_id =   #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);   #else    #error "Unknown flash configured"    #endif  

CONFIG_AMD_LV400并不是mini2440的NorFlash id。

接下来,我们修改mini2440.h关于NorFlash 的一些定义
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

在176行后添加

#define CONFIG_SST_39VF1601        1            #define PHYS_FLASH_SIZE            0x200000 //2m NorFlash     #define CONFIG_SYS_MAX_FLASH_SECT  (512)        //扇区大小,一扇区4k        #define CONFIG_ENV_ADDR            (CONFIG_SYS_FLASH_BASE + 0x040000)  

修改board/samsung/mini2440/flash.c norflash的参数宏定义

#define MAIN_SECT_SIZE  0x1000  /* 4 KB */    #define MEM_FLASH_ADDR1     (*(volatile u16 *)(CONFIG_SYS_FLASH_BASE + (0x00005555 << 1)))    #define MEM_FLASH_ADDR2     (*(volatile u16 *)(CONFIG_SYS_FLASH_BASE + (0x00002AAA << 1)))  

修改flash_init()函数

#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_SST_39VF1601)   //添加CONFIG_SST_39VF1601 定义                        (SST_MANUFACT & FLASH_VENDMASK) |               (SST_ID_xF1601 & FLASH_TYPEMASK);   #else    #error "Unknown flash configured"    #endif  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyjpdg.html