<一>选择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<l; ++i, ++cp) {
       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 lx\n",
           (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的更多相关文章

  1. U-Boot在FL2440上移植(三)----支持NAND Flash

    <一>支持NAND Flash 1. 首先在配置文件 include/config/fl2440.h 的宏 CONFIG_COMMANDS 中增加 CFG_CMD_NAND, #defin ...

  2. U-Boot在FL2440上移植(四)----支持网卡DM9000和烧写yaffs文件系统

    <一>支持网卡芯片DM9000 在driver下,有网卡驱动DM9000x.c 和 DM9000x.h DM9000接在BANK4,位宽16 在include/configs/TX2440 ...

  3. U-Boot在FL2440上移植(一)----修改系统时钟

    <一>U-boot源码结构 图片来自韦东山的<嵌入式linux应用开发完全手册> U-boot下载地址:ftp://ftp.denx.de/pub/u-boot/ 交叉编译工具 ...

  4. Spring Boot 揭秘与实战(二) 数据存储篇 - 声明式事务管理

    文章目录 1. 声明式事务 2. Spring Boot默认集成事务 3. 实战演练4. 源代码 3.1. 实体对象 3.2. DAO 相关 3.3. Service 相关 3.4. 测试,测试 本文 ...

  5. Spring Boot开发之流水无情(二)

    http://my.oschina.net/u/1027043/blog/406558 上篇散仙写了一个很简单的入门级的Spring Boot的例子,没啥技术含量,不过,其实学任何东西只要找到第一个突 ...

  6. 【转】Spring Boot干货系列:(二)配置文件解析

    转自:Spring Boot干货系列:(二)配置文件解析 前言 上一篇介绍了Spring Boot的入门,知道了Spring Boot使用"习惯优于配置"(项目中存在大量的配置,此 ...

  7. Spring Boot干货系列:(二)配置文件解析

    Spring Boot干货系列:(二)配置文件解析 2017-02-28 嘟嘟MD 嘟爷java超神学堂   前言 上一篇介绍了Spring Boot的入门,知道了Spring Boot使用“习惯优于 ...

  8. ESA2GJK1DH1K基础篇: 测试APP扫描Air202上面的二维码绑定通过MQTT控制设备(兼容SIM800)

    前言 此程序兼容SIM800 如果想绑定SIM800,请把其IMEI号,生成二维码,用手机APP扫描. 实现功能概要 APP通过扫描二维码获取GPRS设备的IMEI号,然后设置订阅的主题:device ...

  9. zedboard上移植OPENCV库

    zedboard上移植OPENCV库 之前做了很多移植OPENCV库的工作,但是需要包含的各种库,需要交叉编译,X264 ,JPGE ,FFMPGE等等 注意:在<嵌入式系统软硬件协同设计实战指 ...

随机推荐

  1. 害人的VS2008,manifest导致“应用程序配置不正确,应用程序未能启动”

    在VC++2008的项目中,如何显示地指定要使用的C++库的版本? 开发环境:VS2008 SP1 + Win2003 SP2         因为我的VS2008安装了SP1补丁,所以有了9.0.3 ...

  2. HDU5280 Senior&#39;s Array(简单DP)

    题目链接:pid=5280">传送门 题意: 给定一个长度为n的序列,和一个改动的值p,必须从原序列中选一个位置改动成p, 求改动后的区间和的最大值. 分析: 枚举位置+最大区间和. ...

  3. 介绍 - OC中的代理模式

    一,代理设计模式的场合: 当对象A发生了一些行为,想告知对象B (让对象B成为对象A的代理对象) 对象B想监听对象A的一些行为 (让对象B成为对象A的代理对象) 当对象A无法处理某些行为的时候,想让对 ...

  4. 【MFC相关】MFC入门相关

    1.MFC的“匈牙利标识符命名法”,这是一个约定,可以增加代码的可读性: 声明或定义了一个类,那么这个类可以以“C”(class)为前缀,如CHelloWorldDlg类: 定义一个无符号型的局部变量 ...

  5. Cyclomatic complexity

    Cyclomatic Code Complexity was first introduced by Thomas McCabe in 1976. In 1976, Thomas McCabe pub ...

  6. JAVA FILE or I/O学习 - I/O流操作:FileInputStream、FileOutputStream、ObjectInputStream、ObjectOutputStream、InputStreamReader、OutputStreamWriter等

    public class IOStreamKnow { /*********************************文件读写方式:字节流**************************** ...

  7. HDU 1501 Zipper 动态规划经典

    Zipper Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  8. 对于java用发送http请求,请求内容为xml格式

    import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.ByteArrayOutputStr ...

  9. Java-多线程的实现与启动

    class mythread extends Thread  //多线程的启动 {  private String name;  public mythread(String name)  {   t ...

  10. Linux vsftpd服务配置具体解释

    [背景] 近日.一朋友dominoserver要进行升级.迁移,搭建了linux測试系统,也开启vsftpd服务,但是配置的ftp账号,程序无法正常下载附件. [问题跟踪] 通过ftpclient连接 ...