完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
ota升级完成后,bootloader没有把download区的新固件搬运到app区,版本也改了,可以保证是和上次的版本不一样,也没有打印任何错误的信息,可以明确的是它能正确把固件烧录至download分区中,因为能看到最新的版本号,只是不明白的在跳入app程序时候为什么又把download分区又擦了!然后跳入app执行原来的代码!为什么?
|
|
相关推荐
1个回答
|
|
|
我们面对的问题是:OTA升级后,Bootloader将新固件下载到了Download分区,并且更新了版本号,但在跳转到App区执行时,Download分区被擦除了,并且运行的是旧版本的App代码。 可能的原因和解决思路: 1. **Bootloader流程问题**: - 在OTA升级过程中,Bootloader应该在下载完成后,将Download分区的新固件复制(搬运)到App分区,然后更新版本信息(比如在某个非易失性存储区域记录当前版本号),最后跳转到App分区执行。 - 但是根据描述,Bootloader在跳转前似乎没有完成搬运工作,或者搬运过程中出现了错误(虽然你说没有打印错误信息),所以需要检查Bootloader中搬运固件的代码逻辑。 2. **Bootloader跳转前擦除了Download分区**: - 有可能在跳转到App之前,Bootloader有一个清理操作,比如擦除Download分区。这可能是设计上的,但通常我们希望在确认新固件运行正常后才擦除Download分区(或者保留用于下一次升级)。所以需要检查Bootloader代码,看是否有在跳转前擦除Download分区的操作。 3. **App启动后擦除了Download分区**: - 另一种可能是,Bootloader成功搬运了固件并跳转到新的App,但是新的App在启动后立即擦除了Download分区(例如,为了节省空间或避免重复升级),然后由于某种原因(比如复位)又回到了旧版本。这种情况可能是由于搬运过程中出现错误,导致新App无法正常运行,系统又回退到旧版本(如果有回退机制的话)。 - 或者,新App在启动时检测到Download分区有固件,然后自己将其擦除(但这样设计不太常见,因为通常由Bootloader管理固件更新)。 4. **版本信息存储位置和读取问题**: - 版本信息存储在某个地方(比如Flash的特定扇区、EEPROM等),Bootloader更新了版本信息,但App启动时读取版本信息的位置可能不正确,导致显示的是旧版本。但是你说版本号已经更新,所以这个可能性较小。 5. **搬运过程失败但未报错**: - 可能搬运过程中出现了错误(比如Flash写入失败),但错误处理代码没有打印错误信息,或者打印被忽略。需要检查搬运代码的返回值。 6. **复位后Bootloader再次运行**: - 在搬运完成后,系统复位,然后Bootloader再次运行。如果Bootloader检测到Download分区有有效的固件(因为刚刚搬运完成后可能没有立即擦除Download分区),它可能会再次进行搬运?或者由于某种原因,Bootloader认为升级没有完成,所以又开始了升级流程,但这次可能出错导致擦除了Download分区。 7. **Bootloader和App的分区地址配置错误**: - 检查Bootloader和App的链接脚本,以及Bootloader中定义的分区表,确保App分区和Download分区的地址和大小设置正确。 针对上述可能性,建议进行以下检查: 步骤1:**审查Bootloader代码** - 找到处理OTA升级的代码部分,特别是下载完成后的操作。 - 检查是否调用了将Download分区复制到App分区的函数。 - 检查复制函数内部是否有错误处理,是否忽略了某些错误。 - 检查复制完成后,是否更新了版本信息(以及版本信息存储的位置是否持久化,并且不会在复位后被覆盖)。 - 检查跳转到App之前是否有擦除Download分区的操作。 步骤2:**审查App代码** - 检查App启动时是否有擦除Download分区的操作。可以在App的初始化代码中搜索关于Download分区的操作。 步骤3:**检查复位原因** - 在Bootloader开始搬运之前,打印复位原因(比如上电复位、看门狗复位等)。如果搬运后系统复位,可能是看门狗复位或者其他异常复位,导致没有正确跳转到App。 步骤4:**调试Bootloader的搬运过程** - 在搬运函数前后增加详细的日志输出,包括源地址、目标地址、搬运的字节数等。 - 在搬运过程中,可以在关键步骤后打印进度或校验和,确保搬运正确完成。 步骤5:**验证分区设置** - 确认分区表配置正确,App分区和Download分区没有重叠,且大小足够。 步骤6:**考虑回滚机制** - 如果Bootloader有回滚机制(比如在App启动失败后回退到旧版本),那么可能是新App启动失败导致回滚,同时清除了Download分区的固件。需要检查新App为何启动失败(比如堆栈设置、时钟初始化、外设初始化等问题)。 一个典型的Bootloader流程应该如下: 1. 上电后运行Bootloader。 2. 检查升级标志(或检测到Download分区有新的有效固件)。 3. 将Download分区的固件复制到App分区。 4. 验证App分区的固件(比如校验和)。 5. 更新版本信息,并清除升级标志(或标记Download分区为已使用)。 6. 跳转到App分区。 如果没有第5步,那么Bootloader下次启动时还会认为有新的固件,从而再次尝试升级。 因此,问题可能出在第5步:升级标志没有被清除,导致每次启动都尝试升级,而升级过程中可能由于某种原因(比如App分区已经是最新,但Download分区有数据)导致重复搬运,或者跳转前擦除了Download分区(但App分区并没有被正确更新)。 另外,请注意,在复制过程中,如果App分区和Download分区在同一个Flash芯片上,需要确保在擦写App分区时不会影响Bootloader和Download分区(如果Bootloader在擦写App分区时,Download分区的内容被破坏,那么可能是分区地址计算错误)。 建议:在Bootloader复制完成后,对App分区的固件进行校验(比如CRC32),并与Download分区中的固件校验和对比,确保复制过程没有错误。如果校验失败,则不要跳转,并标记错误。 最后,你提到跳入App程序时Download分区被擦除,这很可能是App程序的行为。因此,重点检查App程序初始化代码中是否有这样的操作。 如果还是无法解决,可以尝试在Bootloader跳转到App之前,将Download分区的内容读出并打印(或通过某种方式保存)一部分,然后在App启动后立即读取Download分区同样位置的内容,看是否在App启动后被擦除。这样就能确定是Bootloader跳转前擦除的还是App擦除的。 由于问题复杂,需要具体代码分析,建议按照以上步骤进行排查。 问题分析:OTA升级后,Bootloader正确将新固件写入Download分区并更新版本号,但未将新固件搬运到App分区,且跳转运行时执行了旧版本代码。同时,Download分区在跳转时被擦除,可能由以下原因导致: 根本原因及解决方案:1. Bootloader搬运逻辑缺失或条件未触发
2. 跳转前意外擦除Download分区
3. App启动后擦除Download分区
4. Bootloader与App分区地址配置错误
5. 跳转后硬件复位导致回退
调试建议:
流程图总结:通过上述步骤排查,可解决Download分区误擦除及搬运失败问题。重点检查Bootloader搬运逻辑和分区擦除调用点。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
184个成员聚集在这个小组
加入小组rtstudio是否可像keil加载ini解决虚拟串口与mcu串口通讯?
1211 浏览 0 评论
【Vision Board创客营连载体验】基于RA8D1-Vision Board的自动路径规划小车
1775 浏览 1 评论
【Vision Board创客营连载体验】基于Vision Board的垃圾分类
2156 浏览 0 评论
【Vision Board创客营连载体验】使用 Vision Board 做一个 UVC Camera
1777 浏览 0 评论
【Vision Board创客营连载体验】TinyMaix进行手写数字识别
2004 浏览 0 评论
1461浏览 5评论
在RT-Thread Studio中新建的stm32f407-atk-explorer工程运行qemu失败,是什么原因引起的?
1764浏览 3评论
为什么rt_device_read()只能读取到两个字节数据?
359浏览 3评论
连得上热点,但是ping baidu.com出现timeout,请问跟什么有关?
418浏览 3评论
413浏览 2评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 10:36 , Processed in 0.870147 second(s), Total 77, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2204
