

# 对 适用于 LoRaWAN 的 AWS IoT Core 设备进行无线固件更新（FUOTA）
<a name="lorawan-mc-fuota-overview"></a>

使用无线固件更新 (FUOTA) 将固件更新部署到 适用于 LoRaWAN 的 AWS IoT Core 设备。

借助 FUOTA，您可以将固件更新发送到单个设备或一组设备。您还可以通过创建多播组向多台设备发送固件更新。首先将设备添加到多播组，然后将固件更新映像发送到所有这些设备。我们建议您对固件映像进行数字签名，以便接收映像的设备可以验证它们来自正确的来源。

借助 适用于 LoRaWAN 的 AWS IoT Core 的 FUOTA，您可以：
+ 将新的固件映像或 delta 映像部署到单个设备、一组设备中。
+ 在新固件部署到设备之后，验证其真实性和完整性。
+ 监控部署进度并在部署失败的情况下调试问题。

适用于 LoRaWAN 的 AWS IoT Core 对 FUOTA 和多播组的支持基于 [LoRa Alliance](https://lora-alliance.org/about-lorawan) 的以下规范：
+ LoRaWAN 远程组播设置规范，TS005-2.0.0
+ loraWAN 碎片化数据块传输规范，TS004-2.0.0
+ LoRaWAN 应用层时钟同步规范，TS003-2.0.0

**注意**  
适用于 LoRaWAN 的 AWS IoT Core 根据 LoRa Alliance 规范自动执行时钟同步。它使用的是函数 `AppTimeReq` 将服务器端时间回复使用 ClockSync 信令请求时间的设备。

 以下视频描述了如何创建 适用于 LoRaWAN 的 AWS IoT Core FUOTA 任务，并引导您完成向任务中添加设备和安排 FUOTA 任务的过程。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/0Yd6PFwL-IM/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/0Yd6PFwL-IM)


**Topics**
+ [

# FUOTA 过程概述
](lorawan-fuota-mc-process.md)
+ [

# 创建 FUOTA 任务并提供固件映像
](lorawan-fuota-create-task.md)
+ [

# 将设备和多播组添加到 FUOTA 任务并调度 FUOTA 会话
](lorawan-fuota-add-devices.md)
+ [

# 监控 FUOTA 任务和添加到该任务的设备的状态并进行故障排除
](lorawan-fuota-status.md)

# FUOTA 过程概述
<a name="lorawan-fuota-mc-process"></a>

下图说明了 适用于 LoRaWAN 的 AWS IoT Core 如何为终端设备执行 FUOTA 流程。如果要向 FUOTA 会话添加单个设备，可以跳过创建和配置多播组的步骤。您可以直接将设备添加到 FUOTA 会话中，然后 适用于 LoRaWAN 的 AWS IoT Core 将启动固件更新过程。

