完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1、MCU:STM32f103vct6
2、升级所用端口: 串口 3、FLASH分配 bootloader 0x8000000 开始 #define APP1_START_ADDR 0x8010000 #define APP1_END_ADDR 0x8020000 //APP1 64k #define APP2_START_ADDR 0x8021000 #define APP2_END_ADDR 0x8031000 //APP2 64k APP程序中偏移地址设置,是根据APP的位置设定的: 如果运行APP1位置的程序,偏移地址就是 0x8010000, 如果运行APP2位置的程序,便宜地址就是 0x8021000 现象: 1、通过串口更新固件,都往APP1位置更新,测试多次,完全正常 2、更新固件,目前运行APP1程序,更新新固件到APP2位置;如果目前运行APP2位置程序,更新新固件到APP1位置 用同一个固件,交替升级到APP1 和 APP2 的位置,是没问题的 问题来了:用两个不同的固件,交替升级到APP1 和 APP2的位置,一次升级成功后,下一次升级完成,程序不停重启 在此情况下重复三次都是相同现象,在第四次就可以进入到APP程序中运行了 请问各位IAP过程中,使用两个APP升级,需要注意哪些地方呢? 谢谢 |
|
相关推荐
12个回答
|
|
这是两个相同的程序,设置IROM1的起始地址分别为 0x8010000 和 0x8021000, 生成的bin文件的复位地址分别为 08 01 11 55 和 08 02 21 55,这个地址的差值更好为0x11000, 和IROM的地址差刚好吻合,这个肯定不是巧合 然后我就按照下面办法生成bin文件: 1. bin1更新时需置于 0x8010000开始的地址,生成bin文件时,设置向量表偏移0x10000,KEIL设置IROM1:0x8010000 2. bin2更新时需置于 0x8021000开始的地址,生成bin文件时,设置向量表偏移0x21000,KEIL设置IROM1:0x8021000 也就是说,不同置于不同flash地址的程序的bin文件单独生成,地址做好匹配 固件升级测试10次,是没问题的 然后我把bin1升级到APP2的位置,把bin2升级到APP1的位置,然后就不行了,bootloader执行到跳转之后就没有然后了 但是,不太可能每次固件升级还得记录固件的位置啊,这样太不智能,太麻烦了, ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 分割线 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 这里就真的不知道如何处理了,因为bin文件可能位于不同的位置,bin文件里面带的地址该如何处理呢? |
|
|
|
没用过IAP。
上电后从bootloader运行系统程序,通过标志来选择从APP1,还是从APP2运行应用程序。那么这个标志放在什么位置?因为内部Flash是按页来擦写的,不能以字节擦写。那么个人建议,把这个标志,放在Flash空间的最后面页,或者特定的页。更新APP时,同时也把这个标志更新。 或者在bootloader代码区的最后一页,只放这个标志位。方便擦写。 |
|
|
|
|
|
|
|
两个APP交叉升级和升级单个APP的区别不大。APP1和APP2相同与不同更没啥区别。我觉得是你APP2升级出问题了。当两个APP相同的时候,错误被掩盖了
|
|
|
|
会不会是进入了什么错误中断死循环了,看门狗复位。
|
|
|
|
zhouxk 发表于 2018-12-6 11:03 这个标志肯定没问题,我是放在EEPROM里面 |
|
|
|
加了串口打印,没加看门狗,错误的话感觉不会有,现在发现的问题是,生成的bin文件的问题,在keil那里设置偏移 10000 和偏移 21000,生成的bin文件不同,特别是 复位地址那里不同,个人感觉是这个地址错误的问题 |
|
|
|
youpukeji668 发表于 2018-12-6 11:29 对,bin相同时错误被掩盖了,今天调试感觉像是 复位地址的问题,我用同一个工程,在keil那里设置IROM1的起始地址为0x8010000 和 0x8021000 ,生成的bin文件不同,特别是 复位地址那里不同 |
|
|
|
用HEX文件啊,里面带起始地址,该放哪里就放置到哪里
|
|
|
|
|
|
|
|
|
|
|
|
楼主、最后咋解决的?
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
621 浏览 1 评论
1962 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1068 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1487 浏览 1 评论
LL库F030进行3个串口收发,2个串口为232,一个为485,长时间后,会出现串口1停止运行,另外两个正常,只有重启复原
1924 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 19:32 , Processed in 0.924676 second(s), Total 96, Slave 79 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号