OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4201|回复: 5

串口IAP无法COPY APP FLASH,总是显示Illegal FLASH APP!!!

[复制链接]

13

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2017-8-11
在线时间
94 小时
发表于 2018-2-26 11:23:25 | 显示全部楼层 |阅读模式
1金钱
新手,F767,一开始用官方例程都OK。后来自己想实现在串口接收完APP,再COPY到FLASH后,运行APP,而且要复位后还是自动运行此APP。

所以自己将中断向量偏移改为FLASH基址,又将IROM1从0X8010000改为0X8000000,然后传过去 APP,然后COPY,然后黑屏。。。
自己感觉不对,然后赶紧断电,又重新下的程序,想把之前的FLASH盖掉,所以下的以太网程序,较大。
现在又下的官方例程,BOOTLOADER和APP都是官方的,问题来了,现在BOOTLOADER下完,传过去APP,无论如何也无法COPY到FLASH内,总是显示Illegal FLASH APP!
现在保证都是官方的例程,而且BIN生成的也没有错误,为何会出现这样的问题?怎么解决?
能不能实现自己当初的那个想法,如何实现?
请大神赐教!!!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2017-8-11
在线时间
94 小时
 楼主| 发表于 2018-2-26 14:28:31 | 显示全部楼层
又试了几遍,发现了规律:只有当串口一次性发送完BIN文件时,才能成功COPY和执行FLASH代码。为什么有时是分段的呢?串口通信不稳定吗?
回复

使用道具 举报

21

主题

2205

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5141
金钱
5141
注册时间
2014-8-26
在线时间
1317 小时
发表于 2018-2-26 17:07:53 | 显示全部楼层
例程是按键才会运行app,简单改一下就可以的
回复

使用道具 举报

0

主题

192

帖子

0

精华

高级会员

Rank: 4

积分
582
金钱
582
注册时间
2017-6-2
在线时间
192 小时
发表于 2018-2-27 12:08:51 | 显示全部楼层
一般IAP都是从bootloader启动,可以设置一个倒计时多少自动进app就好了
回复

使用道具 举报

13

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
359
金钱
359
注册时间
2017-8-11
在线时间
94 小时
 楼主| 发表于 2018-2-27 16:59:42 | 显示全部楼层
login_FAE 发表于 2018-2-26 17:07
例程是按键才会运行app,简单改一下就可以的

谢谢。想再问一下,例程是从BOOTLOADER中启动,然后按键再运行APP FLASH。可是APP FLASH 中可不再包含BOOTLOADER!!!这样的话假如APP FLASH 中是用来升级程序的,那么程序只能升级一次吗?
我自己试过把例程中的BOOTLOADER程序改成了一个APP FLASH(IROM1改为0X8010000,中断向量也加上),也就是说这个APP FLASH 中包含了BOOTLOADER,暂且叫他APP1。
接下来,先下官方例程BOOTLOADER,再下自己制作的APP1,运行正常,按KEY2 可以来回在官方BOOTLOADER 程序和APP1中来回切换(这一点有点意外,自己以为只能切换到APP1,切换不到官方BOOTLOADER程序中,除非重启),现在问题来了,运行APP1后无法再接收新的APP FLASH,会黑屏死机,而且下不了程序,只能再讲BOOT0接地,从ST 的BOOTLOADER 中再刷回来。怎么会这样?如何操作可以让APP1也能接收并运行新的APP FLASH?
回复

使用道具 举报

3

主题

85

帖子

0

精华

高级会员

Rank: 4

积分
586
金钱
586
注册时间
2016-5-13
在线时间
106 小时
发表于 2018-3-2 09:16:18 | 显示全部楼层
自己写的IAP方式是,flash分成4个部分,
第一部分是boot loader,只负责程序的升级
第二部分是APP1,用于存放出厂程序1
第三部分是APP2,用于存放出厂程序2
第四部分是程序公用区,用于存放升级标志位和公用参数
程序开始时运行boot loader,检测是否有程序需要升级,没有则运行最新的程序(APP1或者APP2)
在APP1和APP2中串口接收升级命令,收到升级命令置位升级标志位并软重启进入boot loader 在boot loader接收需要升级的bin文件存放于APP1或APP2的地址(取决于上次运行的程序是APP1还是APP2),如果接收失败或者等待升级超时,则置位升级标志并跳转至上一个还可以正常运行的APP
这样无论你何时进行升级都可以保证在升级成功或者失败时不影响你程序的使用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 21:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表