OTAアップデートの概要(ベータ)



OTAアップデートの概要(ベータ)

ガジェットは、バイナリーファームウェアへのOTA(ワイヤレス)アップデートを受信できる必要があります。このトピックでは、EchoデバイスとガジェットがBluetooth経由で通信してアップデートを実行するプロセスについて説明します。

前提条件

ガジェットでOTAアップデートを受信するには、以下の要件が満たされていること確認してください。

  • イメージのアップロード – Echoデバイスがガジェットにイメージをダウンロードする前に、新しいファームウェアイメージをAlexaクラウドにアップロードする必要があります。ファームウェアイメージをAlexaクラウドにアップロードするには、Alexa Gadgetsチームのパートナーと協力するか、alexa-gadgets-toolkit-beta@amazon.comにEメールを送ります。同じガジェットタイプのファームウェアイメージをアップロードするたびに、AlexaクラウドはアップロードされたイメージのOTAバージョン番号を上げます。OTAイメージの最大サイズは7MBです。
  • RFCOMMサーバー – ガジェットには2つの実行中のRFCOMMサーバーが必要です。一方はOTAアップデート用(UUID 0x1101)で、もう一方はイベントおよびディレクティブ用(UUID 0x1201)です。
  • OTAバージョン – OTAアップデートは、アップデートのOTAバージョン番号が、Discover.ResponseイベントのfirmwareVersionフィールドでガジェットから報告されるOTAバージョン番号より大きい場合にのみ発生します。OTAバージョンの要件は以下のとおりです。
    • ガジェットは、自身のOTAバージョンを不揮発性メモリに格納しなければなりません。ガジェットは、最初はデフォルト値を格納します。ガジェットはOTAアップデートを受け取り始めた後、アップデートプロセス中にCMD_WRITE_SIGNATUREからOTAバージョンを取得します。
    • ガジェットのOTAバージョンの初期値は、ゼロでなければなりません。
    • Bluetooth接続または再接続中にEchoデバイスからガジェットにDiscoverディレクティブが送信された場合、ガジェットはfirmwareVersionフィールドにOTAバージョンを含むDiscover.Responseイベントで応答しなければなりません。
  • フラッシュサイズ – 既存のイメージへの上書きを避けるために、ガジェットには「アクティブ」なイメージ(現在実行中のイメージ)とOTAイメージの2つのイメージを格納できる十分なフラッシュが必要です。これらのイメージは、別々のパーティションに格納することができます。たとえば、ガジェットのメモリを次のように3つのセクションに分けることができます。

    | 0x0000 – 0x1FFF |(OTAによって変わらない不揮発性データ)
    | 0x2000 – 0x5999 |(イメージセクション1)
    | 0x6000 – 0x9FFF |(イメージセクション2)
    

    イメージセクション1と2は、アクティブセクションとOTAセクションを交互に切り替わることができます。アクティブセクションは、ガジェットが起動するときにRAMにロードするセクションです。OTAセクションは、ダウンロードされたOTAイメージを格納するためにのみ使用されます。ダウンロード後にOTAセクション内のOTAイメージを確認したら、ガジェットはブートアドレスをOTAイメージが含まれているセクションのアドレスに変更します。したがって、ガジェットはリセットされると、古いイメージではなく新しいイメージをロードします。

概要

ガジェットがBluetooth経由でEchoデバイスとペアリングされたら、Echoデバイスは、ガジェットに一連のコマンドを送ることによって、OTAアップデートの開始と提供を行うことができます。コマンドのプロトコルについては、OTAアップデートコマンドを参照してください。ガジェットはコマンドを実行し、場合によっては応答を返します。Echoデバイスとガジェットは、それらのコマンドと応答を、パケットの形式で説明されているシリアルポートプロトコル(SPP)のパケットの形式を使用して、Bluetooth経由で交換します。

