文档章节

友善之臂最新版mini2440学习笔记——u-boot 1.1.6移植(二)

zhaowei09
 zhaowei09
发布于 2016/06/06 21:03
字数 1165
阅读 7
收藏 0

原本四天前就写了这篇博文,奈何ibus输入法默认鼠标左键选中之后删除,好好的一篇博文就这样没了。调整了几天郁闷的心情之后,继续记录u-boot 1.1.6的移植过程。

接上一篇,本文主要介绍以下内容:

  • 存储相关的board/mini2440/lowlevel_init.S文件移植

  • BWSCON寄存器

根据mini2440原理图,Bank0接NOR(NAND启动状态下不可见),Bank3无外设,Bank4连接DM9000EP,BANK6接SDRAM,因此需要对BWSCON寄存器进行修改。

原代码:

#define B1_BWSCON          (DW32)
#define B2_BWSCON          (DW16)
#define B3_BWSCON          (DW16 + WAIT + UBLB)
#define B4_BWSCON          (DW16)
#define B5_BWSCON          (DW16)
#define B6_BWSCON          (DW32)
#define B7_BWSCON          (DW32)

更改后:

#define B0_BWSCON	  	(DW16)			/* NOR flash */
#define B1_BWSCON	  	0x0
#define B2_BWSCON	  	0x0
#define B3_BWSCON	  	0x0
#define B4_BWSCON	  	(DW16 + WAIT + UBLB)	/* DM9000 */
#define B5_BWSCON	  	0x0
#define B6_BWSCON	  	(DW32)			/* SDRAM */
#define B7_BWSCON	  	(DW32)
  • BANK4CON寄存器

BANK3CON寄存器可以保持不便,但由于BANK4外接DM9000EP,寄存器BANK4CON应作如下修改。具体数值将在今后DM9000网卡移植中作详细解释,这里只给出结论。

原代码:

#define B4_Tacs		 	0x0	/*  0clk */
#define B4_Tcos		 	0x0	/*  0clk */
#define B4_Tacc		 	0x7	/* 14clk */
#define B4_Tcoh		 	0x0	/*  0clk */
#define B4_Tah		 	0x0	/*  0clk */
#define B4_Tacp		 	0x0
#define B4_PMC		 	0x0	/* normal */

更改后:

#define B4_Tacs		 	0x0	/*  0clk */
#define B4_Tcos		 	0x3	/*  4clk */
#define B4_Tacc		 	0x7	/* 14clk */
#define B4_Tcoh		 	0x1	/*  1clk */
#define B4_Tah		 	0x3	/*  4clk */
#define B4_Tacp		 	0x3	/*  6clk */
#define B4_PMC		 	0x0	/* normal */
  • REFRESH寄存器

REFRESH寄存器用于设置SDRAM的自刷新速率。根据原理图,mini2440的BANK6外接两片并联的EM63A165TS-6G型SDRAM。EM63A165TS-6G的产品手册表明其最高自刷新率可以为133MHz。根据前一篇博文,HCLK=100MHz,因此应有如下修改:

原代码:

#define REFEN		 	0x1	/* Refresh enable */
#define TREFMD		 	0x0	/* CBR(CAS before RAS)/Auto refresh */
#define Trp		 	0x0	/* 2clk */
#define Trc		 	0x3	/* 7clk */
#define Tchr		 	0x2	/* 3clk */
#define REFCNT		 	1113	/* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */

更改后:

#define REFEN		 	0x1	/* Refresh enable */
#define TREFMD		 	0x0	/* CBR(CAS before RAS)/Auto refresh */
#define Trp		 	0x0	/* 2clk */
#define Trc		 	0x3	/* 7clk */
#define REFCNT		 	0x4F4	/* period=7.8125us, HCLK=100MHz, (2048+1-7.8125*100) */

当然,作裸机程序时,博主也设置过133MHz的情况,一切运行正常。

  • BANKSIZE寄存器

BANKSIZE寄存器的设置在《嵌入式Linux应用开发完全手册》中有详细介绍,应改为0xB1,这里不作过多解释。

原代码:

SMRDATA:
    .word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
    .word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))
    .word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))
    .word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))
    .word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))
    .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))
    .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))
    .word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))
    .word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))
    .word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)
    .word 0x32
    .word 0x30
    .word 0x30

修改后:

SMRDATA:
    .word ((B0_BWSCON)+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
    .word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))
    .word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))
    .word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))
    .word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))
    .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))
    .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))
    .word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))
    .word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))
    .word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+REFCNT)
    .word 0xB1
    .word 0x30
    .word 0x30
  • 添加空函数

