打印
[ZLG-ARM]

请教:LPC出厂时固化的bootloader

[复制链接]
3758|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lghmail|  楼主 | 2007-9-30 14:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用LPC2200开发板JTAG调试时,
1.为什么第一条语句是用户程序(启动代码)的向量表(startup.s中的),为什么第一条语句不是LPC出厂时固化的bootloader的向量表呢?
2.既然reset时从0地址开始执行,那为什么还要设置入口地址呢? 而且刚进入调试时,为什么PC是程序的入口地址(0x80000000),刚启动时不是应该从0地址开始执行吗?虽然已经进行了remap,但对CPU来说还是只认从0地址开始执行啊,即PC应该是0地址,只是后来被remap到0x80000000啊.

 望指教,thanks

相关帖子

沙发
lammy| | 2007-9-30 21:06 | 只看该作者

bootloader理解有错?

首先这个bootloader一个这样的功能,就是开启串口下载,它是怎么检测的呢,是通过检测P0.14口的状态,如果为低电平,则运行ISP的程序,它是BOOTLOADER的一部分,这段程序是引导串口接收数据并放进片内FLASH中;如果P0.14口的状态不为0,那么它就检测你是运行片内FLASH的程序还是外部FLASH的;先说说片外的,因为我们下载片外FLASH时是把BIN文件烧进去的,所有的代码都是在一起的,这是什么意思呢,最开始是RO段的程序,紧接着是RW段的程序,但是执行时为了提高执行速度,把RO段放ROM区,RW段放RAM区,这动作是怎么实现的呢,其实就是在进行运行复位程序前就已经重印设了,具体是怎么实现的呢,其实就是一段程序搬运程序,由硬件实现,呵呵。如果是片内的,个人认为应该是一样的过程,只是速度快些而已。

无论怎么样,复位,PC肯定指向0x00000000,但是它从这个地址取出了一个跳转指令,跳到了bootloader区,为什么这么说呢,明明这一区域放的是中断向量表吗?呵呵,不错,但是这个向量表它源于bootloader区,所以相当于执行它的bootloader一样拉,接下来就要检测是否要下载,如果不下载就执行用户程序。

具体的重映射过程,上电复位后,由于ARM里面的FLASH和RAM它是没有地址编码的,所以要经过一次重映射,FLASH映射到0x80000000开始,RAM映射到0x40000000,系统根据BOOT[1:0]这两个脚自动把代码映射,也就是这段时间该怎么映射就怎么映射。不过很短,因为是由硬件实现的。

以上纯属个人理解,还请周公指点其中的错误。

使用特权

评论回复
板凳
zhuchina| | 2007-10-3 08:48 | 只看该作者

如何在程序运行时跳转到bootloader?

很菜的问题:
问题1:如何在程序运行时跳转到bootloader?是不是 跳转到0x00000000就可以了?

程序运行时读p0.14,有1秒时间以上为低时,进入下载程序状态,这样就不用重新开电源就可以下载程序了,只要把p0.14短路起来

问题2:lpc的内部看门狗复位以后程序是不是从bootloader程序开始运行?

使用特权

评论回复
地板
computer00| | 2007-10-3 09:47 | 只看该作者

回楼主:

芯片启动时,是从0地址开始,但是这时引导程序被映射到了地址0,所以这时启动的就是引导程序。

引导程序检查ISP引脚的状态,根据不同的状态,将不同的内容映射到地址0,例如
0x80000000或者0x40000000,这个要看你的配置了。从新映射后,就跳转到0再运行,
这时候实际上运行的是0x80000000或者0x40000000的程序了。设置RW和RO的目的是
为了告诉编译器把生成的代码放在存储器的什么地方。代码实际是存在0x80000000或者0x40000000那里的,
只是通过映射的方式,将前面的中断向量表部分映射到地址0去了。



回3楼:要想ISP,并不需要拔掉电源,直接插上ISP引脚,按复位就可以了。

使用特权

评论回复
5
zhuchina| | 2007-10-3 18:53 | 只看该作者

呵呵,我的系统没有reset键

呵呵,我的系统没有reset键,所以每次都要开关电才能isp啊,有没有什么好办法?程序如何跳转到0x00000000?

使用特权

评论回复
6
computer00| | 2007-10-3 20:52 | 只看该作者

看门狗应该可以。

使用特权

评论回复
7
lammy| | 2007-10-3 21:04 | 只看该作者

看门狗怎么可以进入ISP?

看门狗怎么可以进入ISP呢?
我认为先插上ISP,然后上电复位从理论上是可以实现的下载的

使用特权

评论回复
8
computer00| | 2007-10-3 21:24 | 只看该作者

让看门狗动作啊,这样就可以复位了。

使用特权

评论回复
9
lammy| | 2007-10-4 16:30 | 只看该作者

但是不能实现ISP啊?

看门狗是可以复位,但这个复位是不能实现ISP下载的哈。

使用特权

评论回复
10
computer00| | 2007-10-4 16:37 | 只看该作者

不会吧...那只好断电源了...反正也不是常用嘛。

使用特权

评论回复
11
lammy| | 2007-10-5 09:32 | 只看该作者

呵呵,没有复位键,这个有问题?

呵呵,没有复位键,这个有问题?

使用特权

评论回复
12
我学MCU| | 2007-10-8 21:55 | 只看该作者

没有设置复位按钮,调试就郁闷了

启动看门狗之后不喂狗就会导致系统复位,系统就从0x00地址开始运行,也就可以ISP下载程序了.你也可以选择实用IAP下载方式

使用特权

评论回复
13
lammy| | 2007-10-9 06:21 | 只看该作者

不可以的

从数据手册上的流程图可以看出,是不可以的,因为你的代码已经在那,而看门狗复位会检查代码是否有用,所以是不可能进行ISP的。
看看流程图:

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

2

帖子

1

粉丝