12.2.3 Reliable update flow

12.2.3.1 软件更新

对于软件实现,备份应用程序地址不固定。 因此,必须指定应用程序地址。 引导加载程序有两种方法可以接收备份应用程序地址。 如果主机发出可靠的更新过程,则引导加载程序会从主机自身接收指定的应用程序地址。 否则,引导加载程序将使用预定义的应用程序地址。

可靠更新过程启动后,引导加载程序的第一件事是检查备份应用程序区域,以确定可靠更新功能是否处于活动状态,方法是检查:

1.备份应用程序中的应用程序指针是否有效。

2. Bootloader配置区是否启用。

如果上述条件不满足,则引导加载程序会立即退出可靠的更新过程。否则,引导加载程序将

继续通过检查来验证备份应用程序的完整性:

1. crcStartAddress是否等于应用程序向量表的起始地址。
2. crcByteCount(被认为是备份应用程序的大小)是否小于或等于允许的最大备份应用程序大小。

3.鉴于上述条件得到满足,计算出的CRC校验和是否等于备份应用程序中提供的校验和。

如果确定备份应用程序有效,则下图描述剩余的进程。


注意
并非所有细节都显示在上图中

一旦主应用程序区域被更新,
引导加载程序必须在退出可靠更新过程之前擦除备份应用程序区域。

这可以防止引导加载程序在后续引导中更新主应用程序映像。

12.2.3.2硬件实现

对于硬件实现,备份应用程序地址在引导加载程序中是固定和预定义的,但需要交换指示器地址来交换闪存系统。 引导加载程序有两种方式获取交换指示器地址。 (1)如果主机发布可靠的更新过程,则自举程序会从主机接收指定的交换指示器地址。 否则,(2)如果交换系统处于就绪状态,引导加载程序将尝试从IFR接收交换指示符地址。

可靠更新过程的顶级行为取决于引导加载程序如何获取交换指示符地址:

•如果主机发布可靠的更新过程,则在验证备份应用程序的有效性之前,自举程序与软件实现的功能相同。

•如果可靠更新过程来自引导加载程序启动序列,则引导加载程序首先检查主应用程序。 如果主应用程序有效,则引导加载程序立即退出可靠更新过程,并跳转到主应用程序。 否则,引导加载程序将从IFR收到交换指示符地址,然后继续按照软件实现验证备份应用程序的完整性。

注释

期望用户在下一个启动序列的可靠更新过程中删除主应用区域。否则,可靠的更新过程假定不需要更新,退出过程,并从主应用程序区域启动图像。

如果备份应用程序有效,请参阅下图中的其余操作。


注意
并非所有细节都显示在上图中。

一旦闪存系统交换(上部闪存块变为下部闪存块),自举程序自然会将备份应用程序视为主应用程序。在硬件实现中,在交换之后,不需要从备份区域擦除图像。

12.3配置宏

bootloader_config.h中定义的配置宏用于启用可靠的更新功能。 对于Kinetis bootloader v2.0.0,该功能仅在K65 Freedom和Tower闪存目标版本中启用。 所有为此功能添加的代码都应该在宏定义时启用。 目前,这些宏被定义为:

•BL_FEATURE_RELIABLE_UPDATE            //   用于启用或禁用可靠更新功能。
•BL_FEATURE_HARDWARE_SWAP_UPDATE  //  用于切换硬件或软件实施可靠更新。

•BL_BACKUP_APP_START                             // 用于定义备份的起始地址应用程序是否启用了可靠更新功能。

12.4获取属性

已添加一个属性以获取可靠更新的状态。 为了实现这一点,名为reliableUpdateStatus的属性成员已添加到propertyStore。

此外,为可靠的更新状态定义了八个新的状态代码。 有关详细信息,请参阅下表。


猜你喜欢

转载自blog.csdn.net/l3142600073/article/details/80803822
今日推荐