![\[图片说明了 适用于 LoRaWAN 的 AWS IoT Core 如何对终端设备执行 FUOTA。\]](http://docs.aws.amazon.com/zh_cn/iot-wireless/latest/developerguide/images/iot-lorawan-fuota-flow.png)


要对设备执行 FUOTA，请首先创建数字签名固件映像，然后配置要添加到 FUOTA 任务中的设备和多播组。启动 FUOTA 会话后，您的终端设备会收集所有碎片，从碎片中重建映像，将状态报告至 适用于 LoRaWAN 的 AWS IoT Core，然后应用新的固件映像。

下面说明了 FUOTA 流程的不同步骤：

1. 

**使用数字签名创建固件映像或增量映像**

   要通过 适用于 LoRaWAN 的 AWS IoT Core 对 LoRaWAN 设备执行 FUOTA，建议您在通过无线方式发送固件更新时对固件映像或增量映像进行数字签名。然后，接收映像的设备可以验证映像来自正确的来源。

   固件映像的大小不得超过 1 兆字节。固件越大，更新过程完成所需的时间就越长。要更快地传输数据，或如果您的新映像大于 1 兆字节，请使用增量映像，这是新映像的一部分，即新固件映像和上一个映像之间的增量。
**注意**  
适用于 LoRaWAN 的 AWS IoT Core 不提供数字签名生成工具和固件版本管理系统。您可以使用任何第三方工具为固件映像生成数字签名。建议您使用数字签名工具，例如嵌入 [ARM mbed GitHub 存储库](https://github.com/armmbed/mbed-os-example-lorawan-fuota)的工具，其中还包括用于生成增量映像和设备使用该映像的工具。

1. 

**识别和配置 FUOTA 的设备**

   识别 FUOTA 的设备后，将固件更新发送到单个或多个设备。
   + 要将固件更新发送到多台设备，请创建多播组，然后使用终端设备配置多播组。有关更多信息，请参阅[创建多播组向多台设备发送下行链路有效负载](lorawan-multicast-groups.md)。
   + 要向各个设备发送固件更新，请将这些设备添加到 FUOTA 会话中，然后执行固件更新。

1. 

**调度分发窗口并设置碎片会话**

   如果创建了多播组，可以指定 B 类或 C 类分发窗口，确定设备可以从 适用于 LoRaWAN 的 AWS IoT Core 接收碎片的时间。在切换到 B 类或 C 类模式之前，您的设备可能在 A 类中运行。您还必须指定会话的开始时间。

   B 类或 C 类设备会在指定的分发窗口唤醒，然后开始接收下行链路数据包。在 C 类模式下运行的设备可以消耗比 B 类设备更多的电量。有关更多信息，请参阅[设备类](lorawan-manage-end-devices.md#lorawan-device-classes)。

1. 

**终端设备将状态报告至 适用于 LoRaWAN 的 AWS IoT Core 并更新固件映像**

   设置碎片会话后，您的终端设备和 适用于 LoRaWAN 的 AWS IoT Core 执行以下步骤以更新设备的固件。

   1. 由于 LoRaWAN 设备的数据速率较低，要启动 FUOTA 流程，适用于 LoRaWAN 的 AWS IoT Core 设置碎片会话以对固件映像进行碎片化。 然后 会将这些碎片发送到终端设备。

   1. 适用于 LoRaWAN 的 AWS IoT Core 发送映像碎片后，LoRaWAN 终端设备执行以下任务。

      1. 收集碎片，然后从这些碎片中重建二进制图像。

      1. 检查重建后映像的数字签名以验证映像并验证来自正确的来源。

      1. 比较来自的固件版本 适用于 LoRaWAN 的 AWS IoT Core 转至当前版本。

      1. 报告转移到 适用于 LoRaWAN 的 AWS IoT Core 的碎片映像状态，然后应用新的固件映像。
**注意**  
在某些情况下，在检查固件映像的数字签名之前，终端设备报告传输到 适用于 LoRaWAN 的 AWS IoT Core 的碎片映像的状态。

现在您已经了解了 FUOTA 流程，您可以创建 FUOTA 任务并将设备添加到任务中以更新固件。有关更多信息，请参阅[创建 FUOTA 任务并提供固件映像](lorawan-fuota-create-task.md)。

# 创建 FUOTA 任务并提供固件映像
<a name="lorawan-fuota-create-task"></a>

要更新 LoRaWAN 设备的固件，首先创建一个 FUOTA 任务并提供要用于更新的数字签名固件映像。然后，您可以将设备和多播组添加到任务中并调度 FUOTA 会话。会话开始时，适用于 LoRaWAN 的 AWS IoT Core 设置碎片会话，最终设备收集碎片、重建映像并应用新固件。有关 FUOTA 过程的更多信息，请参阅 [FUOTA 过程概述](lorawan-fuota-mc-process.md)。

下面说明了如何创建 FUOTA 任务并上传要存储在 S3 存储桶中的固件映像或增量映像。

## 先决条件
<a name="lorawan-fuota-task-prereq"></a>

在执行 FUOTA 之前，必须对固件映像进行数字签名，这样您的终端设备才可以在应用映像时验证映像的真实性。您可以使用任何第三方工具为固件映像生成数字签名。建议您使用数字签名工具，例如嵌入 [ARM mbed GitHub 存储库](https://github.com/armmbed/mbed-os-example-lorawan-fuota)的工具，其中还包括用于生成增量映像和设备使用该映像的工具。

## 使用控制台创建 FUOTA 任务并上传固件映像
<a name="lorawan-fuota-task-console"></a>

要创建 FUOTA 任务并使用控制台上传固件映像，请转到控制台的 [FUOTA 任务](https://console.aws.amazon.com/iot/home#/wireless/fuotaTasks) 的选项卡，然后选择 **Create FUOTA task**（创建 FUOTA 任务）。

1. 

**创建 FUOTA 任务**

   要创建 FUOTA 任务，请指定任务属性和标签。

   1. 

**指定 FUOTA 任务属性**  
要指定 FUOTA 任务属性，请为 FUOTA 任务输入以下信息。
      + **名称**：为 FUOTA 任务输入唯一的名称。名称只能包含字母、数字、连字符和下划线。它不能包含空格。
      + **说明**：您可以为多播组提供可选描述。说明字段最多为 2,048 个字符。
      + **RFRegion**：为 FUOTA 任务设置频段。频段必须与您用于配置无线设备或多播组的频段相匹配。

   1. 

**FUOTA 任务的标签**  
您可以选择提供任何键值对作为的 FUOTA 任务的**标签**。要继续创建您的映像，选择 **Next**(下一步)。

1. 

**上传固件映像**

   选择要用来更新添加到 FUOTA 任务设备固件的固件映像文件。固件映像文件存储在 S3 存储桶中。您可以为 适用于 LoRaWAN 的 AWS IoT Core 提供代表您访问固件映像的权限。我们建议您对固件映像进行数字签名，以便在执行固件更新时验证其真实性。

   1. 

**选择固件映像文件**  
您可以将新的固件映像文件上传到 S3 存储桶，也可以选择已上传到 S3 存储桶的现有映像。
**注意**  
固件映像文件不得超过 1 兆字节。固件越大，更新过程完成所需的时间就越长。
      + 要使用现有映像，选择 **Select an existing firmware image**（选择现有的固件映像），选择 **Browse S3**（浏览 S3），然后选择要使用的固件映像文件。

        适用于 LoRaWAN 的 AWS IoT Core 填充 S3 URL，该 URL 是 S3 存储桶中固件映像文件的路径。`s3://bucket_name/file_name` 路径的格式为：要在 [Amazon Simple Storage Service](https://console.aws.amazon.com/s3/)控制台中查看文件，选择 **View**（查看）。
      + 要上传新的固件映像。

        1. 选择 **Upload a new firmware image**（上载新的固件映像），然后上载固件映像。映像文件不得大于 1 兆字节。

        1. 要创建 S3 存储桶并输入要存储固件映像文件的**Bucket 名称**，请选择 **Create S3 bucket**（创建 S3 存储桶）。

   1. 

**要访问存储桶的权限**  
您可以创建新的服务角色或选择现有角色，让 适用于 LoRaWAN 的 AWS IoT Core 代表您访问 S3 存储桶中的固件映像文件。选择**下一步**。

      要创建新角色，您可以输入角色名称或将其留白以便自动生成随机名称。要查看授予对 S3 存储桶访问权限的策略权限，选择 **View policy permissions**（查看策略权限）。

   有关使用 S3 存储桶存储映像和授予 适用于 LoRaWAN 的 AWS IoT Core 访问权限的更多信息，请参阅 [将固件文件上载到 S3 存储桶并添加 IAM 角色](lorawan-upload-firmware-s3bucket.md)。

1. 

**审核和创建**

   要创建 FUOTA 任务，请查看您指定的 FUOTA 任务和配置详细信息，然后选择 **Create task**(创建任务)。

## 使用 API 创建 FUOTA 任务并上传固件映像
<a name="lorawan-fuota-task-api"></a>

要使用 API创建 FUOTA 任务并指定固件映像文件，请使用 [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_CreateFuotaTask.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_CreateFuotaTask.html) API 操作或 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/create-fuota-task.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/create-fuota-task.html)CLI 命令。您可以将 `input.json` 文件作为 `create-fuota-task` 命令的输入。使用 API 或 CLI 时，作为输入提供的固件映像文件必须已上传到 S3 存储桶。您还可以指定让 适用于 LoRaWAN 的 AWS IoT Core 访问S3 存储桶中固件映像的 IAM 角色。

```
aws iotwireless create-fuota-task \
    --cli-input-json file://input.json
```

其中：

**input.json 的内容**

```
{   
   "Description": "FUOTA task to update firmware of devices in multicast group.",
   "FirmwareUpdateImage": "S3:/firmware_bucket/firmware_image
   "FirmwareUpdateRole": "arn:aws:iam::123456789012:role/service-role/ACF1zBEI"
   "LoRaWAN": { 
      "RfRegion": "US915"
   },
   "Name": "FUOTA_Task_MC"  
}
```

创建 FUOTA 任务后，您可以使用以下 API 操作或 CLI 命令来更新、删除或获取有关 FUOTA 任务的信息。
+ [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_UpdateFuotaTask](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_UpdateFuotaTask) 或 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/update-fuota-task.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/update-fuota-task.html) 
+ [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_GetFuotaTask](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_GetFuotaTask) 或 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/get-fuota-task.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/get-fuota-task.html) 
+ [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_ListFuotaTasks](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_ListFuotaTasks) 或 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/list-fuota-tasks.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/list-fuota-tasks.html) 
+ [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_DeleteFuotaTask](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_DeleteFuotaTask) 或 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/delete-fuota-task.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/delete-fuota-task.html) 

## 后续步骤
<a name="lorawan-fuota-next-steps"></a>

现在，您已创建了 FUOTA 任务并提供了固件映像，您可以将设备添加到任务中更新固件。您可以将单个设备或多播组添加到任务中。有关更多信息，请参阅[将设备和多播组添加到 FUOTA 任务并调度 FUOTA 会话](lorawan-fuota-add-devices.md)。

# 将设备和多播组添加到 FUOTA 任务并调度 FUOTA 会话
<a name="lorawan-fuota-add-devices"></a>

创建 FUOTA 任务后，您可以将设备添加到要更新固件的任务中。将设备成功添加到 FUOTA 任务后，您可以调度 FUOTA 会话更新设备固件。
+ 如果您只有少数设备，可以将这些设备直接添加到 FUOTA 任务中。
+ 如果有大量设备 要更新固件 ，您可以将这些设备添加到多播组中，然后将多播组添加到 FUOTA 任务中。有关创建和使用多播组的信息，请参阅 [创建多播组向多台设备发送下行链路有效负载](lorawan-multicast-groups.md)。

**注意**  
您可以将单个设备或多播组添加到 FUOTA 任务中。您不能将设备和多播组添加到任务中。

添加设备或多播组后，您可以启动固件更新会话。适用于 LoRaWAN 的 AWS IoT Core 收集固件映像，对映像进行碎片化，然后以加密格式存储碎片。您的终端设备收集碎片并应用新的固件映像。固件更新所需的时间取决于映像的大小和碎片方式。固件更新完成后，适用于 LoRaWAN 的 AWS IoT Core 存储的固件映像的加密片段已删除。您仍然可以在 S3 存储桶中找到固件映像。

## 先决条件
<a name="lorawan-fuota-devices-prereq"></a>

在将设备或多播组添加到 FUOTA 任务之前，请执行以下操作。
+ 您必须已创建 FUOTA 任务并提供固件映像。有关更多信息，请参阅[创建 FUOTA 任务并提供固件映像](lorawan-fuota-create-task.md)。
+ 配置要更新设备固件的无线设备。有关登记设备的更多消息，请参阅 [将您的设备登记到 适用于 LoRaWAN 的 AWS IoT Core](lorawan-onboard-end-devices.md)。
+ 要更新多台设备的固件，您可以将它们添加到多播组。有关更多信息，请参阅[创建多播组向多台设备发送下行链路有效负载](lorawan-multicast-groups.md)。
+ 您将设备登记到 适用于 LoRaWAN 的 AWS IoT Core 时，指定 FUOTA 配置参数 `FPorts`。如果您使用的是 LoRaWan v1.0.x 设备，您还必须指定 `GenAppKey`。有关 FUOTA 配置参数的更多信息，请参阅 [为组播和 FUOTA 配置准备设备](lorawan-prepare-devices-multicast.md)。

## 将设备添加到 FUOTA 任务并使用控制台调度 FUOTA 会话
<a name="lorawan-fuota-devices-console"></a>

要使用控制台添加设备或多播组并调度 FUOTA 会话，请转到控制台的 [FUOTA 任务](https://console.aws.amazon.com/iot/home#/wireless/fuotaTasks)选项卡。然后，选择要向其添加设备的 FUOTA 任务并执行固件更新。

**添加设备和多播组**

1. 您可以将单个设备或多播组添加到 FUOTA 任务中。但是，您不能将单个设备和多播组添加到同一个 FUOTA 任务中。要使用控制台添加设备，请执行以下操作。

   1. 在**FUOTA 任务详细信息**中，选择 **Add device**（添加设备）。

   1. 选择您添加到任务中的设备频段或 **RFRegion**。此值必须与您为 FUOTA 任务选择的**RFRegion** 匹配。

   1. 选择是否要将单个设备或多播组添加到任务。
      + 要添加单个设备，请选择 **Add individual devices** （添加单个设备），然后输入要添加到 FUOTA 任务中的设备 ID。
      + 要添加多播组，请选择 **Add multicast groups**（添加多播组），然后将多播组添加到任务中。您可以使用设备配置文件或标签筛选要添加到任务中的多播组。按设备配置文件进行筛选时，可以选择带配置文件设备的多播组，已启用**支持 B 类**或**支持 C 类**。

1. 

**调度 FUOTA 会话**

   成功添加设备或多播组后，您可以调度 FUOTA 会话。要调度会话，请执行以下操作。

   1. 选择要更新其设备固件的 FUOTA 任务，然后选择 **Schedule FUOTA session**.（调度 FUOTA 会话）

   1. 为您的 FUOTA 会话指定**开始日期**和**开始时间**。确保开始时间是当前时间 30 分钟之后。

## 将设备添加到 FUOTA 任务并使用 API 调度 FUOTA 会话
<a name="lorawan-fuota-devices-api"></a>

您可以使用 AWS IoT Wireless API 或 CLI 将无线设备或多播组添加到 FUOTA 任务中。然后，您可以调度 FUOTA 会话。

1. 

**添加设备和多播组**

   您可以将无线设备或多播组与 FUOTA 任务关联起来。
   + 要将各单台设备与 FUOTA 任务关联，请使用 [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_AssociateWirelessDeviceWithFuotaTask.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_AssociateWirelessDeviceWithFuotaTask.html) API 操作或 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/associate-wireless-device-with-fuota-task.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/associate-wireless-device-with-fuota-task.html) CLI 命令，然后将 `WirelessDeviceID` 作为输入。

     ```
     aws iotwireless associate-wireless-device-with-fuota-task \
         --id "01a23cde-5678-4a5b-ab1d-33456808ecb2"
         --wireless-device-id "ab0c23d3-b001-45ef-6a01-2bc3de4f5333"
     ```
   + 要将多播组与 FUOTA 任务关联，请使用 [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_AssociateMulticastGroupWithFuotaTask.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_AssociateMulticastGroupWithFuotaTask.html) API 操作或 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/associate-multicast-group-with-fuota-task.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/associate-multicast-group-with-fuota-task.html) CLI 命令，然后将 `MulticastGroupID` 作为输入。

     ```
     aws iotwireless associate-multicast-group-with-FUOTA-task \
         --id 01a23cde-5678-4a5b-ab1d-33456808ecb2"
         --multicast-group-id
     ```

   将无线设备或多播组与 FUOTA 任务关联后，请使用以下 API 操作或 CLI 命令列出您的设备或多播组或将它们与任务取消关联。
   + [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_DisassociateWirelessDeviceFromFuotaTask.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_DisassociateWirelessDeviceFromFuotaTask.html) 或 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/disassociate-wireless-device-from-fuota-task.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/disassociate-wireless-device-from-fuota-task.html) 
   + [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_DisassociateMulticastGroupFromFuotaTask.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_DisassociateMulticastGroupFromFuotaTask.html) 或 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/disassociate-multicast-group-from-fuota-task.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/disassociate-multicast-group-from-fuota-task.html) 
   + [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_ListWirelessDevices.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_ListWirelessDevices.html) 或 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/delete-multicast-group.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/delete-multicast-group.html) 
   + [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_ListMulticastGroups.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_ListMulticastGroups.html) 或 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/list-multicast-groups.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/list-multicast-groups.html) 
