u-boot-2011.06移植

发布者:Meshulun最新更新时间:2024-07-10 来源: elecfans关键字:u-boot  移植 手机看文章 扫描二维码
随时随地手机看文章

109:#define B5_Tacp                 0x0

110:#define B5_PMC                0x0

111:

112:#define B6_MT                  0x3

113:#define B6_Trcd                 0x1

114:#define B6_SCAN                     0x1

115:

116:#define B7_MT                  0x3

117:#define B7_Trcd                 0x1

118:#define B7_SCAN                     0x1

119:

120:

121:#define REFEN                  0x1

122:#define TREFMD               0x0

123:#define Trp                 0x1

124:#define Trc                 0x1

125:#define Tchr                0x2

126:#define REFCNT                1268

 

4.修改NandFlash相关内容。

尽管本次移植没有涉及到NandFlash,但为了能够编译成功,必须修改下面有关NandFlash的内容。

 

进入u-boot-2011.06目录,执行下列命令:

cp drivers/mtd/nand/s3c2410_nand.c drivers/mtd/nand/s3c2440_nand.c

打开drivers/mtd/nand/s3c2440_nand.c文件,把该文件内的所有有关“2410”的地方一律改为“2440”。

再打开drivers/mtd/nand/Makefile文件

第48行“COBJS-$(CONFIG_NAND_S3C2410) += s3c2410_nand.o”改为

48:COBJS-$(CONFIG_NAND_S3C2440) += s3c2440_nand.o

 

编译u-boot,把编译生成的新的u-boot.bin烧写到NorFlash中。开发板上电启动后,则在超级终端(或类似的软件)中显示的结果为:

 

U-Boot 2011.06 (Jul 30 2011 - 23:40:44)

 

DRAM: 64 MiB

Flash: 2 MiB

NAND: raise: Signal # 8 caught

raise: Signal # 8 caught

raise: Signal # 8 caught

raise: Signal # 8 caught

raise: Signal # 8 caught

raise: Signal # 8 caught

No NAND device found!!!

0 MiB

*** Warning - bad CRC, using defaultenvironment

 

In:   serial

Out:  serial

Err:  serial

Net:  CS8900-0

gq2440 #

 

从上述显示的内容可以看出本开发板的一些基本的信息,如DRAM为64M,NorFlash为2M,由于我没有设置NandFlash,因此系统没有检测到NandFlash,命令提示符也已经修改为“gq2440 # ”。

 

在提示符下输入flinfo,则会把NorFlash的更详细的信息显示出来:

 

Bank # 1: CFI conformant flash (16 x16)  Size: 2 MB in 35 Sectors

  AMDStandard command set, Manufacturer ID: 0x1C,Device ID: 0x2249

 Erase timeout: 16384 ms, write timeout: 1 ms

 

 Sector Start Addresses:

 00000000   RO   00004000  RO   00006000   RO  00008000   RO   00010000  RO

 

 00020000   RO   00030000  RO   00040000   RO  00050000   RO   00060000  RO

 

 00070000   RO   00080000        00090000        000A0000        000B0000

 

  000C0000        000D0000        000E0000        000F0000        00100000

 

 00110000        00120000        00130000        00140000        00150000

 

 00160000        00170000        00180000        00190000        001A0000

 

 001B0000        001C0000        001D0000        001E0000        001F0000

 3 支持NandFlash读写

我们把drivers/mtd/nand/s3c2410_nand.c文件复制为s3c2440_nand.c文件,并把该文件内的所有有关“2410”的地方一律改为“2440”。这么修改仅仅是能够让系统编译成功,并没有真正实现NandFlash的读写。在这里,我们就来介绍如何让u-boot支持NandFlash的读写。

 

由于s3c2410与s3c2440的NandFlash控制器不一样,因此s3c2440_nand.c文件并不能直接应用,需要进行适当的修改,而主要修改的内容就是s3c2440的相关寄存器

 

首先重新定义要用到的寄存器,把原文中第27行至第37行之间的宏定义去掉,改为下面的形式:

#define S3C2440_NFCONT_SECCL       (1<<6)

#define S3C2440_NFCONT_MECCL       (1<<5)

#define S3C2440_NFCONT_INITECC     (1<<4)

#define S3C2440_NFCONT_nCE         (1<<1)

#define S3C2440_NFCONT_MODE        (1<<0)

#define S3C2440_NFCONF_TACLS(x)    ((x)<<12)

#define S3C2440_NFCONF_TWRPH0(x)   ((x)<<8)

#define S3C2440_NFCONF_TWRPH1(x)   ((x)<<4)

 

#define S3C2440_ADDR_NALE        0x08

#define S3C2440_ADDR_NCLE       0x0C

 

然后就是修改s3c2440_hwcontrol函数和board_nand_init函数,其他函数不变。

 

board_nand_init函数主要是用于对NandFlash的初始化,对它修改的内容是对寄存器NFCONF和寄存器NFCONT的修改,如下所示为修改后的board_nand_init函数,其中红色标注的地方为修改的地方:

