如何利用JLINK烧写U-boot到NAND Flash中

原文:http://blog.csdn.net/yanghao23/article/details/7689534

   很多同学使用笔记本作为自己的ARM开发和学习的平台,绝大多数笔记本都没有并口,也就是无法使用JTag调试和烧写程序到Nand Flash中,幸好我们还有JLINK,用JLINK烧写U-boot到Nor Flash中很简单,大部分NOR Flash都已经被JLink的软件SEGGER所支持,而新手在学习的时候经常会实验各种各样的命令,最悲剧的莫过于将NAND Flash中原有的bootloader给删除了,这时候开发板上电后由于没有bootloader,硬件没有被初始化,在NAND Flash中的操作系统也就无法被加载,开发板成“砖”了,这时候笔记本又无法利用JTag烧写程序进Nand Flash。起始这些可以利用JLink通过两种方法解决:

一、方法一,利用NOR Flash。

这种方法是利用JLink能够烧写程序到NOR Flash来完成的,首先利用J-FLASH ARM将u-boot.bin烧写进NOR Flash(记得烧写到NOR Flash的0x0起始地址处),然后设置开发板从NOR Flash启动,这时候系统进入U-boot命令行模式,这时候打开J-Link commander,输入命令:r 看JLink是否能识别开发板的信息(也就是判断JLink是否连接正常)。

以下是在J-Link commander里的命令,先假设u-boot.bin在你电脑的D盘根目录下。

[cpp] view plaincopy

  1. 1. speed 12000               //设置TCK为12M,下载程序时会很快
  2. 2. loadbin d:\u-boot.bin 0x30000000
  3. 注意:0x30000000是你想要下载u-boot.bin到开发板的内存地址,内存地址根据不同的开发板设定不同,因为本文中使用的是FL2440,片上系统是S3C2440,内存挂载的地址区域是0x30000000~0x33ffffff,我们只需要把u-boot.bin下载到这片区域即可,

然后我们在U-boot命令行模式输入NAND Flash擦除和写入命令即可:

[cpp] view plaincopy

  1. nand erase 0 40000
  2. // 擦除从0地址开始的大小为0x40000的Nnad Flash扇区,0x40000是待写入的U-boot.bin的大致长度,长度必须为NAND Flash页大小的整数倍,通常会需要比u-boot.bin实际长度长。
  3. nand write 30000000 0 40000   // 把前面下载到0x30000000的u-boot.bin烧写到Nand去

然后我们再设置开发板从NAND Flash启动即可。

二、方法二,直接通过JLink

假如你的开发板没有NOR Flash或者是你使用的NOR Flash还未被J-FLASH ARM所支持,这时上面的方法你就无法使用了,这时候你需要一个初始化内存SDRAM的程序,这个程序完成的功能也就是配置好SDRAM的寄存器,使它能正常工作,fl2440的内存初始化程序下载地址:“2440init.bin”。你还需要准备一个特殊的u-boot_SDRAM.bin,它与你要烧写到NAND Flash的u-boot.bin有区别,u-boot_SDRAM.bin编译时需要在include/configs/开发板配置文件.h文件中添加:

#define  CONFIG_SKIP_LOWLEVEL_INIT     1 //用来支持uboot在内存中直接运行

添加这个宏定义之后,U-boot就跳过了内存初始化的部分,因为此时我们的内存已经先由“2440init.bin“初始化好了,再次初始化会出现内存数据的丢失。

做好上面的准备工作之后,首先将开发板设为从NAND Flash启动,启动J-Link commander,先假设“u-boot.bin”和“2440init.bin”在电脑的D盘根目录下。

[cpp] view plaincopy

  1. loadbin d:\2440init.bin 0
  2. setpc 0
  3. g

为什么需要把"2440init.bin"复制到0x0地址是因为S3C2440有4K的SRAM,它不需要初始化就可以直接执行程序,从NAND Flash启动时,这个SRAM的地址会挂载到0x0~0x1000的地址空间,我们先把"2440init.bin"复制到SRAM中运行,执行这部分后S3C2440的SDRAM内存就初始化好了(地址空间0x30000000~0x33ffffff)。也许有人会说为什么不一开始就把u-boot_SDRAM.bin放在SRAM中运行啊?SRAM只有4K的大小,而U-boot通常在100~300K,SRAM的空间显然不够,而"2440init.bin"的大小只有不到2K,它可以在SRAM中运行。

内存初始化成功后,下载特制的u-boot_SDRAM.bin:

[cpp] view plaincopy

  1. h
  2. loadbin e:\u-boot_SDRAM.bin 0x33f80000
  3. setpc 0x33f80000
  4. g

这时你应该可以在串口看到U-boot的输出信息了,然后我们在U-boot命令行模式输入NAND Flash擦除和写入命令即可:

[cpp] view plaincopy

  1. nand erase 0 40000
  2. // 擦除从0地址开始的大小为0x40000的Nnad Flash扇区,0x40000是待写入的U-boot.bin的大致长度,长度必须为NAND Flash页大小的整数倍,通常会需要比u-boot.bin实际长度长。
  3. nand write 30000000 0 40000   // 把前面下载到0x30000000的u-boot.bin烧写到Nand去