**注意**  
API：  
`MulticastGroupID` 作为筛选条件时，`ListWirelessDevices` 可以列出一般无线设备以及与多播组关联的设备。`FuotaTaskID` 作为筛选条件时，API 列出了与 FUOTA 任务关联的无线设备。
`FuotaTaskID` 作为筛选条件时，`ListMulticastGroups` 可以在下列情况下列出一般多播组和与 FUOTA 任务关联的多播组。

1. 

**调度 FUOTA 会话**

   设备或多播组成功添加到 FUOTA 任务后，您可以启动 FUOTA 会话更新设备固件。开始时间离当前时间必须至少有 30 分钟。要使用 API 或 CLI 调度 FUOTA 会话，请使用[https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_StartFuotaTask.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_StartFuotaTask.html) API 操作或 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/start-fuota-task.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/start-fuota-task.html)CLI 命令。

   启动 FUOTA 会话后，您无法再向任务添加设备或多播组。您可以使用 [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_GettFuotaTask.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_GettFuotaTask.html) API 操作或 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/get-fuota-task.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/get-fuota-task.html)CLI 命令来获取有关 FUOTA 会话状态的信息。

# 监控 FUOTA 任务和添加到该任务的设备的状态并进行故障排除
<a name="lorawan-fuota-status"></a>

在配置无线设备并创建了可能要使用的任何多播组之后，可以通过执行以下步骤启动 FUOTA 会话。

## FUOTA 任务状态
<a name="lorawan-fuota-task-status"></a>

您的 FUOTA 任务可以在 AWS 管理控制台 中显示下列状态消息。
+ 

**待定**  
此状态表示您已经创建了 FUOTA 任务，但还没有固件更新会话。创建任务后，您将看到显示此状态消息。在此期间，您可以更新 FUOTA 任务， 关联 或者取消设备或多播组与任务的关联。在状态从**Pending**（待定）更改后，无法将其他设备添加到任务中。
+ 

**等待 FUOTA 会话**  
您的设备已经成功 添加 到 FUOTA 任务，当您的任务有已调度固件更新会话时，您将看到显示此状态消息。在此期间，您无法更新或将设备添加到 FUOTA 会话。如果您取消 FUOTA 会话，群组状态将更改为 **Pending**（待定。） 
+ 

**在 FUOTA 会话中**  
当 FUOTA 会话开始时，您将看到显示此状态消息。碎片会话开始，您的终端设备收集碎片、重建固件映像、将新固件版本与原始版本进行比较，然后应用新映像。
+ 

**Fuota 已完成**  
在您的终端设备向 适用于 LoRaWAN 的 AWS IoT Core 报告已应用新的固件映像，或会话超时时，FUOTA 会话被标记为已完成，您将看到显示此状态。

  在以下任何情况下，您还会显示看到此状态，因此请务必检查固件更新是否已正确应用于设备。
  + 当 FUOTA 任务状态为**等待 FUOTA 会话**，并且存在 S3 存储桶错误时，例如指向 S3 存储桶中映像文件的链接不正确或 适用于 LoRaWAN 的 AWS IoT Core 没有足够的权限来访问存储桶中的文件。
  + 当 FUOTA 任务状态为**等待 FUOTA 会话**，并且有启动 FUOTA 会话的请求时，但是没有从 FUOTA 任务中的设备或多播组收到响应。
  + 当 FUOTA 任务状态为** FUOTA 会话中**时，并且设备或多播组在一段时间内没有发送任何碎片，这导致会话超时。
