OpenBlink Bluetooth 通信仕様

May 19, 2025 · View on GitHub

概要

このドキュメントは OpenBlink システムの Bluetooth Low Energy(BLE)通信仕様を説明します。サービスと特性の UUID、プロトコルの詳細、データ構造、通信フローが含まれています。

サービスと特性

  • サービス UUID: 227da52c-e13a-412b-befb-ba2256bb7fbe
  • 説明: OpenBlink デバイス通信のためのプライマリサービス

特性

特性UUIDプロパティ説明
プログラムad9fdd56-1135-4a84-923c-ce5a244385e7書き込み、応答なし書き込みバイトコード転送と実行に使用
コンソールa015b3de-185a-4252-aa04-7a87d38ce148通知デバッグ出力と通知に使用
ステータスca141151-3113-448b-b21a-6a6203d253ff読み取りデバイスステータス情報を提供

プロトコル

  • バージョン: 0x01
  • 説明: OpenBlink デバイスでバイトコードを転送および実行するためのプロトコル

コマンドタイプ

コマンドコード説明
データ'D'バイトコードのチャンクを転送
プログラム'P'転送されたバイトコードを実行
リセット'R'デバイスをリセット
リロード'L'バイトコードをリロード

データ構造

  • サイズ: 2 バイト
  • 説明: すべての Blink プロトコルコマンドの共通ヘッダー
フィールドサイズ説明
versionuint8_t1 バイトBlink プロトコルバージョン(0x01)
commanduint8_t1 バイトコマンドタイプ('D'、'P'、'R'、または'L')
  • サイズ: 6 バイト + データ
  • 説明: データチャンク転送のための構造体
フィールドサイズ説明
headerBLINK_CHUNK_HEADER2 バイト共通ヘッダー
offsetuint16_t2 バイトバイトコードバッファ内のオフセット
sizeuint16_t2 バイトデータチャンクのサイズ
datauint8_t[]可変実際のバイトコードデータ
  • サイズ: 8 バイト
  • 説明: プログラム実行コマンドのための構造体
フィールドサイズ説明
headerBLINK_CHUNK_HEADER2 バイト共通ヘッダー
lengthuint16_t2 バイトバイトコードの総長
crcuint16_t2 バイトCRC16 チェックサム
slotuint8_t1 バイトバイトコードのターゲットスロット
reserveduint8_t1 バイト将来の使用のために予約

通信フロー

バイトコード転送と実行

クライアント                                OpenBlinkデバイス
  |                                               |
  |--- OpenBlinkサービスの発見 ------------------>|
  |<-- サービスと特性の発見 ----------------------|
  |                                               |
  |--- データチャンク1をプログラム特性に書き込み ->|
  |--- データチャンク2をプログラム特性に書き込み ->|
  |--- データチャンクnをプログラム特性に書き込み ->|
  |                                               |
  |--- プログラムコマンドをプログラム特性に書き込み >|
  |                   (CRCチェック)               |
  |                                               |
  |--- リセット/リロードコマンドの書き込み ------->|
  |                                               |

BLE イベント

イベント説明
BLE_EVENT_INITIALIZEDBLE スタックが初期化された
BLE_EVENT_CONNECTEDBLE 接続が確立された
BLE_EVENT_DISCONNECTEDBLE 接続が終了した
BLE_EVENT_RECEIVEDBLE 経由でデータを受信した
BLE_EVENT_SENTBLE 経由でデータを送信した
BLE_EVENT_BLINKBlink バイトコードを受信した
BLE_EVENT_STATUSステータス情報が要求された
BLE_EVENT_REBOOT再起動要求を受信した
BLE_EVENT_RELOADリロード要求を受信した

エラー処理

エラー通知

バイトコード転送または実行中のエラーは、コンソール特性を通じて通知されます。通知にはエラーメッセージ文字列が含まれます。

一般的なエラー

エラー説明
"ERROR: Blink version mismatch"プロトコルバージョンがサポートされていない
"ERROR: Blink data size error"データチャンクサイズが予想サイズと一致しない
"ERROR: Size exceeds buffer limits"バイトコードサイズが許容最大サイズを超えている
"ERROR: CRC mismatch"CRC チェックサム検証に失敗した
"ERROR: Blink program error"バイトコード実行中のエラー
"ERROR: Blink unknown type"不明なコマンドタイプを受信した

実装に関する注意

最大バイトコードサイズ

最大バイトコードサイズは実装内でBLINK_MAX_BYTECODE_SIZEとして定義されています。

CRC 計算

CRC16 チェックサムは以下のパラメータを使用してcrc16_reflect関数で計算されます:

  • 初期値:0xFFFF
  • 多項式:0xd175(データ長 32751 ビットまでのハミング距離 4 保護を提供)
  • 入力:バイトコードバッファ
  • 長さ:バイトコード長

参考文献: https://users.ece.cmu.edu/~koopman/crc/index.html