根据上面的步骤就可以完成u-boot到NAND Flash的烧写了,实际上是利用一个SDRAM中运行的u-boot去烧写u-boot.bin到NAND Flash中。

如何利用JLINK烧写U-boot到NAND Flash中

时间: 2024-09-29 23:30:47

如何利用JLINK烧写U-boot到NAND Flash中的相关文章

HI3518E用J-link烧写裸板fastboot u-boot流程

Hi3518E的裸板烧写fastboot是不能像HI3531那样,可以通过FB直接烧写.遵循ARM9的烧写流程.其中一般u-boot的烧写流程可分为几类:第一:通过编程器芯片直接烧写:第二通过RVDS来烧写(海思官方原版的方式):第三通过j-link烧写.这三种方式中,前两种都是很麻烦的事情,需要编程支持比较贵.第二种价格就更加不菲.第三种方式是一般嵌入式工程师能想到也很容易能得到的方式.下面介绍j-link烧写流程,以下演示芯片为海思的HI3518E芯片. 第一.连接j-link打印对应的j-

【原创】用J-LINK烧写ARM开发板的Nor Flash

以往烧写开发板上的nor flash,大多以JTAG接电脑并口进行烧写,但是目前带并口的电脑几乎很少,USB口则常见.虽然也有带USB的HJTAG,然而价格对于个人而言相对偏高,淘宝上几十元的J-LINK随处可见,因此可考虑使用J-LINK烧写.     J-LINK购买时,配有光盘,内有驱动程序,或者到http://www.segger.com/downloads.html下载最新的驱动,使用前先要安装好驱动程序.安装完成后就存在了两执行文件:JLink.exe和JFlashARM.exe,前

STM32使用J-Link烧写出错:Error: Flash Download failed - Cortex-M3

一.问题现象 STM32使用J-Link烧写出错,出错信息如下: 1.Error: Flash Download failed - Cortex-M3 这是编译器弹窗信息. 2.**JLink Warning: Could not set S_RESET_ST 这是编译器调试窗口打印的显示信息. 二.问题原因及解决方法 电路板上STM32芯片的复位电路有问题,在J-Link复位芯片时,导致复位信号拉低的间隔太长. 1.正常情况下复位引脚电平: 2.异常情况下复位引脚电平:

STM32用JLINK 烧写程序时出现NO Cortex-m device found in JTAG chain现象和解决方案

现象 CPU: STM32107VC 用JLINK 烧写程序时出现NO Cortex-m device found in JTAG chain 如图无法查找到硬件就是CPU 提示1:NO Cortex-M device found inJTAG chain.please check the JTAG cable and the connected devices     提示2:error:flash download failed-target DLL has been cancelled 原

用J-LINK烧写Bootloader到ARM开发板的Nand Flash

一.起因和原理 起因:以往电脑烧写bootloader到 nand中是采用jtag以及jflash,jtag是使用并口连接的,目前电脑一般没有并口了,现今一般是使用较便宜入手的J-LINK,使用USB,就不能再使用以往的jflash烧写了.因此需要找到一个J-LINK烧写Nand的方法. 以下说明J-LINK烧写Nand的原理. 以realarm2410开发板为例子说明,该开发板要把跳线设置为Nand Flash启动模式才可以操作Nand,此时的内存映射如下图: 图1   如图1,内存中并没有对

【转贴】-使用Jlink烧写uboot

原帖地址:http://blog.csdn.net/yanghao23/article/details/7689534 注:当bootloader被破坏无法启动时,可用J-link工具按如下方法写Nand flash.(连接好串口线和J-Link线) 在J-Link Commander中:1.调整Jlink传输速度: J-Link>r   //reset J-Link>speed 12000  //speed 12M 2.将SDRAM初始化工具下载到CPU内存0地址并执行,对SDRAM进行初始

mini2440使用jlink烧写superboot到norflash

Jlink版本:J-flash ARM V4.12 J-Flash ARM的配置. 一般说来file-->open project里面会找到一些*.jflash的配置文件,加载他们就行了,但是没找到适合S3C2440的.所以自己建了一个mini2440.jflash,手动进行配置: j-link设置 1. 打开J-Flash ARM,并进入菜单:Options-->Project settings 2.主要设置CPU选项和Flash选项 CPU : Core --> ARM9, Litt

Jlink烧写图文教程

,点击安装          , 插上jlink,安装驱动后,红灯一直亮                                                                     (mini2440为例) (jz2440v2为例) 2. 打开jflash(安装好驱动就有) 3.打开百问网提供的配置文件s3c2440.jflash 打开后是这样         的 点target->connect,成功出现 4. 打开u-boot. bin ,打开后是这样的 5. 点

J-link烧写brjtag工具

J-Link用的山寨货,不知道山寨了几代的那种....用的STM32F103C8T6的小板也是山寨了好几代那种,才25块钱...好在能用,J-Link用segger公司的软件能识别,也能找到CPU,板子的脚都有留出来. 闲话少说,干活. 连接硬件,双击打开segger目录下的J-Link.exe,看到打印如下信息: SEGGER J-Link Commander V4.02d ('?' for help) Compiled Mar 12 2009 15:39:38 DLL version V4.