U-Boot移植——Nor Flash
0 开发环境 1 Nor Flash型号? ? ? 根据《U-Boot移植——添加新开发板》的方法添加Mini2440的配置文件,并且通过《U-Boot移植——设置系统时钟》设置系统时钟后,可以将U-Boot编译并且下载到Mini2440开发板的Nor Flash上运行。然而,虽然这时候可以从Nor Flash启动U-Boot,但是还不能通过U-Boot对Nor Flash进行擦写操作,因为相关参数还没有设置好[1]p272。为了使得U-Boot可以操作Nor Flash,需要进一步修改其Nor Flash型号信息。 ? ? 根据参考资料[1]p272的提示,smdk2410使用的Nor Flash型号为AM29LV400。而参考资料[2]p26则说明,Mini2440使用的Nor Flash型号为SST39VF1601,大小为16Mbit(2MB)。 2 include/configs/mini2440.h ? ? smdk2410.h中默认提供了AM29LV400和AM29LV800两个型号的Nor Flash供选择: /*----------------------------------------------------------------------- * FLASH and environment organization */ #define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */ #if 0 #define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */ #endif #define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */ #ifdef CONFIG_AMD_LV800 #define PHYS_FLASH_SIZE 0x00100000 /* 1MB */ #define CFG_MAX_FLASH_SECT (19) /* max number of sectors on one chip */ #define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x0F0000) /* addr of environment */ #endif #ifdef CONFIG_AMD_LV400 #define PHYS_FLASH_SIZE 0x00080000 /* 512KB */ #define CFG_MAX_FLASH_SECT (11) /* max number of sectors on one chip */ #define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x070000) /* addr of environment */ #endif ? ?可以根据上述信息添加SST39VF1601型号Nor Flash的配置信息。先将上面CONFIG_AMD_LV400和CONFIG_AMD_LV800的宏定义都注释,然后在其下面添加: #define CONFIG_SST_xF1601 1 /* Added for SST39VF1601 Flash */? ? 仿照前面 AMD_LV800的配置信息添加: #ifdef CONFIG_SST_xF1601 #define PHYS_FLASH_SIZE 0x00200000 /* 2MB */ #define CFG_MAX_FLASH_SECT (19) /* max number of sectors on one chip */ #define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x0F0000) /* addr of environment */ #endif 3 board/mini2440/flash.c ? ? 经过上述修改,配置并且编译时提示错误: ? ? 定位到错误的行: ? ? 由上图可见,条件编译只是对CONFIG_AMD_LV400宏定义和CONFIG_AMD_LV800宏定义进行了判断,由于本文在第2章中将这两个宏都注释了,取而代之添加了CONFIG_SST_xF1601,因此可以添加一个条件判断分枝即可解决上述错误: ? ? 上图红色方框的内容为新添的AMD_MANUFACT、SST_MANUFACT、SST_ID_xF1601在已经在include/fash.h中预定义了。 4 flinfo命令测试 ? ? 经过上述修改之后U-Boot可以成功编译,将其下载到开发板中运行,可以正确显示Nor Flash的大小为2MB: ? ? 输入flinfo命令查看For Flash的信息,结果提示Unknown Vendor Unknown Chip Type: ? ? 在U-Boot源码中搜索关键字Unknow Vendor可以定位到board/mini2440/flash.c的flash_print_info()函数: ? ? 由上图可见,在输出Nor Flash信息时通过switch分枝判断生产商和芯片型号,由于只做了AMD Nor Flash的判断,而没有判断是否存在SST Nor Flash,因此导致flinfo命令无法找到生存厂商和芯片型号信息。 ? ? 根据上图已有的信息,添加SST Nor Flash的判断分枝即可解决上述问题: ? ? 上图红色框内的代码是新添的。重新编译U-Boot并下载到开发板上运行,然后执行flinfo命令结果如下: 参考资料 [1]韦东山. 嵌入式Linux应用开发完全手册,人民邮电出版社,2012 [2]MINI2440用户手册? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |