首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[转帖]ARM菜鸟说说近期的"成就",关于片内调试和片外启动

[转帖]ARM菜鸟说说近期的"成就",关于片内调试和片外启动

在本论坛问过两次,都没人理,可能是太简单了,但是对于我这样的菜鸟来说还是很难的,今天终于搞出来了,也给大家说说,希望能帮到需要的人。

板子的硬件调试通过后,用了一周的时间才把一个简单的LED测试程序分别在片内RAM和片外flash调试通过,中间那个叫痛苦啊,首先记住一个教训:以后开发一种新的CPU,一定要在原理设计阶段就开始考虑程序设计,考虑玩玩开发板,熟悉新的开发软件,不至于到硬件调试完后匆忙上阵,前面对CPU的认识又忘记的差不多了。另外软件不一定用最新的,这次用IAR5.20,结果跟4.X有很多不一样的地方,与别人交流都很困难。这次吃了大亏,年前这个程序不知道能不能完成,这可关系俺的饭碗啊。
ARM:AT91SAM9260 开发环境:IAR5.20+H-JTAG(H-Flash)+wiggler
主程序就是一个简单的点亮LED测试程序就不说了,关键是IAR的设置方面:

首先是在片内RAM调试,关键在于IAR5.20的链接配置文件.icf文件(对应IAR4.X的XCL文件),开始时根据ATMEL的库文件Sdram.icf修改了一个icf文件,怎么都不行,IAR5.20的icf格式又与4.X的XCL格式有很大的不同,没办法就死啃IAR的帮助文件,EWARM_DevelopmentGuide.ENU.pdf,这个文档的73页有一个ICF的范例,A Simple Example of A Configuration File,自己照葫芦画瓢写了一个简单的ICF文件,写多了,逐渐发现其中的猫腻了,这个文件无非包括三个内容:定义存储区域;初始化堆栈;放置代码和数据。定义存储区域就是声明你的硬件系统上的ROM和RAM地址范围,初始化堆栈就是定义堆栈大小并将其放到一个特定区域,放置代码和数据一般就是将readonly就是代码放置到ROM或FLASH,将readwrite就是数据变量啥的放置到RAM,并且将中断向量放置到OM或FLASH的起始位置。这个文件很熟了以后,万里长征就走了一大步了,片内RAM调试的话,就直接在ICF文件中将片内ROM的地址和片内RAM的地址都指向片内RAM的地址就可以了。
就是这样子:9260的片内RAM起始地址为0x200000,片内ROM实际地址为0x100000,再此将其指向片内RAM。
define symbol __ICFEDIT_region_ROM_start__ = 0x200000;
define symbol __ICFEDIT_region_ROM_end__ = 0x207FFF;
define symbol __ICFEDIT_region_RAM_start__ = 0x200000;
define symbol __ICFEDIT_region_RAM_end__ = 0x200FFF;

然后就是片外norflash启动,首先直接将BMS引脚接地,H-JTAG和banyan都是找不到芯片的,正确的做法是,将BMS接高,片内启动,将IAR生成的Binary文件烧进flash然后在BMS接地,程序从norflash启动。说到烧flash自然想起H-JTAG的小弟H-FLASH,可是这个H-FLASH不是那么好用的,用过的都知道,里面要用到一个初始化脚本,开始我不懂这个东东是干啥用的,随便下载了一个脚本就用上了,其实这个初始化脚本与前面说到的icf文件一样都是与自己的硬件系统息息相关的,这个初始化脚本重要的有两处:制定合法的RAM和片外flash地址和初始化片外存储器。为什么要合法的RAM地址,因为H-JTAG的下载机制是先将一个程序A下载到RAM,然后这个程序A再将你真正要下载的程序B下载到flash。所以要一个合法的RAM地址,片内RAM足够了,不知道为啥我的片外RAM就不行(后面也初始化了)?flash地址一定是真正的地址,比如说0x10000000。另外就是初始化你的片外flash,不初始化,照样找不到。同样此时,在IAR的icf文件中,你要声明你的片外flash地址。并将中断向量存放到片外flasha起始地址。至于MAC文件,这里只要的作用好像与H-flash的初始化脚本重复了,都是初始化片外存储器的作用,好像不要也可以,具体还没有试。这样就可以在IAR中编译生成Binary文件然后在BMS接高的情况下,下载到片外flash中,然后断电,将BMS接地,程序将从norflash启动运行。

接下来就是试验Remap到RAM,好像有点难,一直没能成功,先不搞了,先把我的应用程序写出来,马上过年了,我可不想年前就失业。

前面的过程,我自己搞了好久,一度很郁闷,但最后还是走出来了,也请教了很多朋友,有公司的同事SYD,ouravr的bozai,小马哈等网友,向他们表示感谢。也希望陷在ARM魅力下的朋友能够越学越好。

由于是初学ARM,以上肯定有错误遗漏之处。还请批评指教,谢谢!

QQ:277565600
MSN:ch2003_23@hotmail.com

返回列表