+ 

**等待删除**  
如果删除处于任何其他状态的 FUOTA 任务，会显示此状态。这是永久性操作，无法撤消。此操作可能需要时间，在 FUOTA 任务删除之前，任务状态为 **Delete waiting**（删除等待）。FUOTA 任务进入此状态后，无法转换到其他状态。

## FUOTA 任务中设备的状态
<a name="lorawan-fuota-device-status"></a>

FUOTA 任务中的设备可以在 AWS 管理控制台 中显示下列状态消息。您可以将鼠标悬停在每条状态消息上获取表示内容的更多信息
+ 

**初次**  
在 FUOTA 会话的开始时间，适用于 LoRaWAN 的 AWS IoT Core 检查您的设备是否有固件更新支持的软件包。如果您的设备有支持的软件包，该设备的 FUOTA 会话将启动。固件映像已碎片化，碎片将发送到您的设备。看到显示此状态时，表示设备的 FUOTA 会话尚未启动。
+ 

**不支持的程序包**  
如果设备不支持 FUOTA 软件包，您将看到显示此状态。如果不支持固件更新包，设备的 FUOTA 会话将无法启动。要纠正该错误，请检查设备的固件是否可以使用 FUOTA 接收固件更新。
+ 

**不受支持碎片算法**  
FUOTA 会话开始时，适用于 LoRaWAN 的 AWS IoT Core 为设备设置碎片会话。如果您看到显示此状态，表示使用的碎片算法类型无法应用于设备的固件更新。出现错误的原因是您的设备没有支持的 FUOTA 软件包。要纠正该错误，请检查设备的固件是否可以使用 FUOTA 接收固件更新。
+ 

