最具体的u-boot移植到QT2410E开发板的过程2

  ldr   r2, [r1, #oNFCONF]
  bic  r2, r2, #0x800              @ enable chip
  str   r2, [r1, #oNFCONF]
  mov r2, #0xff         @ RESET command
  strb r2, [r1, #oNFCMD]


  mov r3, #0                   @ wait
nand1:  
  add  r3, r3, #0x1
  cmp r3, #0xa
  blt   nand1

nand2:
  ldr   r2, [r1, #oNFSTAT]      @ wait ready
  tst    r2, #0x1
  beq  nand2

  ldr   r2, [r1, #oNFCONF]
  orr  r2, r2, #0x800              @ disable chip
  str   r2, [r1, #oNFCONF]

@ get read to call C functions (for nand_read())
  ldr   sp, DW_STACK_START       @ setup stack pointer
  mov fp, #0                    @ no previous frame, so fp=0

@ copy U-Boot to RAM
  ldr   r0, =TEXT_BASE
  mov     r1, #0x0
  mov r2, #0x20000
  bl    nand_read_ll 这个函数在nand_read.c中实现
  tst    r0, #0x0
  beq  ok_nand_read

bad_nand_read:
loop2:    b     loop2          @ infinite loop


ok_nand_read:
@ verify
  mov r0, #0
  ldr   r1, =TEXT_BASE
  mov r2, #0x400     @ 4 bytes * 1024 = 4K-bytes,这句话的意思在start.S中已注释。
go_next:
  ldr   r3, [r0], #4
  ldr   r4, [r1], #4
  teq   r3, r4
  bne  notmatch
  subs r2, r2, #4
  beq  stack_setup
  bne  go_next

notmatch:
loop3:     b     loop3         @ infinite loop

#endif @ CONFIG_S3C2410_NAND_BOOT 

注:实现比较简单,同学要仔细推敲NAND工作原理,如看不懂,老师会在同学完成实验后给予讲解。其中@为注释部分,可不必写入。

(1) 用命令行模式找到_start_armboot:    .word start_armboot后加入:
   .align     2(前面用TAB键空出)
DW_STACK_START:  .word  STACK_BASE+STACK_SIZE-4

4 添加头文件信息

include/configs/qt2410e.h头文件中添加nandflash的初始化信息:

(1) 找到#define CFG_ENV_IS_IN_FLASH 1并将其用//注释掉。

//#define CFG_ENV_IS_IN_FLASH 1

(2) 后面添加如下宏定义:

#define CFG_ENV_IS_IN_NAND 1 

#define CFG_ENV_OFFSET 0x020000 

#define CFG_NAND_BASE 0x4E000000 

#define CMD_SAVEENV 

#define CFG_NAND_LEGACY 

#define CFG_MONITOR_BASE PHYS_SDRAM_1 

#if (CONFIG_COMMANDS & CFG_CMD_NAND) 

#define CFG_NAND_BASE 0x4E000000 

/* NandFlash控制器在SFR区起始寄存器地址 */ 

#define CFG_MAX_NAND_DEVICE 1 

/* 支持的最在Nand Flash数据 */ 

#define SECTORSIZE 512 

/* 1页的大小 */ 

#define NAND_SECTOR_SIZE SECTORSIZE 

#define NAND_BLOCK_MASK 511 

/* 页掩码 */ 

#define ADDR_COLUMN 1 

/* 一个字节的Column地址 */ 

#define ADDR_PAGE 3 

/* 3字节的页块地址!!!!!*/ 

#define ADDR_COLUMN_PAGE 4 

/* 总共4字节的页块地址!!!!! */ 

#define NAND_ChipID_UNKNOWN 0x00 

/* 未知芯片的ID号 */ 

#define NAND_MAX_FLOORS 1 

#define NAND_MAX_CHIPS 1 

/* Nand Flash命令层底层接口函数 */ 

#define WRITE_NAND_COMMAND(d, adr) {rNFCMD = d;} 

#define WRITE_NAND_ADDRESS(d, adr) {rNFADDR = d;} 

#define WRITE_NAND(d, adr) {rNFDATA = d;} 

#define READ_NAND(adr) (rNFDATA) 

#define NAND_WAIT_READY(nand) {while(!(rNFSTAT&(1<<0)));} 

#define NAND_DISABLE_CE(nand) {rNFCONF |= (1<<11);} 

#define NAND_ENABLE_CE(nand) {rNFCONF &= ~(1<<11);} 

/* the following functions are NOP's because S3C24X0 handles this in hardware 一定要加上 */ 

#define NAND_CTL_CLRALE(nandptr) 

#define NAND_CTL_SETALE(nandptr) 

#define NAND_CTL_CLRCLE(nandptr) 

#define NAND_CTL_SETCLE(nandptr) 

/* 允许Nand Flash写校验 */ 

#define CONFIG_MTD_NAND_VERIFY_WRITE 1 

/* 

* Nandflash Boot 

*/ 

#define CONFIG_S3C2410_NAND_BOOT 1 

#define STACK_BASE 0x33f00000 

#define STACK_SIZE 0x8000 

#define UBOOT_RAM_BASE 0x33f80000 

/* NAND Flash Controller */ 

#define NAND_CTL_BASE 0x4E000000 

#define bINT_CTL(Nb) __REG(INT_CTL_BASE + (Nb)) 

/* Offset */ 

#define oNFCONF 0x00 

#define oNFCMD 0x04 

#define oNFADDR 0x08 

#define oNFDATA 0x0c 

#define oNFSTAT 0x10 

#define oNFECC 0x14 

#define rNFCONF (*(volatile unsigned int *)0x4e000000) 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
u-boot-2016.11.tar.bz2是一个开源软件项目的压缩文件。该压缩文件是u-boot引导加载程序的源代码和相关文件的打包形式。u-boot(Universal Bootloader)是一款用于嵌入式系统的开源引导加载程序,用于初始化硬件并启动操作系统。 u-boot-2016.11.tar.bz2文件的扩展名.tar.bz2表示它是使用tar和bzip2两种工具进行压缩的。.tar是一个常用的文件打包工具,它可以将多个文件和目录打包成一个文件。.bz2是一个压缩工具,可以将文件进行高效压缩。 要使用u-boot-2016.11.tar.bz2文件,首先需要将其解压缩。可以使用tar命令进行解压缩,命令为tar -xjf u-boot-2016.11.tar.bz2。这将解压缩文件,并将源代码和其他相关文件提取到当前目录下。 解压缩后,可以在提取出的文件中找到u-boot引导加载程序的源代码和相关文件。可以根据需要进行定制和编译,生成适合特定硬件平台的引导加载程序。u-boot支持多种处理器架构和开发板,可以根据需要进行配置。 根据u-boot-2016.11.tar.bz2文件的版本号来看,它是2016年11月发布的版本。这意味着该版本已经存在一段时间,并可能具有稳定性和经过验证的特性。对于需要使用u-boot的开发者和嵌入式系统制造商,这个版本可以作为一个可靠的基础进行开发和定制。 总之,u-boot-2016.11.tar.bz2是u-boot引导加载程序的源代码和相关文件的压缩包。解压缩后,可以通过定制和编译源代码,生成适合特定硬件平台的引导加载程序。这个版本已经存在一段时间,并可能具有可靠的特性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值