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中。