打印

LPC1778/1788如何进行IAP在线升级

[复制链接]
5304|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hufengweixx|  楼主 | 2016-10-28 19:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
z00| | 2016-10-28 19:53 | 只看该作者
以前做过1768的IAP

使用特权

评论回复
板凳
hufengweixx|  楼主 | 2016-10-31 13:09 | 只看该作者
z00 发表于 2016-10-28 19:53
以前做过1768的IAP

大神有具体的方法么?可以试着表达一下么?   是不是可以用bootloader 和 app进行升级跳转?

使用特权

评论回复
地板
伯乐beyond| | 2016-11-3 13:57 | 只看该作者
弄过nxp的几款单片机,先用上位机把升级程序通过串口发到单片机外接的flash,然后调用iap程序(通过修改加载文件放到单片机一个特定

扇区),调用iap库函数选扇区,擦除,写数据。。。有可能要修改flash起始32个字节的有效程序校验码,这个过程要把总中断关闭

使用特权

评论回复
5
hufengweixx|  楼主 | 2016-11-6 13:34 | 只看该作者
伯乐beyond 发表于 2016-11-3 13:57
弄过nxp的几款单片机,先用上位机把升级程序通过串口发到单片机外接的flash,然后调用iap程序(通过修改加 ...

现在已经可以正常IAP下载了,但是在进行发现在APP钟使用定时器时,出现app程序无法运行的情况,百度一下说是应该在跳转程序之前关断总中断,在新app程序前加入开启总中断,是这样么?

使用特权

评论回复
6
sjpu2014| | 2016-11-10 21:23 | 只看该作者
wp我的是在app程序中利用优盘直接升级

使用特权

评论回复
7
hufengweixx|  楼主 | 2016-11-29 14:34 | 只看该作者
不好意思,好久没登了,已经解决了,有谁需要问的请联系我

使用特权

评论回复
8
hexiaofeng171| | 2016-12-13 14:10 | 只看该作者
怎么没有看到资料

使用特权

评论回复
9
hufengweixx|  楼主 | 2016-12-23 13:14 | 只看该作者

有什么需要的么?

使用特权

评论回复
10
hufengweixx|  楼主 | 2016-12-23 13:16 | 只看该作者
给大家分享下例程,有需要的可以联系下

LPC1114-IAP-在线升级.pdf

295.34 KB

操作步骤

技术笔记_LPC1788_LPC1788在线升级.rar

558.89 KB

demo

使用特权

评论回复
评论
qq583678156 2017-3-16 12:00 回复TA
谢谢分享 
11
outmanlol| | 2016-12-29 13:55 | 只看该作者
有个问题请教下,我最近在做1778的在线远程升级,我的APP程序只是在已进入主函数后,增加了一句“SCB->VTOR = 0x4000;”0x4000是我APP程序的起始地址,当我把APP程序生成的hex文件用j-link下进去后,板子就被烧了,再也下不进程序了。我这样做的目的是想尽可能的不改变系统级别文件。(我看见您的例程里是在BootLoader里重新映射的中端向量表,并在APP程序的系统文件中把相应的语句屏蔽了)按理说我这样做也不至于把板子烧了,现在找不到原因。  之所以我认定是APP程序的原因是,我把引导程序下进去,板子并不会被烧,但一旦把APP程序下进去后,就再也下不了程序了。

使用特权

评论回复
12
hufengweixx|  楼主 | 2017-1-2 18:06 | 只看该作者
本帖最后由 hufengweixx 于 2017-1-2 18:10 编辑
outmanlol 发表于 2016-12-29 13:55
有个问题请教下,我最近在做1778的在线远程升级,我的APP程序只是在已进入主函数后,增加了一句“SCB->VTOR ...

第一,板子应该不是烧掉的,是只是无法下载,可以先进行ISP擦除,然后再烧写(ISP引脚位拉低,然后采用软件擦除,比如keil);
第二,关于中断映射 “SCB->VTOR = 0x4000” 是可以采用的,我的是“ SCB->VTOR=0x1000&0x1fffff80;”应该和这个无关;
第三,你的下载方式说用jlink下载hex文件,想问一下,你生成hex文件前,是否已经将“option”中的起始地址修改至0x4000,不然下载后程序起始位置默认在0x000,然后你程序跑在“SCB->VTOR = 0x4000”,建议你看一下。
另外,IAP在线升级下载程序可以在开机启动时进行,具体和我例程的说明书一样,或者在app程序中载有跳转指令,而并不是都需人为的烧写两个程序。我理解你的想法或许不是很深入,有问题继续探讨。。。。

使用特权

评论回复
13
outmanlol| | 2017-1-4 13:41 | 只看该作者
hufengweixx 发表于 2017-1-2 18:06
第一,板子应该不是烧掉的,是只是无法下载,可以先进行ISP擦除,然后再烧写(ISP引脚位拉低,然后采用软 ...

感谢楼主的解惑,现在问题已解决,原来是芯片启动文件里自带的加密代码,我在Asm里定义了 NO_CRP后,就ok了。

使用特权

评论回复
14
hufengweixx|  楼主 | 2017-1-7 08:09 | 只看该作者
本帖最后由 hufengweixx 于 2017-1-7 08:10 编辑
outmanlol 发表于 2017-1-4 13:41
感谢楼主的解惑,现在问题已解决,原来是芯片启动文件里自带的加密代码,我在Asm里定义了 NO_CRP后,就ok ...

那就好,我应该也遇到过这个问题,那加密程序在0-1000内有一处给加密的地址,在bin文件生成时会出现问题的,只要将其注释掉就可以,你的下载方式是什么?平时如何处理在线升级的,可共享下你的方案。。。给大家学习下

使用特权

评论回复
15
outmanlol| | 2017-1-11 16:29 | 只看该作者
hufengweixx 发表于 2017-1-7 08:09
那就好,我应该也遇到过这个问题,那加密程序在0-1000内有一处给加密的地址,在bin文件生成时会出现问题的 ...

我的下载方式是SPI半双工方式,由另外一个模块传给我,这种半双工的方式觉得很坑,不过项目都定了,因为另外那个模块SPI只支持半双工,就只能将就着用。目前还没完全弄好,一直断断续续的在做,弄好了到时候共享给大家参考下。

使用特权

评论回复
16
outmanlol| | 2017-1-13 17:24 | 只看该作者
我是用的LPC 1778的芯片,采用的是SPI半双工的方式传输。由于APP程序较大就只分享下引导程序。做IAP在线升级,APP程序只需要增加如下几点:1、在Target 设置中 IROM 中设置好APP程序的起始地址和所需占用FLASH空间大小。2.Linker中 在Use Memory Layout from Target Dialog 前打勾。(步骤1.2就将boot loader文件做好了(自动生成))。3.在ASM中的Define  中 定义 NO_CRP(这是用来防止芯片被锁的,想具体了解可以百度NO_CRP)  4 .屏蔽system_LPC177x.c 系统文件中的  SCB->VTOR  = 0x00000000 & 0x3FFFFF80;(这句是将中断向量表映射到地址0x00,由于我是在引导程序中将中断向量表映射到了APP程序首地址,故APP程序的系统文件的这句必须屏蔽掉)。5.让keil 生成BIN文件。(在User中的After Build/Rebuild 中的RUN#1 中写入路径,具体可以百度keil 如何生成BIN文件),要是不嫌解析HEX文件麻烦,也可以不做步骤5。          引导程序跳转到APP程序的关键为: 1中断向量表的映射。  2 程序的跳转  。 具体可以参考我写的引导程序。                      以上就是我关于LPC  1778IAP 在线升级的个人经验,仅供参考。

使用特权

评论回复
17
outmanlol| | 2017-1-13 17:26 | 只看该作者
引导程序例程

使用特权

评论回复
18
outmanlol| | 2017-2-7 16:46 | 只看该作者
hufengweixx 发表于 2017-1-7 08:09
那就好,我应该也遇到过这个问题,那加密程序在0-1000内有一处给加密的地址,在bin文件生成时会出现问题的 ...

您好,有个问题想请教下关于nxp1778 在线升级的,用keil会生成两个bin文件,将这两个bin文件写入flash的地址,是有什么样的要求吗?我现在是将第一个bin文件写入APP程序的起始地址,第二个bin文件紧接着第一个bin文件写入flash。APP程序运行错。已确认程序能正常跳转,并且写入flash的数据没有问题。不知道是不是两个bin文件的写入有什么需要注意的东西?

使用特权

评论回复
19
hufengweixx|  楼主 | 2017-2-8 08:30 | 只看该作者
outmanlol 发表于 2017-2-7 16:46
您好,有个问题想请教下关于nxp1778 在线升级的,用keil会生成两个bin文件,将这两个bin文件写入flash的 ...

注意一下,app程序的起始地址的配置以及 app中是否使用了SCB->VTOR来跳转到对应app地址

使用特权

评论回复
20
outmanlol| | 2017-2-8 11:49 | 只看该作者
hufengweixx 发表于 2017-2-8 08:30
注意一下,app程序的起始地址的配置以及 app中是否使用了SCB->VTOR来跳转到对应app地址 ...

程序跳转是没有问题的,因为我把APP程序用keil仿真,发现程序确实能从引导程序跳转至APP程序,且APP程序能正常运行。关于APP程序生成的两个BIN文件,在用引导程序写入flash时,我是先把第一个bin文件写入APP程序的起始地址0x4000,然后再接着写第二个bin文件。这样的方式写入两个bin文件是不是不对啊?我现在就是怀疑这种方式是不是哪有问题。

使用特权

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

本版积分规则

6

主题

219

帖子

4

粉丝