**内存不足**  
适用于 LoRaWAN 的 AWS IoT Core 发送映像碎片之后，您的终端设备收集映像碎片并从这些碎片中重建二进制映像。当设备没有足够的内存来组装固件映像的传入碎片时，会显示此状态，这可能会导致固件更新会话过早结束。要纠正错误，请检查设备的硬件是否可以接收此更新。如果您的设备无法接收此更新，请使用增量映像更新固件。
+ 

**不受支持碎片索引**  
碎片索引标识了四个同时可能出现的碎片会话中的一个。如果您的设备不支持指定的碎片索引值，会显示此状态。要纠正这个错误，可以执行下列操作。
  + 为设备启动新的 FUOTA 任务。
  + 如果错误仍然存在，请将从单播模式切换到多播模式。
  + 如果错误仍未纠正，请检查设备固件。
+ 

**内存错误**  
此状态表示您的设备在接收来自 适用于 LoRaWAN 的 AWS IoT Core 传入的片段时出现了内存错误。如果发生此错误，您的设备可能无法接收此更新。要纠正错误，请检查设备的硬件是否可以接收此更新。如果需要，请使用增量映像更新设备固件。
+ 

**错误描述符**  
您的设备不支持指定的描述符。描述符是描述在碎片会话期间传输的文件的字段。如果您看到此错误，请联系 [AWS 支持 中心](https://console.aws.amazon.com/support/home#/)。
+ 

**会话计数重播**  
此状态表示您的设备之前使用过此会话计数。要纠正该错误，请启动设备的 FUOTA 新任务。
+ 

**缺少碎片**  
当您的设备从 适用于 LoRaWAN 的 AWS IoT Core 中收集图像碎片时，它从独立的编码碎片中重建新的固件映像。如果您的设备尚未收到所有碎片，无法重建新映像，您将看到此状态。要纠正该错误，请启动设备的 FUOTA 新任务。
+ 

**MIC 错误**  
当您的设备从收集的碎片中重建新固件映像时，会执行 MIC（消息完整性检查）来验证映像的真实性以及是否来自正确的来源。如果您的设备在重新组装碎片后检测到麦克风中不匹配，会显示此状态。要纠正该错误，请启动设备的 FUOTA 新任务。
+ 

**成功**  
您的设备 FUOTA 会话成功。
**注意**  
尽管此状态消息表示设备已从碎片中重建映像并进行了验证，但设备将状态报告到时，设备固件可能尚未更新到 适用于 LoRaWAN 的 AWS IoT Core。检查您的设备固件是否已更新。

## 后续步骤
<a name="lorawan-fuota-device-next"></a>

您已经了解了 FUOTA 任务及其设备的不同状态以及如何解决问题。有关每个状态的更多信息，请参阅 [loraWAN 碎片化数据块传输规范，TS004-1.0.0](https://lora-alliance.org/wp-content/uploads/2020/11/fragmented_data_block_transport_v1.0.0.pdf)。