OTAアップデートコマンド(Classic Bluetooth)
このページでは、ガジェットのファームウェアをOTA(無線)アップデートするためにEchoデバイスからClassic Bluetooth通信でガジェットに送信されるコマンドについて説明します。全体のプロセスについてはOTAアップデートプロセス(Classic Bluetooth)を参照してください。
コマンドとは、Echoデバイスがガジェットに送信するリクエストです。その後、ガジェットはEchoデバイスに応答を送信します。まず、リクエストや応答を含むパケットの形式について説明します。次に、リクエストと応答に関連する特定のコマンドとフィールドの一覧を示します。
パケットの形式
このセクションでは、OTAアップデートのプロセス中にEchoデバイスとガジェットの間で通信を行う際のパケットの形式について説明します。
ディレクティブやイベントと同様に、Echoデバイスとガジェットは、Bluetooth経由でシリアルポートプロトコル(SPP)を使用してOTAアップデートのパケット交換を行います。ただし、OTAアップデートで使用されるパケット形式は、ディレクティブやイベントの交換の際に使用されるパケット形式とは若干異なります。OTAアップデートでは、別のRFCOMM接続も使用されます(OTAアップデートで使用されるRFCOMM UUIDは0x1101ですが、ディレクティブとイベントで使用されるRFCOMM UUIDは0x1201です)。
OTAアップデートに使用されるパケットには、次のルールが適用されます。
- パケットレベルの同期では、次の特殊なバイト値が定義されます。
- Start of frame(SOF)=
0xF0
- End of frame(EOF)=
0xF1
- Escape(ESC)=
0xF2
- Start of frame(SOF)=
- パケットは常にSOFバイトで始まり、EOFバイトで終わります。
- パケット内のデータにSOF、EOF、またはESC値が含まれる場合、ESCバイトに続いてESCでXOR(排他的論理和)が行われた元の値を挿入することにより、値は「エスケープ」されます。
- エスケープ文字を含まないパケットの最大サイズは264バイトです。
リクエストの形式
Echoデバイスからガジェットへのリクエストの形式は次のとおりです。

応答の形式
ガジェットは、Echoデバイスから送信されるすべてのコマンドに応答する必要があります。ガジェットからの応答の形式は次のとおりです。