博主采用arm-none-linux-gnueabi进行编译,但是u-boot 1.1.6默认并不兼容此编译器。随着移植过程,编译器会报错,显示不支持raise()和__aeabi_unwind_cpp_pr0()这两个函数。

认真的程序员可能会发现,编译过程中编译器只是需要寻找这两个函数并且编译进目标文件,但是并没有任何地方对其进行调用,因此最好的解决办法是不要修改编译器,而是在u-boot 1.1.6中添加如下两个空函数。博主将这两个函数添加在lowlevel_init.S文件末尾,如下:

/*add empty raise()*/
.globl raise
raise:
    nop
    mov pc, lr

/*add empty __aeabi_unwind_cpp_pr0()*/
.globl __aeabi_unwind_cpp_pr0
__aeabi_unwind_cpp_pr0:
    nop
    mov pc, lr

原计划本篇博文同时记录nandread_ll.c文件的编写,但最近有点忙,先写到这里,下次再记录吧。。

 

 

© 著作权归作者所有

共有 人打赏支持
zhaowei09
粉丝 0
博文 7
码字总数 45754
作品 0
长沙
程序员
私信 提问
Mini2440上的第一个程序——点亮Led

手头的Mini2440搁置了两年半之后,我再次决定拿出它,重新尝试嵌入式Linux的学习。 我使用的是友善之臂的Mini2440开发板、韦东山的《嵌入式Linux应用开发完成手册》及其视频教程。所以,本篇...

icuic
07/15
0
0
自己编译的QT4.6.3可以用,为什么QT4.7.1会出现段错误?

我使用的是友善之臂mini2440的开发板,移植qte时自己编译的QT4.6.3移植到开发板可以运行(友善之臂给的文件系统里就是QT4.6.3),但是又自己编译了QT4.7.1,移植到开发板上时却出现segmentatio...

tom_riddle
2014/02/16
242
0
mini2440基于uboot的TFTP下载教程

由于mini2440在WIN7上下载,USB驱动无法兼容,总是出现蓝屏重启的现象,导致不得不想其他方式来下载,首先就考虑了使用U-Boot来下载,因为它支持多种下载方式: 1. 使用串口下载,它支持ker...

FGQ
2013/01/12
0
0
嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(一)

嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。如有错误之处,谢请指正。 共享资源,欢迎转载:http:...

nothingfinal
2012/06/19
0
0
U-boot在S3C2440上的移植详解(二) --- NOR FLASH 启动u-boot

4)准备进入u-boot的第二阶段(在u-boot中添加对我们开发板上Nor Flash的支持)。 通常,在嵌入式bootloader中,有两种方式来引导启动内核:从Nor Flash启动和从Nand Flash启动。u-boot中默认...

宁宁爸
2015/11/24
99
2

没有更多内容

加载失败,请刷新页面

加载更多

http协议请求头的意义

GET /day31_Http_306/index.jsp HTTP/1.1: GET请求,请求服务器路径为/hello/index.jsp,协议为1.1 请求头 1.Host:localhost:请求的主机名为localhost2.User-Agent:Mozilla/5.0(Windows NT......

潇潇程序缘
16分钟前
2
0
Netty 简单服务器 (三)

经过对Netty的基础认识,设计模型的初步了解,来写个测试,试试手感 上篇也说到官方推荐我们使用主从线程池模型,那就选择这个模型进行操作 需要操作的步骤: 需要构建两个主从线程组 写一个服务器...

_大侠__
27分钟前
5
0
day02:管道符、shell及环境变量

1、管道符:"|" 用于将前一个指令的输出作为后一个指令的输入,且管道符后面跟的是命令(针对文档的操作):cat less head tail grep cut sort wc uniq tee tr split sed awk等) [root@localho...

芬野de博客
37分钟前
11
0
Kubernetes系列——Kubernetes 组件、对象(二)

一、Kubernetes 组件 介绍了Kubernetes集群所需的各种二进制组件。 Master 组件 Master组件提供集群的管理控制中心。Master组件可以在集群中任何节点上运行。但是为了简单起见,通常在一...

吴伟祥
47分钟前
15
0
Flink-数据流编程模型

1、抽象等级 Flink提供了不同级别的抽象来开发流/批处理应用程序。 1) 低层级的抽象 最低层次的抽象仅仅提供有状态流。它通过Process函数嵌入到DataStream API中。它允许用户自由地处理来自一...

liwei2000
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部