第一章 裸机_ADS和使用J-Link下载u-boot

1.ADS(ARM Development Suit)是ARM公司推出的嵌入式微控制器集成开发工具。ADS集成开发环境由命令行开发工具、ARM运行时库、GUI开发环境(Code Warrior和AXD)组成。初学者一般使用的都是Code Warrior IDE集成开发环境和AXD调试器,这两个软件已经可以满足开发需求。

2.Code Warrior for ARM集成了ARM汇编器、ARM C/C++编译器和ARM连接器等,包含工程管理、代码生成、关键词高亮显示等功能,可以满足读者的嵌入式开发需求。

3.AXD调试器的启动

(1)找到AXD Debugger调试器的图标,双击图标打开。

(2)在Code Warrior for ARM里面单击“Debug”按钮即可启动AXD调试器。

推荐使用第一种办法,因为使用第二种办法打开的时候有时候会出现错误。

4.Code Warrior for ARM新建一个工程

(1)打开Code Warrior for ARM,单击file—new,选择ARM Executable Image,输入工程名,然后选择保存路径即可。

(2)单击位于file选项下方的图标“New Text File”,在新建的文件中输入源程序,保存即可,在保存时c语言程序保存为.c文件,汇编语言程序保存为.s文件。

(3)在工程窗口中单击鼠标右键,选择“Add Files”即可弹出“Select files to add”,选择相应的源文件,单击“打开”按钮即可。

(4)工程框上的几个按钮:

DebugRel Settings:设置工程的属性,如设置链接地址、输出文件的格式、编译选项等。

Make:编译、链接。

Debug:启动AXD调试器。

5.工程的调试

(1)工程的调试依赖于AXD完成。工程编译链接后会产生一个.axf格式的文件,该文件可以装在到AXD里面进行调试。启动AXD之后,选择“File”菜单下的“Load Image”,选择相应的映像文件即可。

(2)调试程序时常用的按钮

Go:全速运行。

Step In:单步执行,当遇到函数调用的时候,会进入被调函数中执行。

Step:单步执行,并不进入函数,只是将被调函数当做一条语句执行。

Step Out:执行完当前被调函数后,停止在被调函数的下一条语句。

Run to Cursor:运行到光标处。

6.使用J-Link下载u-boot到nor flash

1)开发板设置为nor flash启动

2)连好线后启动J-Flash ARM,进行如下操作

(1)file->open project,打开s3c2440.jflash(这个文件可以从网上下载到),即便下载不到也没有关系,本文最后会告诉你具体如何配置

(2)Target->Connect,必须设为nor flash启动才能检测到flash

(3)File->Open,打开要烧写的二进制文件u-boot.bin,并在弹出的start address对话框里面输入0

(4)Target->Auto,即可自动烧写

(5)烧写完成后,关电,取下j-link,重新启动即可进入u-boot界面

(6)在u-boot界面下我们可以配合DNW将u-boot下载到nand flash

下面我们来说一下具体配置:

Options->Project setting  

 

General选项配置如下:

 

 Target Interface选项配置如下:





 

 CPU选项配置如下:

flash选项配置如下:

如果照着上面的办法配置之后仍然不能正确的下载u-boot到Flash中,那么可以使用配置文件来完成。

 7.使用J-Link下载u-boot到nand flash

总体上有两种方法:

(1)使用nor flash来完成,在nor flash中运行u-boot,然后再下载

首先将u-boot烧写到nor flash中,然后设置开发板从NOR Flash启动,这时候系统进入U-boot命令行模式,这时候打开J-Link commander,输入命令:r 看JLink是否能识别开发板的信息(也就是判断JLink是否连接正常)。

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

A.speed 12000               //设置TCK为12M,下载程序时会很快    

B.loadbin d:\u-boot.bin 0x30000000 

注意:0x30000000是你想要下载u-boot.bin到开发板的内存地址,内存地址根据不同的开发板设定不同,因为本文中使用的是FL2440,片上系统是S3C2440,内存挂载的地址区域是0x30000000~0x33ffffff,我们只需要把u-boot.bin下载到这片区域即可。

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

A.nand erase 0 40000              // 擦除从0地址开始的大小为0x40000的Nnad Flash扇区,0x40000是待写入的U-boot.bin的大致长度,长度必须为NAND Flash页大小的整数倍,通常会需要比u-boot.bin实际长度长。   

B.nand write 30000000 0 40000   // 把前面下载到0x30000000的u-boot.bin烧写到Nand去  然后我们再设置开发板从NAND Flash启动即可。

(2)直接通过JLink,首先在SDRAM中运行u-boot,再完成下载

首先需要一个初始化内存SDRAM的程序,这个程序完成的功能也就是配置好SDRAM的寄存器,使它能正常工作,2440的内存初始化程序下载地址:“2440init.bin”。(很短的程序,初始化SDRAM的寄存器,使得SDRAM能正常工作)

你还需要准备一个特殊的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盘根目录下。

A.loadbin d:\2440init.bin 0        

B.setpc 0   

C.g  

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

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

A.h

B.loadbin e:\u-boot_SDRAM.bin 0x33f80000   

C.setpc 0x33f80000   

D.g  

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

A.nand erase 0 40000              // 擦除从0地址开始的大小为0x40000的Nnad Flash扇区,0x40000是待写入的U-boot.bin的大致长度,长度必须为NAND Flash页大小的整数倍,通常会需要比u-boot.bin实际长度长。   

B.nand write 30000000 0 40000   // 把前面下载到0x30000000的u-boot.bin烧写到Nand去  根据上面的步骤就可以完成u-boot到NAND Flash的烧写了,实际上是利用一个SDRAM中运行的u-boot去烧写u-boot.bin到NAND Flash中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值