エラーコード
応答のError
フィールドで想定される値は次のとおりです。
エラーコード | エラータイプ | 説明 |
---|---|---|
|
|
コマンドは正常に実行されました。 |
|
|
コマンドがサポートされていません。 |
|
|
ファームウェアイメージが無効です。 |
|
|
コマンドパケットのチェックサムが無効です。 |
データ検証
OTAアップデート時には、次の2種類のデータ検証が行われます。
- 個々のリクエストと応答のチェックサム - このチェックサムで、ガジェットとEchoデバイスは、個々のリクエストと応答が破損していないかどうかを確認します。このチェックサムは、Echoデバイスからの各リクエストの
Checksum
フィールドにあり、ガジェットは応答時にChecksum
を提供する必要があります。 - バイナリーイメージ全体のCRC値 - Echoデバイスは、
CMD_WRITE_METADATA
コマンドのCRC32
フィールドでバイナリーイメージ全体のCRC値を送信します。ガジェットがこのCRC値を使用する方法は複数あります。たとえば、ガジェットはこのCRC値を、すべてのCMD_WRITE
コマンドから受信したデータを使用して算出されたCRC値と比較して、Echoデバイスからイメージを正常に受信したかどうかを確認できます。また、ガジェットはCRCを使用して、イメージが正常にフラッシュできるようにダウンロードされたかどうかを確認することもできます。バイナリーイメージ全体のCRC値を計算する際に含めるデータは、1)CMD_WRITE_SIGNATUREの
ペイロード(予約済み4バイト+OTAVersion
4バイト+署名の残りの部分)と、2)最後のCMD_WRITE
の末尾のゼロを除くすべてのCMD_WRITE
データです。
コマンドリファレンス
このセクションでは、次のコマンドで使用されるリクエストと応答について説明します。
CMD_BATTERY(0x09)
このコマンドの目的は、ガジェットがOTAアップデートを実行するのに適した状態であるかどうかを確認することです。バッテリーレベルは、この判断に影響を与え得る要因の一例であるため、このコマンドは現時点ではCMD_BATTERY
と呼びますが、変更される可能性があります。
影響を与える要因にかかわらず、ガジェットが0x0A
以上の値を返した場合は更新が可能な状態であることを示し、0x0A
未満の値の場合は更新の準備が整っていないことを示します。
リクエストのフィールド
フィールド | バイト数 | 説明 | 値 |
---|---|---|---|
|
1 |
フレーム開始インジケーターです。 |
|
|
1 |
コマンドIDです。 |
|
|
1 |
予約済みです。 |
|
|
2 |
このリクエストのチェックサムです。 |
|
|
1 |
フレーム終了インジケーターです。 |
|
応答のフィールド
フィールド | 型 | 説明 | 値 |
---|---|---|---|
|
1 |
フレーム開始インジケーターです。 |
|
|
1 |
この応答で適用されるコマンドのIDです。 |
|
|
1 |
ガジェットから報告されたコマンドのエラーステータスです。 |
エラーコード( |
|
1 |
更新を実行するガジェットの準備状況のインジケーターです。 |
範囲: |
|
2 |
この応答のチェックサムです。 |
|
|
1 |
フレーム終了インジケーターです。 |
|
CMD_ERASE(0x03)
このコマンドは、ガジェットにフラッシュバッファーの消去をリクエストします。
消去が完了するまでに数秒かかる場合があります。したがって、CMD_ERASE
を送信した後、ガジェットが0x00
を返して消去が完了したことを示すまで、EchoデバイスはガジェットにCMD_STATUS
コマンドを繰り返し送信します。
リクエストのフィールド
フィールド | バイト数 | 説明 | 値 |
---|---|---|---|
|
1 |
フレーム開始インジケーターです。 |
|
|
1 |
コマンドIDです。 |
|
|
1 |
予約済みです。 |
|
|
2 |
このリクエストのチェックサムです。 |
|
|
1 |
フレーム終了インジケーターです。 |
|
応答のフィールド
フィールド | バイト数 | 説明 | 値 |
---|---|---|---|
|
1 |
フレーム開始インジケーターです。 |
|
|
1 |
この応答で適用されるコマンドのIDです。 |
|
|
1 |
ガジェットから報告されたコマンドのエラーステータスです。 |
エラーコード( |
|
2 |
この応答のチェックサムです。 |
|
|
1 |
フレーム終了インジケーターです。 |
|
CMD_STATUS(0x02)
このコマンドは、ガジェットにフラッシュバッファーのステータスをリクエストします。目的は、フラッシュバッファーの書き込みと消去の完了を確認することです。
リクエストのフィールド
フィールド | バイト数 | 説明 | 値 |
---|---|---|---|
|
1 |
フレーム開始インジケーターです。 |
|
|
1 |
コマンドIDです。 |
|
|
1 |
予約済みです。 |
|
|
2 |
このリクエストのチェックサムです。 |
|
|
1 |
フレーム終了インジケーターです。 |
|
応答のフィールド
フィールド | バイト数 | 説明 | 値 |
---|---|---|---|
|
1 |
フレーム開始インジケーターです。 |
|
|
1 |
この応答で適用されるコマンドのIDです。 |
|
|
1 |
ガジェットから報告されたコマンドのエラーステータスです。 |
エラーコード( |
|
1 |
フラッシュバッファーが消去またはコピーされているかどうかを示します。 |
|
|
2 |
この応答のチェックサムです。 |
|
|
1 |
フレーム終了インジケーターです。 |
|
CMD_VERSION(0x08)
このコマンドは、ガジェットに現在インストールされているファームウェアイメージのOTAバージョンを返すようリクエストします。
リクエストのフィールド
フィールド | バイト数 | 説明 | 値 |
---|---|---|---|
|
1 |
フレーム開始インジケーターです。 |
|
|
1 |
コマンドIDです。 |
|
|
1 |
予約済みです。 |
|
|
2 |
このリクエストのチェックサムです。 |
|
|
1 |
フレーム終了インジケーターです。 |
|
応答のフィールド
フィールド | バイト数 | 説明 | 値 |
---|---|---|---|
|
1 |
フレーム開始インジケーターです。 |
|
|
1 |
この応答で適用されるコマンドのIDです。 |
|
|
1 |
ガジェットから報告されたコマンドのエラーステータスです。 |
エラーコード( |
|
4 |
ガジェットに現在インストールされているファームウェアのOTAバージョンを示す32ビットの符号なし整数(ビッグエンディアン)です。 |
ガジェットが最初のファームウェアアップデートを受信するまで、OTAバージョンは |
|
2 |
この応答のチェックサムです。 |
|
|
1 |
フレーム終了インジケーターです。 |
|
CMD_WRITE(0x05)
このコマンドは、Echoデバイスからガジェットにバイナリーイメージをダウンロードします。これは、Echoデバイスから繰り返し送信されます。Echoデバイスは、CMD_WRITE_METADATA
およびCMD_WRITE_SIGNATURE
を送信した後にこのコマンドを送信します。
CMD_WRITE
のCRC値の計算については、次の点に注意してください。
- ガジェットは、各
CMD_WRITE
を受信するごとに、CRC値を増分で計算できます。ガジェットが最後のCMD_WRITE
を受信する際に得られるイメージ全体のCRC値は、CMD_WRITE_METADATA
から受信したCRC32値
と比較することができます。 - 最後の
CMD_WRITE
パケットには、データサイズを水増しして256バイトにするために末尾のゼロが含まれている場合があります。CRC値の計算では、これらの末尾のゼロを書き込んだり、算入したりしないでください。CMD_WRITE
で受信したデータの合計サイズを追跡し、それをCMD_WRITE_METADATA
で受信したデータのサイズと比較することで、末尾のゼロを削除できます。
リクエストのフィールド
フィールド | バイト数 | 説明 | 値 |
---|---|---|---|
|
1 |
フレーム開始インジケーターです。 |
|
|
1 |
コマンドIDです。 |
|
|
1 |
予約済みです。 |
|
|
4 |
OTAイメージの現在のセクションを書き込むアドレス(リトルエンディアン)です。 |
この値は |
|
256 |
|
任意の値 |
|
2 |
このリクエストのチェックサムです。 |
|
|
1 |
フレーム終了インジケーターです。 |
|
応答のフィールド
フィールド | バイト数 | 説明 | 値 |
---|---|---|---|
|
1 |
フレーム開始インジケーターです。 |
|
|
1 |
この応答で適用されるコマンドのIDです。 |
|
|
1 |
ガジェットから報告されたコマンドのエラーステータスです。 |
エラーコード( |
|
2 |
この応答のチェックサムです。 |
|
|
1 |
フレーム終了インジケーターです。 |
|
CMD_WRITE_METADATA(0x10)
このコマンドは、イメージのメタデータをガジェットのフラッシュに書き込みます。これは、OTAアップデートの書き込みフェーズ中にEchoデバイスがガジェットに送信する最初の「書き込み」コマンドです。次にCMD_WRITE_SIGNATURE
を送信し、その後CMD_WRITE
を繰り返し送信します。
リクエストのフィールド
フィールド | バイト数 | 説明 | 値 |
---|---|---|---|
|
1 |
フレーム開始インジケーターです。 |
|
|
1 |
コマンドIDです。 |
|
|
1 |
予約済みです。 |
|
|
4 |
ファイル記述子セクターです。 |
常に |
|
4 |
ビッグエンディアン表記のファイルサイズです。 |
たとえば、164,136( |
|
4 |
バイナリーイメージファイル全体のCRC32値(パディングやエスケープ文字は含まない)です。 |
たとえば、 |
|
パケットの残りの部分 |
未定義のパディングです。 |
通常、すべてのバイトは |
|
2 |
このリクエストのチェックサムです。 |
|
|
1 |
フレーム終了インジケーターです。 |
|
応答のフィールド
フィールド | バイト数 | 説明 | 値 |
---|---|---|---|
|
1 |
フレーム開始インジケーターです。 |
|
|
1 |
この応答で適用されるコマンドのIDです。 |
|
|
1 |
ガジェットから報告されたコマンドのエラーステータスです。 |
エラーコード( |
|
2 |
この応答のチェックサムです。 |
|
|
1 |
フレーム終了インジケーターです。 |
|
CMD_WRITE_SIGNATURE(0x11)
このコマンドは、署名データをガジェットのフラッシュに書き込みます。これは、CMD_WRITE
の前、CMD_WRITE_METADATA
の後にEchoデバイスから送信されます。次の点に注意してください。
- このコマンドのペイロードはOTAイメージの最初のセクターと見なされるため、
CMD_WRITE_METADATA
のCRC値の計算に含まれます。 - ガジェットは、
OTAVersion
を新しいOTAバージョンとして不揮発性メモリに格納し、コマンドを受信したことを示すエラーコード0x00
で、このコマンドに応答する必要があります。
リクエストのフィールド
フィールド | バイト数 | 説明 | 値 |
---|---|---|---|
|
1 |
フレーム開始インジケーターです。 |
|
|
1 |
コマンドIDです。 |
|
|
1 |
ヘッダーの予約済みバイトです。 |
|
|
4 |
ファイル記述子セクターです。 |
常に |
|
4 |
ペイロードの予約済みバイトです。 |
なし |
|
4 |
OTAアップデートのバージョンです。 |
なし |
|
パケットの残りの部分 |
署名データです(省略可能)。 |
なし |
|
2 |
このリクエストのチェックサムです。 |
|
|
1 |
フレーム終了インジケーターです。 |
|
応答のフィールド
フィールド | バイト数 | 説明 | 値 |
---|---|---|---|
|
1 |
フレーム開始インジケーターです。 |
|
|
1 |
この応答で適用されるコマンドのIDです。 |
|
|
1 |
ガジェットから報告されたコマンドのエラーステータスです。 |
エラーコード( |
|
2 |
この応答のチェックサムです。 |
|
|
1 |
フレーム終了インジケーターです。 |
|