乐鑫技术交流
直播中

刘杰

8年用户 1390经验值
私信 关注
[问答]

在增强模式下引导加载程序时,OTA升级失败了,为什么?

我注意到,当我在增强模式下重新启动以在 0x81000 时手动启动 user2 固件,然后运行 OTA 升级以升级 user1,它看起来像开始升级固件,但它几乎立即失败(WDT 重新启动),使 user1 和 user2 都无法使用。基本上,引导加载程序将在 user1 和 user2 之间无休止地跳跃(在这些分区上寻找一个幻数?

在我的 OTA 函数中,我用 system_get_userbin_addr() 替换了 system_upgrade_userbin_check() 以识别正确分区的正确文件,因为在增强模式下,第一个函数无法理解它从哪个分区运行,但我遇到了同样的问题。


const char* 文件;
开关 (system_get_userbin_addr())
{
    case 0x1000: file = "user2.bin"; break;
    case 0x81000: file = "user1.bin"; break;
    default:
        os_printf("[OTA]Invalid userbin number!n");
        return;
}
...然后获取文件并执行升级...


此外,我没有找到一种方法来退出增强模式以正常运行引导加载程序,即使在再次刷新固件和引导加载程序后也是如此,除了:

system_upgrade_flag_set(upgrade_flag_finish);
system_upgrade_reboot();


有没有更好的方法来退出该模式?

回帖(1)

李华

2024-7-18 18:05:17
OTA升级失败可能有几个原因。以下是一些可能的原因和解决方案:
1. **分区表损坏**:在增强模式下,引导加载程序会在user1和user2之间切换。如果分区表损坏或不一致,可能会导致OTA升级失败。请确保分区表正确配置并使用`make menuconfig`中的`Partition Table`选项进行验证。
2. **OTA升级逻辑问题**:您提到在OTA函数中使用了`system_get_userbin_addr()`代替`system_upgrade_userbin_check()`。这可能会导致升级逻辑出现问题。请确保正确识别要升级的分区,并在升级过程中正确处理。
3. **WDT(看门狗定时器)重启**:如果OTA升级过程中发生WDT重启,可能是因为升级过程中发生了错误或异常。请检查升级过程中的错误处理和异常处理逻辑,确保在发生错误时能够正确处理。
4. **固件大小问题**:如果升级后的固件大小超过了可用的闪存空间,可能会导致升级失败。请确保升级后的固件大小在可用闪存空间范围内。
5. **固件签名问题**:如果固件签名不正确或未签名,可能会导致升级失败。请确保固件签名正确,并在升级过程中正确处理签名验证。
6. **引导加载程序配置问题**:请检查引导加载程序的配置,确保其正确处理增强模式下的OTA升级。可能需要调整引导加载程序的配置以适应增强模式。
7. **固件兼容性问题**:请确保升级后的固件与当前硬件和软件环境兼容。如果存在兼容性问题,可能会导致升级失败。

为了进一步诊断问题,您可以尝试以下步骤:
1. **检查日志**:在OTA升级过程中,启用详细日志记录,以便在升级失败时查看详细的错误信息和调试信息。
2. **逐步调试**:使用调试工具逐步执行OTA升级过程,以便在升级失败时找到问题所在。
3. **测试不同的固件版本**:尝试使用不同的固件版本进行OTA升级,以确定问题是否与特定固件版本相关。
4. **检查硬件**:检查硬件连接和配置,确保硬件没有问题,例如闪存、WDT等。

通过以上步骤,您应该能够找到导致OTA升级失败的原因,并采取相应的解决措施。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分