int   board_nand_init(struct nand_chip *nand)

{

       u_int32_t cfg;

       u_int8_t tacls, twrph0, twrph1;

       struct s3c24x0_clock_power *clk_power = s3c24x0_get_base_clock_power();

       struct s3c2440_nand *nand_reg = s3c2440_get_base_nand();

 

       debugX(1,'board_nand_init()n');

 

       writel(readl(&clk_power->clkcon) |(1 << 4), &clk_power->clkcon);

 

      

#ifdefined(CONFIG_S3C24XX_CUSTOM_NAND_TIMING)

       tacls = CONFIG_S3C24XX_TACLS;

       twrph0 = CONFIG_S3C24XX_TWRPH0;

       twrph1 = CONFIG_S3C24XX_TWRPH1;

#else

       tacls = 2;

       twrph0 = 3;

       twrph1 = 1;

#endif

 

       cfg = S3C2440_NFCONF_TACLS(tacls - 1);

       cfg |= S3C2440_NFCONF_TWRPH0(twrph0 - 1);

       cfg |= S3C2440_NFCONF_TWRPH1(twrph1 - 1);

       writel(cfg,&nand_reg->nfconf);

      

       cfg = S3C2440_NFCONT_SECCL;

       cfg |= S3C2440_NFCONT_MECCL;

       cfg |= S3C2440_NFCONT_MODE;

       writel(cfg,&nand_reg->nfcont);

 

      

       nand->IO_ADDR_R = (void*)&nand_reg->nfdata;

       nand->IO_ADDR_W = (void*)&nand_reg->nfdata;

 

       nand->select_chip = NULL;

 

      

      

#ifdefCONFIG_NAND_SPL

       nand->read_buf = nand_read_buf;

#endif

 

      

       nand->cmd_ctrl = s3c2440_hwcontrol;

 

       nand->dev_ready = s3c2440_dev_ready;

 

#ifdefCONFIG_S3C2440_NAND_HWECC

       nand->ecc.hwctl = s3c2440_nand_enable_hwecc;

       nand->ecc.calculate = s3c2440_nand_calculate_ecc;

       nand->ecc.correct = s3c2440_nand_correct_data;

       nand->ecc.mode = NAND_ECC_HW;

       nand->ecc.size =CONFIG_SYS_NAND_ECCSIZE;

       nand->ecc.bytes =CONFIG_SYS_NAND_ECCBYTES;

#else

       nand->ecc.mode = NAND_ECC_SOFT;

#endif

 

#ifdef CONFIG_S3C2440_NAND_BBT

       nand->options = NAND_USE_FLASH_BBT;

#else

       nand->options = 0;

#endif

 

       debugX(1, 'end ofnand_initn');

 

       return 0;

}

 

最后修改s3c2440_hwcontrol函数,该函数是用于对NandFlash的写命令和写地址操作:

static void s3c2440_hwcontrol(structmtd_info *mtd, int cmd, unsigned int ctrl)

