请教LPC2148的bootcode

[复制链接]
6431|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的资料请给个链接。谢谢了!
dld2 发表于 2007-9-26 13:17 | 显示全部楼层

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

其他都好办。<br />要看LCP2148的手册而不是ADS的手册。<br />我记得中断向量可以REMAP到RAM的。
 楼主| qq98_05 发表于 2007-9-26 16:26 | 显示全部楼层

中断向量是可以REMAP到RAM

中断向量是可以REMAP到RAM,可是当我把需要执行的hex文件放在flash的固定位置后,跳转到那个位置去执行,结果发生错误,我的程序没有被运行,现在的问题是,我在flash的固定位置有一个hex的影像,我要怎么才能让那个映像执行呢?
dld2 发表于 2007-9-26 16:32 | 显示全部楼层

不应该是HEX文件

BIN文件可以直接跳转过去执行。HEX文件是有格式的。<br />没做过,但我想应该研究HEX文件的格式,然后按照格式加载程序段到相应的位置。
 楼主| qq98_05 发表于 2007-9-26 16:46 | 显示全部楼层

我的是bin文件

我也是用formelf转出来的bin文件,放到flash的固定位置的,ADS说跳转到main前是会把程序段加载到相应位置的,所以我不明白为什么跳转后,为什么程序没有运行
dld2 发表于 2007-9-26 18:00 | 显示全部楼层

需要描述得更详细

我觉得你的理解全对,但不知道那一步出了问题。<br /><br />被下载程序的RO是怎么设置的,是否和放在FLASH中的位置一致。<br />bootloader是否确认正确执行了。<br />写入FLASH是否正确,能不能读出来看看。好像要用IAP吧。<br />先下载一个很简单的例如点灯程序试试。<br />
 楼主| qq98_05 发表于 2007-9-28 15:33 | 显示全部楼层

感谢dld2的关注

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

讨论一个思路

在调试中,串口可以不仅仅用作输出。<br />做一个监控模块,接收串口命令,从串口输出执行结果。<br />例如,可以用来读写内存变量,memory&nbsp;map的寄存器。<br />我就是这麽干的,很方便。
 楼主| qq98_05 发表于 2007-10-9 08:35 | 显示全部楼层

对呢

很多专用的ASIC就是用这种方法进行调试的,暂时我要做的只是用串口输出变量的值,相当于不下断点,而是写一个prtinf把要看的结果输出来。有了通道,能做的事情就很多了,我的bootloader还没有什么头绪。
yamaki 发表于 2007-10-24 17:24 | 显示全部楼层

很关注你的进展

我最近也很困惑boot&nbsp;block的内容,很关注你的进展。我觉得这样做以后对boot&nbsp;loader的理解就很深了。有机会想讨论下。
yamaki 发表于 2007-10-24 18:26 | 显示全部楼层

还是有些不明白

还是有些不明白。请问你是不是要改写boot&nbsp;block?还有boot&nbsp;loader是放在boot&nbsp;block中还是放在哪里?新手,希望得到指点。
wishcom 发表于 2007-10-24 21:12 | 显示全部楼层

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

这个问题如果使用分散加载,很容易就解决了。<br />几个建议:<br />1.&nbsp;UART(串口)通信没有必要使用中断,查询机可以解决问题。<br />2.&nbsp;不存在中断向量表重定位的问题,因为在bootloader中完全没有开中断。至于bootloader为什么完全不用中断——你认为有必要把bootloader做得像OS那么复杂吗?<br />3.&nbsp;串口的应用相当众多,就LZ的想法只要你的板子的串口支持两种应用即可:<br />&nbsp;&nbsp;&nbsp;——&nbsp;简单的shell命令处理&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个应用应该自己实现起来很简单<br />&nbsp;&nbsp;&nbsp;——&nbsp;文件传输&nbsp;&nbsp;串口的文件传输可以有很多现成的协议,最广泛的是XMODEM,建议LZ重点关注。<br />4.&nbsp;另外,如果了解了分散加载后再研究一下elf&nbsp;loader的话,LZ会觉得这就是一个小case.<br /><br />具体的解决办法我不想写,太多了。不过如果LZ需要什么资料,我倒是可以尝试为你直接或间接的提供。
yamaki 发表于 2007-10-25 09:26 | 显示全部楼层

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

1.bootloader是写在boot&nbsp;block中还是片内flash的其它地方?<br />2.bootloader是起到ISP的作用么?<br />想先搞明白这些基本的问题
lpf336 发表于 2007-10-25 09:44 | 显示全部楼层

我的理解

重要的就是bootloader不要用中断
wishcom 发表于 2007-10-25 10:38 | 显示全部楼层

我使用的ADS

对于什么是ISP,不懂。。。<br />至于boot&nbsp;block:<br />如果你的板子是NAND&nbsp;Flash启动方式,那么NAND&nbsp;Flash的第一个Block就是boot&nbsp;block,而bootloader就是烧在NAND&nbsp;Flash的第一个Block中的代码
yamaki 发表于 2007-10-25 11:07 | 显示全部楼层

re:热心的wishcom

貌似不同厂家的Flash编程不一样.我用的是ZLG的EASYARM2200开发板.<br />1.ISP是在系统编程,别的牌子的ARM芯片不支持ISP么?<br />2.ZLG的工程师说boot&nbsp;block的内容是出厂就固化在Flash中的,这一部分是无法改变的,只能改变Flash中的用户代码区,这是怎么回事呢?<br />我看了ARM的启动过程,好像是不同牌子的ARM芯片启动过程略有不同.<br />
yamaki 发表于 2007-10-25 11:15 | 显示全部楼层

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

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

本版积分规则

4

主题

27

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部
0