打印
[LPC]

1778在线升级,关于bin文件写入flash问题

[复制链接]
2049|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我在网上看到大多数的lpc的芯片在线升级都是APP程序编译生成bin文件只有一个,然后再将bin文件从APP程序的首地址写入跳转就ok了。  我现在做的情况有点特殊,我的引导程序存放地址为0x0000-0x3000,我的APP程序存放地址为0x4000-0xA000和0x48000-0x80000。因为地址0xA000-0x48000被用来存放其他数据(配置文件),所以我的APP程序就必须被分割成了两部分存放,所以生成的bin文件也变成了两个(见图片1)。现在我根据分散加载文件(如图片2),将第一个bin文件从地址0x4000写入写完后,将第二个文件从地址0x48000写入,两个文件都写入完后,再从引导程序跳转到APP程序。已经试验确认跳转的程序是ok的(通过将APP程序用keil仿真试验,发现能成功跳转到APP程序),但是,通过上述写到的运用引导程序写入bin文件后,并不能跳转。怀疑这种两个bin文件的写入不正确,求大神解答。

图片1.png (8.34 KB )

图片1.png

图片2.png (32.16 KB )

图片2.png

相关帖子

沙发
outmanlol|  楼主 | 2017-2-16 10:53 | 只看该作者
自己顶一个,求大神解惑。

使用特权

评论回复
板凳
aozima| | 2017-2-16 11:54 | 只看该作者
再用J-FLASH之类的读回来做对比。

使用特权

评论回复
地板
outmanlol|  楼主 | 2017-2-16 14:23 | 只看该作者
aozima 发表于 2017-2-16 11:54
再用J-FLASH之类的读回来做对比。

我用J-LINK回读后做了对比计算,我发现我用keil生成的文件的字节总数要比我从flash读出来的APP程序的字节总数要大,这就有点懵了。我仔细对比发现对于APP程序存放的第一段地址的内容,发现bin文件写进去的数据与用keil仿真APP程序写进该部分地址的数据一样,只是bin文件数据最后会额外多几百个字节的数据。我现在怀疑是不是在线升级根本就不能把APP程序存放在不连续的flash空间里。但一直没查到相关的资料。不知到您有没有与这相关的资料

使用特权

评论回复
5
yjmwxwx| | 2017-2-16 15:04 | 只看该作者
我是菜鸟, 一个APP是机械分割成两个部分么? 那第一部分怎么越过中间部分跳到第二个部分?

我语文不好。。 或者是说调度程序连地一个部分都进不去么? 不是有JLINK么,设个断点看看程序飞到哪去了,这个应该很容易调试吧

使用特权

评论回复
6
outmanlol|  楼主 | 2017-2-16 15:19 | 只看该作者
yjmwxwx 发表于 2017-2-16 15:04
我是菜鸟, 一个APP是机械分割成两个部分么? 那第一部分怎么越过中间部分跳到第二个部分?

我语文不好。 ...

我现在就是觉得是不是根本就不能将APP程序分为两个部分。程序并没有跑飞,它一直在引导程序,根本进不了APP程序。我对比了下,keil生成的bin文件比从flash读出的能正常跳转的APP程序字节要多(能正常跳转的APP程序是我用keil仿真下进flash的),所以我猜测bin文件里把一些两个部分跳转指示的东西强行被转换当成成数据写进flash了。   我之所以之前一直觉得可以是因为我用keil把APP程序仿真下进flash后,观察memery,发现APP程序在扇区中也不是连续存放的,也是被分为了两部分(0x4000-0xA000和0x48000-0x80000)存放。

使用特权

评论回复
7
outmanlol|  楼主 | 2017-2-16 20:08 | 只看该作者
谢谢大家的帮助解惑,现已经证实,在线升级时,APP程序不能放在不连续的地址空间。我现在把上文提到的特殊文件移动了位置,给APP程序腾出了空间,经测试ok。 若有什么问题欢迎相互探讨。

使用特权

评论回复
8
yuxiaoxu8728| | 2017-2-17 10:27 | 只看该作者
高手啊

使用特权

评论回复
9
outmanlol|  楼主 | 2017-2-17 13:37 | 只看该作者

菜鸟一个,慢慢摸索的。

使用特权

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

本版积分规则

1

主题

16

帖子

0

粉丝