加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

U-boot移植-norflash

发布时间:2020-12-15 20:07:52 所属栏目:百科 来源:网络整理
导读:一,norflash看代码,明白需要修改的地方。 二,相关知识点 三,我的移植步骤 一,看代码 EN29LV160AB是bottom boot norflash,从它的命名中"B"字母可以知道。Byte# pin在原理图上接高电平,所以是word模 式。共有35个sector。 把 flash_init,write_hword和f

一,norflash看代码,明白需要修改的地方。
二,相关知识点
三,我的移植步骤

一,看代码
EN29LV160AB是bottom boot norflash,从它的命名中"B"字母可以知道。Byte# pin在原理图上接高电平,所以是word模

式。共有35个sector。
把 flash_init,write_hword和flash_erase看了。发现flash_init函数中需要修改。
另外,需要修改一个配置定义.
二,相关知识点
理论基础:Bottom/Top Boot Sect(底部/顶部 启动块)
所谓的boot sect,是指的是Nor Flash和Nand Flash不太一样。Nand Flash从开始到最后,都是由同样大小的page所组

成的。
而Nor Flash,一般都是有个boot sect,好像是由于历史原因,常将Nor Flash用于作为存储启动代码的设备,也就是

从Nor Flash启动,所以,这个boot sect块,专门设计出来,用于存放启动代码。如果详细解释,按照datasheet中的

描述就是,第一个或最后一个,此处是bottom sect,所以是最后一个64KB大小的块,被分为4个独立的块。第一个16KB

,用于少量的系统初始化代码。而2个8KB的块用于存储参数,余下的32KB的块叫做Main Block,用于存储应用程序的代

码。
Sector(扇区)
此处的sector(扇区)也就是flash里面的最小的擦除单位:块(block)。
#define MEM_FLASH_ADDR1? (*(volatile u16 *)(CONFIG_SYS_FLASH_BASE + (0x00000555 << 1)))
#define MEM_FLASH_ADDR2? (*(volatile u16 *)(CONFIG_SYS_FLASH_BASE + (0x000002AA << 1)))
由于我们是把norflash连接到了s3c2440的bank0上,因此norflash中的地址相对于s3c2440来说基址为0x00000000,即

CONFIG_SYS_FLASH_BASE? = 0。
而之所以又把norflash中的地址向左移一位(即乘以2),是因为我们是把s3c2440的ADDR1连接到了norflash的A0上的

缘故。
三,我的norflash移植步骤
1,修改include/configs/apple2440.h
#if 0??? //注释掉下面两个类型的Nor Flash设置,因为不是我们所使用的型号
#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
//第175行添加如下内容
#define CONFIG_EON_29LV160AB???? 1??????? //添加TQ2440开发板Nor Flash设置
#define PHYS_FLASH_SIZE??????????? 0x200000 //我们开发板的Nor Flash是2M
#define CONFIG_SYS_MAX_FLASH_SECT? (35)???? //根据EN29LV160AB的芯片手册描述,共35个扇区
#define CONFIG_ENV_ADDR??????????? (CONFIG_SYS_FLASH_BASE + 0xF0000) //暂设置环境变量的首地址为0xF0000

//在此处放uboot参数

2,在include/flash.h添加
在181行添加
#define EON_ID_LV160AB?? 0x22492249

3,在board/samsung/smdk2440/flash.c中修改
#define MAIN_SECT_SIZE???? 0x8000? //定义为32k,主要扇区的大小
============================================================
由数据手册可知EN29LV160AB第0扇区大小为8K,第1、2为4K,第3为16K,后面31扇区为32K。前面4个扇区加起来刚好是

主要扇区的大小 = 32K,所以修改87行下如下

for (j = 0; j < flash_info[i].sector_count; j++)
{
??? if (j <= 3)
?? {
??????? /* 1st one is 8 KB */
?????? if (j == 0)
????? {
???????????? flash_info[i].start[j] = flashbase + 0;
????? }

????? /* 2nd and 3rd are both 4 KB */
????? if ((j == 1) || (j == 2))
???? {
?????????? flash_info[i].start[j] = flashbase + 0x2000 + (j - 1) * 0x1000;
???? }

???? /* 4th 16 KB */
???? if (j == 3)
??? {
?????????? flash_info[i].start[j] = flashbase + 0x4000;
???? }
?}
?else
?{
?????? flash_info[i].start[j] = flashbase + (j - 3) * MAIN_SECT_SIZE;
?}
}
size += flash_info[i].size;
==========================================================
修改flash_print_info,添加EN29LV160AB相关信息如下:

switch (info->flash_id & FLASH_VENDMASK) {
?case (AMD_MANUFACT & FLASH_VENDMASK):
? printf ("AMD: ");
? break;
?case (EON_MANUFACT & FLASH_VENDMASK):
? printf ("EON: ");
? break;
?default:
? printf ("Unknown Vendor ");
? break;
?}

?switch (info->flash_id & FLASH_TYPEMASK) {
?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 (EON_ID_LV160AB & FLASH_TYPEMASK):
? printf ("1x EN29LV160AB (16Mbit)n");
? break;

?default:
? printf ("Unknown Chip Typen");
? goto Done;
? break;
?}

================================================
修改int flash_erase (flash_info_t * info,int s_first,int s_last)

if ((info->flash_id & FLASH_VENDMASK) !=
???? (EON_MANUFACT & FLASH_VENDMASK)) {
? return ERR_UNKNOWN_FLASH_VENDOR;

=========================================
75行处添加
#elif defined(CONFIG_EON_29LV160AB)?? //在CONFIG_AMD_LV800后面添加EON_ID_LV160AB?????
??????????? (EON_MANUFACT & FLASH_VENDMASK) |
??????????? (EON_ID_LV160AB & FLASH_TYPEMASK);


下载到sdram效果很好。
可是我又下载了一次后,电脑出现了蓝屏,后来发现dnw.exe我的usb下载软件坏了。网上查了下,蛮麻烦的。现在要想

办法把dnw彻底卸载。这是我常用的工具,不能出问题啊。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读