{

       struct nand_chip *chip =mtd->priv;

       struct s3c2440_nand *nand = s3c2440_get_base_nand();

      

       debugX(1,'hwcontrol(): 0xx 0xxn', cmd, ctrl);

 

       if (ctrl &NAND_CTRL_CHANGE) {

              ulong IO_ADDR_W = (ulong)nand;

 

              if (!(ctrl &NAND_CLE))

[1] [2] [3] [4] [5]
关键字:u-boot  移植 引用地址:u-boot-2011.06移植

上一篇:ALSA声卡10_从零编写之数据传输_学习笔记
下一篇:摄像头驱动学习

推荐阅读最新更新时间:2024-11-13 16:50

米尔瑞米派Remi Pi实时系统Ethercat移植 应用笔记
概 述 Remi Pi采用瑞萨RZ/G2L作为核心处理器,该处理器搭载双核Cortex-A55@1.2GHz+Cortex-M33@200MHz处理器,其内部集成高性能3D加速引擎Mail-G31 GPU(500MHz)和视频处理单元(支持H.264硬件编解码),16位的DDR4-1600 / DDR3L-1333内存控制器、千兆以太网控制器、USB、CAN、SD卡、MIPI-CSI等外设接口,在工业、医疗、电力等行业都得到广泛的应用。 在开发阶段,建议配合核心板配套的评估套件 MYD-YG2L23-8E1D-120-C-REMI来加速开发。 实时内核设计 实时补丁我们选择RT-Preem
[嵌入式]
米尔瑞米派Remi Pi实时系统<font color='red'>与</font>Ethercat<font color='red'>移植</font> 应用笔记
linux2.6.32.2 mini2440平台移植-- UDA1341 音频驱动移植
1.6.1 在初始化文件中加入 UDA1341 设备结构 Linux-2.6.32.2已经完美的支持UDA1341音频芯片的驱动,我们只要在arch/arm/mach-s3c2440/mach-mini2440.c 文件中注册 UDA1341 平台设备的控制端口就可以了,打开 mach-mini2440.c,添加如下内容: //在文件首部添加头文件 #include sound/s3c24xx_uda134x.h //在 LCD 平台设备后面添加 UDA1341 设备结构 static struct s3c24xx_uda134x_platform_data s3c24xx_uda134x_data = {
[单片机]
linux 2.6.22.6 移植
板子是国嵌的 GQ2440 主要移植步骤参考 韦东山老师的《嵌入式linux应用开发完全手册》 1、下载内核,打补丁 2、是用config_ok 配置内核 3、在 include/asm-arm/mach-types.h 中修改 MACH_TYPE_S3C2440 的值为 1999 因为MACH_TYPE_S3C2440 对应的机器结构在 arch/arm/mach-s3c2440/mach-smdk2440.c 中定义 所以 要把这个文件编译进内核,所以配置中有:System Type - s3c2440 Machines - SMDK2440 4、在arch/arm/mach-s3c2440/mach-smdk2440.c
[单片机]
从零开始移植U-boot到mini2440(三)——CPU初始化篇
经过前两节的准备,我们现在可以开始肝u-boot的代码了 U-boot版本:2020/5/2 编译环境:Ubuntu 16.04 arm-none-eabi-gcc version 4.9.3 20150529 (prerelease) (15:4.9.3+svn231177-1) 运行环境:mini2440(s3c2440,arm920t) 代码仓库:git@github.com:JingyeLi/u-boot_2440.git https://github.com/JingyeLi/u-boot_2440/tree/v0.1 u-boot.lds 这是一个很容易被人忽略的一个文件,包括我自己,以前一般用keil的时候都是自
[单片机]
WINCE在ARM平台的移植及驱动技术详解
  WINCE操作系统简介   WinCE操作系统是通用型的嵌入式操作系统,它是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统,它是精简的Windows 95,WindowsCE的图形用户界面相当出色。它1996年开始发布Windows CE 1.0版本,2004年7月发布了Windows CE .NET 5.0版本,目前用得最多的是WindowsCE .NET 4.2版本,其发展速度也是很快的,功能_上自不必描述,它的主要应用领域有PDA市场、PPC、Smartphone、 工业控制、医疗等。   操作系统移植的原因   为了更快的适应市场需求,在实际开发过程中,我们更倾向于移植操作系统而不是
[单片机]
WINCE在ARM平台的<font color='red'>移植</font>及驱动技术详解
移植程序的探讨
对于一些状态的集合,尽可能使用enum而不是#define 来定义。 如: enum {OFF = 0, ON = 1}; 远比 #define OFF 0 #define ON 1 好。 两种写法编译的效果是一样的,但是写程序及看程序的人员来说感觉就不一样了。用enum定义时,可以觉得OFF与ON是一个集合,有相关性(且可减少程序中#define的定义)。但用#define定义时,完全可认为OFF与ON不相干。特别是在程序中#define定义过多时,查找并理解它的意思都是一个痛苦。(如:uc/os,看见它的一大堆#define都头大,要完全明白那一堆定义都得花不少时间) 第二,程序中少用 #if #ifdef
[单片机]
基于S3C2440的DM9000网卡驱动的移植
0 引言   以太网(Ethernet)是一种计算机局域网组网技术。在局域网中,多个节点是共享传输介质的,这就必须由某种机制来决定某个时刻哪个设备占用传输介质来传输数据,因此,局域网的链路层要有介质访问控制的功能,即数据链路层分为逻辑链路控制LLC子层和介质访问控制MAC子层 。   本文主要研究基于S3C2440的DM9000网卡驱动的移植。网络对于嵌入式系统来说是必不可少的,但是S3C2440没有集成以太网接口,所以要想使S3C2440具备以太网的功能,就必须扩展网卡接口。本文选择外接DM9000,使其可以与以太网相连接,并完成DM9000网卡驱动的移植。 1 Linux网络驱动层次   Linux网络驱动可以划分为4层,
[单片机]
基于μC/OS-II操作系统在SPCE061A上的移植优化研究
SPCE061A是凌阳科技新推出的u课SP内核的十六位单片机,内嵌32K字 Flash的SPCE061A时是适用于数字语音识别应用领域的一种经济的选择。它支持精简指令系统,片内具有丰富的硬件资源。只需设计少量的片外扩展电路即可实现应用系统的硬件功能要求。μC/OS-II是一个源代码公开的精简的实时性很强的操作系统内核,移植性强,基于μC/OS-II来设计系统可以提高系统软件开发的效率。将μC/OS-II移植到SPCE061A上,在μC/OS-II的平台上设计软件对于提高相关嵌入式应用系统产品的质量,减少开发周期和降低成本方面有着重要的意义。 基于SPCE061A的硬件最小系统的设计 SPCE061A的系统结构 SPCE
[单片机]
基于μC/OS-II操作系统在SPCE061A上的<font color='red'>移植</font>优化研究
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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