U-Boot在FL2440上移植(二)----支持NOR Flash

发布者:科技探险者最新更新时间:2023-06-08 来源: elecfans关键字:U-Boot  FL2440  移植  NOR  Flash 手机看文章 扫描二维码
随时随地手机看文章

<一>选择NOR flash型号

    我的开发板上的nor flash芯片是Intel的JS28F320(4MB)(1device=32blocks,1block=128MB

fl2440默认是nandflash启动,norflash启动只需将跳线帽J5拔掉就可以了

   1. 把开发板的配置文件fl2440.h(/include/configs/fl2440.h)中关于flash的配置部分都删掉,换成下面的配置:

#define CONFIG_NR_DRAM_BANKS     1           
#define PHYS_SDRAM_1          0x30000000       
#define PHYS_SDRAM_1_SIZE     0x04000000       
#define PHYS_FLASH_1         0x00000000         
#define CFG_FLASH_BASE       PHYS_FLASH_1
#define CFG_MONITOR_BASE    TEXT_BASE
#define FLASH_BASE0_PRELIM           PHYS_FLASH_1
#define CONFIG_SYS_FLASH_PROTECTION    1
#define CFG_MAX_FLASH_BANKS     1      
#define CONFIG_SYS_FLASH_SIZE     0x00400000    
#define CFG_MAX_FLASH_SECT     32    
#define CFG_FLASH_ERASE_TOUT     (2*CONFIG_SYS_HZ)

#define CONFIG_SYS_FLASH_WRITE_TOUT     (2*CONFIG_SYS_HZ)

#define CFG_ENV_IS_IN_FLASH     1
#define CFG_ENV_SIZE         0x20000       
#define CFG_ENV_OFFSET      0x40000

#define CONFIG_SYS_HZ                   1000

#endif 

如果出现   警告: “no newline at end of file" 只需在这段代码后加几个回车就可以了

2. 把开发板目录下flash.c文件替换成下面的/board/cmi/下面的flash.c文件,然后删除这个write_short函数的申明和定义、删除write_buff函数。替换成下面的两个函数

int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
{
   ulong cp, wp;
   ushort data;
   int l;
   int i, rc;

   wp = (addr & ~1);      

   if ((l = addr - wp) != 0)
   {
      data = 0;
      for (i=0, cp=wp; i       data = (data >> 8) | (*(uchar *)cp << 8);
      }
      for (; i<2 && cnt>0; ++i) {
     data = (data >> 8) | (*src++ << 8);
     --cnt;
     ++cp;
      }
      for (; cnt==0 && i<2; ++i, ++cp) {
     data = (data >> 8) | (*(uchar *)cp << 8);
      }

      if ((rc = write_word(info, wp, data)) != 0) {
     return (rc);
      }
      wp += 2;
   }

   while (cnt >= 2) {
      data = *((vu_short*)src);
      if ((rc = write_word(info, wp, data)) != 0) {
      return (rc);
      }
      src += 2;
      wp  += 2;
      cnt -= 2;
   }

   if (cnt == 0) {
      return ERR_OK;
   }

   data = 0;
   for (i=0, cp=wp; i<2 && cnt>0; ++i, ++cp) {
      data = (data >> 8) | (*src++ << 8);
      --cnt;
   }
   for (; i<2; ++i, ++cp) {
      data = (data >> 8) | (*(uchar *)cp << 8);
   }

   return write_word(info, wp, data);
}

static int write_word (flash_info_t *info, ulong dest, ushort data)
{
   vu_short *addr = (vu_short *)dest, val;
   int rc = ERR_OK;
   int flag;

   if ((*addr & data) != data)
      return ERR_NOT_ERASED;

   flag = disable_interrupts();

   *addr = 0x50;

   *addr = 0x40;

   *addr = data;

   reset_timer_masked();

   while(((val = *addr) & 0x80) != 0x80)
   {
      if (get_timer_masked() > CONFIG_SYS_FLASH_WRITE_TOUT) {
      rc = ERR_TIMOUT;
      *addr = 0xB0;
      goto outahere;
      }
   }

   if(val & 0x1A) {       
      printf("nFlash write error x at address lxn",
           (int)val, (unsigned long)dest);
      if(val & (1<<3)) {
     printf("Voltage range error.n");
     rc = ERR_PROG_ERROR;
     goto outahere;
      }
      if(val & (1<<1)) {
     printf("Device protect error.n");
     rc = ERR_PROTECTED;
     goto outahere;
      }
      if(val & (1<<4)) {
     printf("Programming error.n");
     rc = ERR_PROG_ERROR;
     goto outahere;
      }
      rc = ERR_PROG_ERROR;
      goto outahere;
   }

outahere:
   *addr = 0xFF;

   if (flag)
      enable_interrupts();

   return rc;
}

   3. 修改board/fl2440/flash.c中函数申明:
static ulong flash_get_size (vu_short *addr, flash_info_t *info);
//static int write_short (flash_info_t *info, ulong dest, ushort data);
static int write_word (flash_info_t *info, ulong dest, ushort data);
static void flash_get_offsets (ulong base, flash_info_t *info);

    4. 修改flash.c文件中的一个宏定义:
把:
#define FLASH_BLOCK_SIZE        0x00010000
改为:
#define FLASH_BLOCK_SIZE        0x00020000

<二>执行make fl2440config 和 make all将生成的U-Boot.bin烧入norflash

NOR Flash常用命令 :查看NOR flash信息  flinfo

                    加/解写保护命令 protect

                    擦出命令    erase

                    读norflash     mm/cp

                    写norflash     cp 


关键字:U-Boot  FL2440  移植  NOR  Flash 引用地址:U-Boot在FL2440上移植(二)----支持NOR Flash

上一篇:U-Boot在FL2440上移植(四)----支持网卡DM9000和烧写yaffs文件系统
下一篇:U-Boot在FL2440上移植(一)----修改系统时钟

推荐阅读最新更新时间:2024-10-25 17:07

U-BootFL2440移植(二)----支持NOR Flash
一 选择NOR flash型号 我的开发板上的nor flash芯片是Intel的JS28F320(4MB)(1device=32blocks,1block=128MB fl2440默认是nandflash启动,norflash启动只需将跳线帽J5拔掉就可以了 1. 把开发板的配置文件fl2440.h(/include/configs/fl2440.h)中关于flash的配置部分都删掉,换成下面的配置: #define CONFIG_NR_DRAM_BANKS 1 #define PHYS_SDRAM_1 0x30000000 #define PHYS_SDRAM_1_SIZE 0x040
[单片机]
U-BootFL2440移植(三)----支持NAND Flash
一 支持NAND Flash 1. 首先在配置文件 include/config/fl2440.h 的宏 CONFIG_COMMANDS 中增加 CFG_CMD_NAND, #define CONFIG_COMMANDS (CONFIG_CMD_DFL | CFG_CMD_CACHE | CFG_CMD_NAND | 2.在配置文件 include/configs/fl2440.h 中增加如下3个宏 #define CFG_NAND_BASE 0 //无实际意义:基地址,在board_nand_init中重新定义 #define CFG_MAX_NAND_DEVICE 1 //NAND Flash设备数目为1
[单片机]
u-boot移植(十)---代码修改---支持nor flash
一、问题定位      开发板重启后打印了2个提醒和一个错误,caches的提醒先不看,看看flash和nand下面的提醒,bad CRC,Using default enviroment,我们可以定位Using default enviroment定位到 代码位置,如下:     Env_common.c (common)      传入的参数应该是 !badCRC,再次定位函数set_default_env 看是在哪里调用此函数:                  基本上文件都在common文件夹下,有common中的调用和 dataflash,nand,sf,ubi。暂且不知道是哪个,要看看u-boot.di
[单片机]
<font color='red'>u-boot</font><font color='red'>移植</font>(十)---代码修改---支持<font color='red'>nor</font> <font color='red'>flash</font>
u-boot分析与移植——基于u-boot-2011.3和FL2440
关于移植的基本方法可以先阅读u-boot的README文档 If the system board that you have is not listed, then you will need to port U-Boot to your hardware platform. To do this, follow these steps: 1. Add a new configuration option for your board to the toplevel Makefile and to the MAKEALL script, using the existing entries as example
[单片机]
U-BootFL2440移植(一)----修改系统时钟
一 U-boot源码结构 图片来自韦东山的《嵌入式linux应用开发完全手册》 U-boot下载地址: ftp://ftp.denx.de/pub/u-boot/ 交叉编译工具链 3.3.2 二 U-boot移植 1.新建一个fl2440开发板目录和文件 ①在board目录下新建fl2440目录,讲smdk2410目录下的文件复制到fl2440目录下,并将board/fl2440/smdk2410.c重命名为fl2440.c ②修改u-boot-1.1.6目录下Makefile文件 smdk2410_config : unconfig @$(MKCONFIG) $(@:_config
[单片机]
<font color='red'>U-Boot</font>在<font color='red'>FL2440</font>上<font color='red'>移植</font>(一)----修改系统时钟
U-BootFL2440移植(四)----支持网卡DM9000和烧写yaffs文件系统
一 支持网卡芯片DM9000 在driver下,有网卡驱动DM9000x.c 和 DM9000x.h DM9000接在BANK4,位宽16 在include/configs/TX2440.h中设置网卡基地址: 在56行处,将CS8900的定义改成: #define CONFIG_DRIVER_DM9000 1 #define CONFIG_DM9000_BASE 0x20000300 #define DM9000_IO CONFIG_DM9000_BASE #define DM9000_DATA (CONFIG_DM9000_BASE + 4) #define CONFIG_DM9000_USE_16BIT
[单片机]
S3C2440 U-Boot移植--Norflash驱动支持- S29AL016
U-Boot版本:2008.10 开发板:Mini2440 之前根据国嵌的实验手册移植了很久都没有成功,关键是国嵌手册上的Norflash型号是SST1601,而我的Mini2440开发板上配置的是Spansion公司的S29AL016J芯片,两者型号不同,修改的地方差异很大。后来通过在网上查资料发现S29AL016J芯片与smdk2410默认使用的芯片(AMD的AM29LV400)除了大小不一样外,其他如命令序列,操作方式都是一样的(也难怪在做完国嵌实验手册的2.4以后就可以进行环境变量的保存)。所以根据AM29LV400来移植的话所做的修改不多。 查询datasheet后,得到如下信息; 该Norflash芯
[单片机]
第六章、Tiny4412 U-BOOT移植六 Nand Flash源码分析
一、U-Boot参考源码 NandFlash的初始化代码我们放在board/samsung/tiny4412/lowlevel_init.S ,这一段代码是三星SMDK4212中没有提供的,所以我们需要自己写。我们在里面增加一个函数叫nand_asm_init。当然,由于 Nand Flash 的操作是有一定的规律的,所以,我们可以去别的地方找一段写好的NandFlash源码,然后根据自己的电路原理图进行移植即可。 二、代码分析 1、初始化Nand Flash 打开原理图,参看原理图配置各个功能引脚----状态引脚R/nB,读使能引用脚nRE,片选信号nCE,命令使能引脚CLE,地址使能引脚ALE,写使能引脚nWE。
[单片机]
第六章、Tiny4412 <font color='red'>U-BOOT</font><font color='red'>移植</font>六 Nand <font color='red'>Flash</font>源码分析
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved