打印

请教LPC2148的bootcode

[复制链接]
5196|31
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qq98_05|  楼主 | 2007-9-24 18:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有个问题想请教大家,我想写一个LPC2148的bootcode,让它常驻flash,然后通过这个bootcode利用串口下载程序到flash的其他区域,并启动下载的程序。这样以后就不需要flash的烧写工具来烧写程序,也不需要JTAG口,直接通过串口更新程序。不知道这个bootcode能不能实现?

相关帖子

沙发
阿南| | 2007-9-24 19:01 | 只看该作者

我想要问产家的技术支持

如果有支持写flash的代码应该就可以实现

使用特权

评论回复
板凳
xieqin| | 2007-9-25 08:39 | 只看该作者

网上卖的板子,大多都有这样的bootloader

这样的程序很多吧,像vivi,uboot都有类似功能啊

使用特权

评论回复
地板
qq98_05|  楼主 | 2007-9-26 12:56 | 只看该作者

以前我看见有人在MSP430上实现这个功能

应该是只要是flash,flash有办法可以写,就可以实现,主要是中断向量的问题不好解决,我觉得这个功能很重要,特别方便以后代码的更新,怎么就没有看见有人做过呢,我自己试了一下,没有成功。我手上只有LPC2148,高级的ARM都有这种bootcode,我想做的就是在简单的ARM做到。ADS的编译链接手册上也没有讲到这个。有没有哪位高手有思路的,请教了。如果有关于bootloader的资料请给个链接。谢谢了!

使用特权

评论回复
5
dld2| | 2007-9-26 13:17 | 只看该作者

也就是“中断向量”的问题

其他都好办。
要看LCP2148的手册而不是ADS的手册。
我记得中断向量可以REMAP到RAM的。

使用特权

评论回复
6
qq98_05|  楼主 | 2007-9-26 16:26 | 只看该作者

中断向量是可以REMAP到RAM

中断向量是可以REMAP到RAM,可是当我把需要执行的hex文件放在flash的固定位置后,跳转到那个位置去执行,结果发生错误,我的程序没有被运行,现在的问题是,我在flash的固定位置有一个hex的影像,我要怎么才能让那个映像执行呢?

使用特权

评论回复
7
dld2| | 2007-9-26 16:32 | 只看该作者

不应该是HEX文件

BIN文件可以直接跳转过去执行。HEX文件是有格式的。
没做过,但我想应该研究HEX文件的格式,然后按照格式加载程序段到相应的位置。

使用特权

评论回复
8
qq98_05|  楼主 | 2007-9-26 16:46 | 只看该作者

我的是bin文件

我也是用formelf转出来的bin文件,放到flash的固定位置的,ADS说跳转到main前是会把程序段加载到相应位置的,所以我不明白为什么跳转后,为什么程序没有运行

使用特权

评论回复
9
dld2| | 2007-9-26 18:00 | 只看该作者

需要描述得更详细

我觉得你的理解全对,但不知道那一步出了问题。

被下载程序的RO是怎么设置的,是否和放在FLASH中的位置一致。
bootloader是否确认正确执行了。
写入FLASH是否正确,能不能读出来看看。好像要用IAP吧。
先下载一个很简单的例如点灯程序试试。

使用特权

评论回复
10
qq98_05|  楼主 | 2007-9-28 15:33 | 只看该作者

感谢dld2的关注

因为要工作,我进度很慢,等我多实践几次再跟你讨论。我的目的是要做抛弃IDE环境和调试器。用串口下载程序,用串口输出内容来调试。我目前的工作环境就是这样的,只不过是用USB口。因为大多数ASIC都没有IDE和可视化的调试器,建立这样的环境有助于适应各种IC的开发

使用特权

评论回复
11
dld2| | 2007-9-28 15:41 | 只看该作者

讨论一个思路

在调试中,串口可以不仅仅用作输出。
做一个监控模块,接收串口命令,从串口输出执行结果。
例如,可以用来读写内存变量,memory map的寄存器。
我就是这麽干的,很方便。

使用特权

评论回复
12
qq98_05|  楼主 | 2007-10-9 08:35 | 只看该作者

对呢

很多专用的ASIC就是用这种方法进行调试的,暂时我要做的只是用串口输出变量的值,相当于不下断点,而是写一个prtinf把要看的结果输出来。有了通道,能做的事情就很多了,我的bootloader还没有什么头绪。

使用特权

评论回复
13
yamaki| | 2007-10-24 17:24 | 只看该作者

很关注你的进展

我最近也很困惑boot block的内容,很关注你的进展。我觉得这样做以后对boot loader的理解就很深了。有机会想讨论下。

使用特权

评论回复
14
yamaki| | 2007-10-24 18:26 | 只看该作者

还是有些不明白

还是有些不明白。请问你是不是要改写boot block?还有boot loader是放在boot block中还是放在哪里?新手,希望得到指点。

使用特权

评论回复
15
wishcom| | 2007-10-24 21:12 | 只看该作者

使用scatter loading技术可以搞定这个问题

这个问题如果使用分散加载,很容易就解决了。
几个建议:
1. UART(串口)通信没有必要使用中断,查询机可以解决问题。
2. 不存在中断向量表重定位的问题,因为在bootloader中完全没有开中断。至于bootloader为什么完全不用中断——你认为有必要把bootloader做得像OS那么复杂吗?
3. 串口的应用相当众多,就LZ的想法只要你的板子的串口支持两种应用即可:
   —— 简单的shell命令处理     这个应用应该自己实现起来很简单
   —— 文件传输  串口的文件传输可以有很多现成的协议,最广泛的是XMODEM,建议LZ重点关注。
4. 另外,如果了解了分散加载后再研究一下elf loader的话,LZ会觉得这就是一个小case.

具体的解决办法我不想写,太多了。不过如果LZ需要什么资料,我倒是可以尝试为你直接或间接的提供。

使用特权

评论回复
16
yamaki| | 2007-10-25 09:26 | 只看该作者

感谢楼上的wishcom!但您所说的内容我还不太明白。

1.bootloader是写在boot block中还是片内flash的其它地方?
2.bootloader是起到ISP的作用么?
想先搞明白这些基本的问题

使用特权

评论回复
17
lpf336| | 2007-10-25 09:44 | 只看该作者

我的理解

重要的就是bootloader不要用中断

使用特权

评论回复
18
wishcom| | 2007-10-25 10:38 | 只看该作者

我使用的ADS

对于什么是ISP,不懂。。。
至于boot block:
如果你的板子是NAND Flash启动方式,那么NAND Flash的第一个Block就是boot block,而bootloader就是烧在NAND Flash的第一个Block中的代码

使用特权

评论回复
19
yamaki| | 2007-10-25 11:07 | 只看该作者

re:热心的wishcom

貌似不同厂家的Flash编程不一样.我用的是ZLG的EASYARM2200开发板.
1.ISP是在系统编程,别的牌子的ARM芯片不支持ISP么?
2.ZLG的工程师说boot block的内容是出厂就固化在Flash中的,这一部分是无法改变的,只能改变Flash中的用户代码区,这是怎么回事呢?
我看了ARM的启动过程,好像是不同牌子的ARM芯片启动过程略有不同.

使用特权

评论回复
20
yamaki| | 2007-10-25 11:15 | 只看该作者

因为我用的是NXP的LPC2000系列ARM芯片

因为我用的是NXP的LPC2000系列ARM芯片,启动过程中肯定要用到boot block,而且这一过程是用户不可控的.所以我想如果能写boot block的话,也一定要一次成功,否则芯片可能就废了.不过我现在还不知道能不能写boot block,望高人指点!请大家也谈一下别的品牌的ARM芯片也是这样么?

使用特权

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

本版积分规则

4

主题

27

帖子

1

粉丝