翻出多年前的Sitsang板,从TestSuit的实验做起,可惜只有代码,竟然全无了实验手册和文档,不管怎样,第一步得弄清楚如何将裸机程序下载到目标板才行。
ADS的集成开发环境中,主要的是CodeWarrior和AXD,一个是写程序的,一个是调试程序的。AXD中还可以调用一个工具叫做Flash Downloader的,据说可以把程序下载到目标板的FLASH中,但经过查阅ADS手册《AXD and armsd Debuggers Guide》知,使用该工具必须有Multi-ICE工具或者是在RAM中驻留有Angel程序。由于目标板中已经移植了嵌入式linux操作系统,又没有Multi-ICE工具,只好放弃使用ADS来下载程序。
TestSuit中有一种办法是使用TestSuitMaster程序来完成对板子的自动测试,而实际进行测试时报错而无法正常继续,由于手头没有详细资料,也难以排错。另外,这种自动测试的办法好像是不需要手工下载二进制文件的,因此,也没有达到摸清下载程序之法的目的。
经过到互联网搜索,结合实际操作,下载程序到Flash可以如下操作:
在Windows下,设置好超级终端并建立主机与目标板的连接后:
1.启动目标板,看到下面提示信息时,按Ctrl+C进入Redboot:
== Executing boot script in 2.000 seconds - enter ^C to abort
RedBoot>
2.可以输入help命令查看可用的命令,详细说明可以参见Redboot相关手册。
3.查看当前FIS(Flash Image System)中的映像:
RedBoot> fis list
Name FLASH addr Mem addr Length Entry point
RedBoot 0x00000000 0x00100000 0x00040000 0x00000000
RedBoot config 0x03F80000 0x03F80000 0x00040000 0x00000000
FIS directory 0x03FC0000 0x03FC0000 0x00040000 0x00000000
JFFS2 0x00200000 0x00200000 0x02800000 0x00000000
linux 0x00100000 0xA0200000 0x00100000 0x00000000
4.查看Redboot版本信息(包括RAM地址区间!),下载程序时是下载到RAM中的,起始地址必须在RAM地址范围内,否则报错:
RedBoot> version
RedBoot(tm) debug environment - built 22:13:14, Sep 3 2003
Platform: Intel(R) Sitsang Development Platform RedBoot* Debug Monitor ()
Copyright (C) 2000, Red Hat, Inc.
RAM: 0xa0000000-0xa4000000 5.查看FLASH的合法地址空间:将下载到RAM中的程序/映像文件烧写到FLASH中时,要指定在FLASH中的起始地址,这个地址必须在这个合法的地址范围内,否则报错(当然也可不指定起始地址,而自动分配)。在报错信息中可以看到:
Invalid FLASH address: 0x04000000 (Invalid FLASH address)
valid range is 0x00100000-0x04000000 6.下载映像文件到RAM:
RedBoot> load -r -m xmodem -b 0xa2000000
输入以上命令并回车后,右键菜单选择发送文件,弹出对话框,然后选择文件,发送即可。发送成功可看到信息如下:
Raw file loaded
0xa2000000-0xa2000100 xyzModem - CRC mode, 3(SOH)/0(STX)/0(CAN) packets, 6 retries
从此信息还可以计算出映像文件的大小为0x00000100。
7.将下载到RAM中的程序烧写到FLASH中:
RedBoot> fis create -b 0xa2000000 -l 0x00000100 -f 0x03000000 -r 0xa2000000 firstbr
... Erase from 0x03000000-0x03040000: .
... Program from 0xa2000000-0xa2000100 at 0x03000000:
addr:3000000,data:a2000000,size:100.
... Unlock from 0x03fc0000-0x04000000: block: 3fc0000,block_size: 40000,blocks: 80
.
... Erase from 0x03fc0000-0x04000000: .
... Program from 0xa3fb0000-0xa3ff0000 at 0x03fc0000:
addr:3fc0000,data:a3fb0000,size:40000.
... Lock from 0x03fc0000-0x04000000: .
其中,-b指定要写到FLASH中的内容的起始的RAM地址,-l指定映像文件长度,-f指定下载到FLASH中的起始地址,可以省略该选项,-r指定将该映像文件从FLASH中加载到RAM中运行时的起始地址;最后是指定映像文件名。
操作成功后可以再次查看FIS内容,结果如下:
RedBoot> fis list
Name FLASH addr Mem addr Length Entry point
RedBoot 0x00000000 0x00100000 0x00040000 0x00000000
RedBoot config 0x03F80000 0x03F80000 0x00040000 0x00000000
FIS directory 0x03FC0000 0x03FC0000 0x00040000 0x00000000
JFFS2 0x00200000 0x00200000 0x02800000 0x00000000
linux 0x00100000 0xA0200000 0x00100000 0x00000000
firstbr 0x03000000 0xA2000000 0x00040000 0x00000000
至此,程序已经固化到FLASH中,如何运行呢?仍然在Redboot下,可以如下运行:
RedBoot> fis load firstbr
RedBoot> go 0xa2000000
第一步是将映像firstbr从FLASH加载到RAM,由于加载到RAM后在RAM中的起始地址为0xa2000000,因此使用命令go 即可运行该映像文件。
可惜,这样操作之后就卡住了,目标板上也没有任何运行反应。
事实上,在没有Redboot的情况下,是可以使用FLASH烧写工具如jflashmm(linux下的免费工具)来通过JTAG线将映像文件写入FLASH的,可惜手头没有与开发板配套的工具。明天打算使用PXA270平台的linux下的jflashmm工具试一下。
参考资料:
1.
Redboot命令使用入门2.
3.
4.RedBoot User's Guide
阅读(2633) | 评论(1) | 转发(0) |