次の図は、ガジェットとEchoデバイスがどのように対話してガジェットのファームウェアのOTAアップデートを実行するかを示しています。この手順では、Echoデバイスとガジェットが既にペアリングされていることを前提にしています。図に続いて、各ステップについて説明します。

ガジェットのOTAアップデート

OTAアップデート手順

このセクションでは、上の図で示したOTAアップデートの各ステップについて説明します。

RFCOMM接続の確立

このステップでは、最初のBluetooth接続フローのRFCOMM接続フェーズと同様に、EchoデバイスでガジェットとのSPPリンクを確立します。そのためには、EchoデバイスはガジェットにOTA用のRFCOMMサーバー(UUID 0x1101)と接続するリクエストを送信します。これは、イベントおよびディレクティブの交換に使用するサーバー(UUID 0x1201)とは別のRFCOMMサーバーです。この接続が確立するためには、サービス発見プロトコル(SDP)データベース設定に記載されている設定がガジェットのローカルSDPデータベースに含まれている必要があります。

OTAハンドシェイク

このステップでは、一部のEchoデバイスからガジェットに対してCMD_VERSIONコマンドを送信して、ガジェットのOTAのバージョンをリクエストします。ガジェットは、不揮発性メモリにある自身のOTAバージョンを返します。ただし、OTAアップデートを行う必要があるかどうかの判断は、Bluetooth接続または再接続中にDiscover.Responseイベントを使ってガジェットから報告されるfirmwareVersionに基づいて行われます。

ガジェットの準備状況の確認

一部のEchoデバイスは、ガジェットにCMD_BATTERYコマンドを送信し、ガジェットがOTAアップデートを実行するのに適した状態かを確認します。バッテリーレベルは、この判断に影響を与え得る要因の一例であるため、このコマンドは現時点ではCMD_BATTERYと呼びますが、変更される可能性があります。影響を与える要因にかかわらず、ガジェットが0x0A以上の値を返した場合は更新が可能な状態であることを示し、0x0A未満の値の場合は更新の準備が整っていないことを示します。

ガジェットのフラッシュの消去

ガジェットがアップデート可能であることを示した場合は、EchoデバイスはガジェットにCMD_ERASEコマンドを送信し、新しいイメージを格納するためにフラッシュを消去するよう指示します。消去が完了するまでに数秒かかる場合があります。消去のステータスを判断するために、EchoデバイスはガジェットにCMD_STATUSコマンドを繰り返し送信します。ガジェットは、0x00を返すことで、消去が完了したことを示します。

ガジェットのフラッシュへの新しいイメージの書き込み

ここで、Echoデバイスは一連のコマンドをガジェットに送信して、新しいファームウェアイメージをガジェットのフラッシュバッファーに書き込みます。

  • 最初のコマンドのCMD_WRITE_METADATAは、イメージのメタデータを書き込みます。
  • 次のコマンドのCMD_WRITE_SIGNATUREは、署名データを書き込みます。ガジェットは、このデータからOTAのバージョンを抽出し、バージョン値を新しいOTAのバージョンとして不揮発性メモリに格納します。
  • 最後のコマンドのCMD_WRITEは、イメージの残りの部分をダウンロードします。Echoデバイスは、イメージ全体がガジェットにダウンロードされるまでCMD_WRITEを繰り返して呼び出します。

ガジェットは、各CMD_WRITEを受信するごとに、CRC値を増分で計算できます。ガジェットは最後のCMD_WRITEを受け取ったときに、ダウンロードされたイメージのCRCを検証することができます。CRCの計算の詳細については、CMD_WRITEを参照してください。

アップデートの適用

その後、ガジェットはガジェット固有の方法でアップデートを適用します。この目的は、新たにダウンロードされたイメージをブートイメージにすることです。前提条件のセクションで示した例では、ガジェットはブートアドレスをアクティブセクションからOTAセクションに切り替えています。これにより、ガジェットがリセットされた場合に新しいイメージがロードされます。