U-boot-200908在FL2440上的移植(二)--uboot在norflash上运行
来源:互联网 发布:海辉高科软件科技公司 编辑:程序博客网 时间:2024/06/05 19:12
我的开发板上的norflash是Intel的JS28F320(4MB)(1device=32blocks,1block=128MB)
1.修改norflash的配置,在include/configs/fl2440.h中关于flash的配置部分都删掉,换成下面的配置:
/*-----------------------------------------------------------------------* Physical Memory Map*/#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */#define PHYS_FLASH_1 0x00000000 /* Flash Bank #1 */#define CONFIG_SYS_FLASH_BASE PHYS_FLASH_1#define CONFIG_SYS_MONITOR_BASE TEXT_BASE#define FLASH_BASE0_PRELIM PHYS_FLASH_1/*------------------------------------------------------------* FLASH and environment organization*/#define CONFIG_SYS_FLASH_PROTECTION 1#define CONFIG_SYS_MAX_FLASH_BANKS 1 /*max number of memory banks*/#define CONFIG_SYS_FLASH_SIZE 0x00400000 /*4 MB*/#define CONFIG_SYS_MAX_FLASH_SECT 32 /*max number of sectors on one chip*//*timeout values are in ticks*/#define CONFIG_SYS_FLASH_ERASE_TOUT (2*CONFIG_SYS_HZ) /*Timeout for Flash Erase*/#define CONFIG_SYS_FLASH_WRITE_TOUT (2*CONFIG_SYS_HZ) /*Timeout for Flash Write*/#define CONFIG_ENV_IS_IN_FLASH 1#define CONFIG_ENV_SIZE 0x20000 /*128KB*/#define CONFIG_ENV_OFFSET 0x40000
2.下载到norflash需要进行底层的初始化,所以要删除之前在配置文件include/configs/fl2440.h中加入的两句:
//#define CONFIG_SKIP_LOWLEVEL_INIT 1 //#define CONFIG_SKIP_RELOCATE_UBOOT 1
3.修改board/samsung/fl2440/lowlevel_init.S文件中SDARM刷新参数为:
#define REFCNT 1258 /* period=7.8125us, HCLK=405/4 Mhz, (2048+1-7.8125*405/4) */
4.修改flash型号相关文件:
(1).用board/cmi/flash.c文件替换board/samsung/fl2440/flash.c文件,使uboot支持Intel的JS28F320型号nor;
(2).修改board/samsung/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);
(3).删除board/samsung/fl2440/flash.c中write_buff和write_short两个函数,用下面两个函数代替:
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); /* get lower word aligned address */ /* * handle unaligned start bytes */ 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; } /* * handle word aligned part */ 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; } /* * handle unaligned tail bytes */ 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; /* Check if Flash is (sufficiently) erased , fix by kavin*/ 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) { /* check for error */ printf("\nFlash write error %02x at address %08lx\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;}
编译然后下载到norflash中就行了
- U-boot-200908在FL2440上的移植(二)--uboot在norflash上运行
- U-boot-200908在FL2440上的移植(一)--uboot在RAM中运行
- U-boot-200908在FL2440上的移植(三)--移植DM9000
- U-boot-200908在FL2440上的移植(四)--用nfs和tftp下载
- u-boot-2009.08在飞凌OK2440/FL2440上的移植(一)——让u-boot在内存中运行进来
- u-boot-2009.08在飞凌OK2440/FL2440上的移植(二)——让u-boot支持从nor flash 启动
- u-boot-2009.08在飞凌OK2440/FL2440上的移植(三)——让u-boot支持DM9000A
- U-boot在S3C2440上的移植详解(二)
- U-boot在S3C2440上的移植详解(二)
- U-boot在S3C2440上的移植详解(二)
- u-boot-2011.03在TQ2440上的移植(3)--支持norflash启动
- u-boot-2011.03在TQ2440上的移植(3)--支持norflash启动 .
- u-boot-2009.08在mini2440上的移植(一)---LED显示Uboot运行状况
- u-boot-2011.03在mini2440/micro2440上的移植(二)——在RAM中运行
- u-boot-2010.03在LT2440上的移植详解 (二)
- u-boot-2010-06在mini2440上的移植(二)
- u-boot-2009.08在飞凌OK2440/FL2440上的移植(四)——让u-boot支持nand flash识别与操作
- u-boot-2009.08在飞凌OK2440/FL2440上的移植(五)——让u-boot从nand flash启动
- Android实例说明
- 位移进制运算
- oralce修改已有的表为分区表
- 使用Flash骨骼工具制作角色动画
- Django 模板中使用css, javascript
- U-boot-200908在FL2440上的移植(二)--uboot在norflash上运行
- 数据结构-- 哈希表
- dedecms产品特色
- CStdioFile的用法
- Django+nginx+fastcgi 配置
- dedeCMS开发环境
- UIAlertView (ProgressHUD)
- ... or one of its dependencies. The system cannot find the file specified... 加载指定dll失败
- 双线性内插值算法用于放大