HCI (Bluetooth)

読み:エイチスィーアイ
外語:HCI: Host Controller Interface 英語
品詞:名詞

Bluetoothにおいて、コントローラーとホストの間で使われる通信プロトコル

目次

Bluetoothモジュールを制御したり、データを無線で送受信するために使う、一番最下層のインターフェイスである。

有線でも例えばEthernetならEthernetコントローラーICなどを使い、その上にEthernetのプロトコルから上を実装することになるが、Bluetoothのような無線でも同様にハードウェアとソフトウェアの分担があり、その境界となるのがHCIである。

HCIで使用する物理層は、Bluetoothチップとホストの都合に合わせて選択されるため、様々なものがある。

UARTUSBなどが使われることが多いようで、規格上このレイヤーをHCI Transportレイヤーという。UARTの場合、速度は実装依存だが、いわゆるRS-232Cで、データ長8ビット・ストップビット1ビット・パリティチェックなしの「N81」で、フロー制御はS制御というのが一般的のようである。

数値データはリトルエンディアンで表現されている。

種類

フレームは4種類存在する。

  • HCIコマンド (コントローラー制御用)
  • HCIイベント (コントローラー制御用)
  • ACLデータ (非同期通信、L2CAPパケット用)
  • SCOデータ (同期通信、音声通信用)

コマンドとイベント

ホストがBluetoothを使うためには、Bluetoothコントローラーに対してHCIコマンドを発行する。

コントローラーは順次コマンドを実行するが、同時に複数のコマンドを実行でき、さらにコマンドの処理時間はコマンドごとに違う。したがって、コマンドを送った順に処理が完了するわけではない。

そこで、コマンドの終了通知はイベントとして発行される。

トランスポート層

HCI UARTトランスポートレイヤー

UARTの場合、フレームの種類を表わすオクテットがあり、続いて実際のデータがある。

  • HCI packet indicator (8ビット)
  • HCI packet (任意長)

indicatorは、フレームの種類(4種類)に応じて、次のように定義されている。

  • 0x01 ‐ HCIコマンド
  • 0x02 ‐ ACLデータ
  • 0x03 ‐ SCOデータ
  • 0x04 ‐ HCIイベント

HCI packet部の詳細なフォーマットは後述されるが、例えばコマンドをモジュールに送る時は、まず0x01をUARTに送り、次いで16ビットのOpcodeを送り、さらにLength、そしてParameter、という形式になる。

HCI USBトランスポートレイヤー

USBの場合、フレームの種類はエンドポイントアドレスで表わす。

エンドポイントアドレスは、フレームの種類に応じて、次のように定義されている。

  • 0x00 ‐ HCIコマンド
  • 0x81 ‐ HCIイベント
  • 0x82/0x02 ‐ ACLデータ

ACLデータは、USBのバルク転送に対応する。また他に、0x83/0x03を使うアイソクロナス転送も定義されている。

フレームの構造

0x01 HCIコマンド

  • OpCode (16ビット)
    • OCF(OpCode Command Field) (10ビット)
    • OGF(OpCode Group Field) (6ビット)
  • Length (8ビット) Parameters部の長さ(バイト単位)
  • Parameters (最大255バイト)

0x02 ACLデータ

  • Connection Handle (12ビット)

    各接続ごとに持っている12ビットのユニークな値

  • Flags (4ビット)
    • PB (Packet Boundary Flag)

      L2CAPパケットの分割を示す2ビットの値

      • 00 : 予約
      • 01 : 分割されたL2CAPパケットの続き
      • 10 : (分割の有無を問わない)L2CAPパケットの最初のフラグメント
      • 11 : 予約
    • BC (Broadcast Flag)

      ブロードキャストかどうかを示す2ビットの値 (ホストとコントローラーの方向により若干意味が変わる)

      ホスト→コントローラーの場合

      • 00 : Point-to-Point、ブロードキャストではない
      • 01 : Actice Slave Broadcast
      • 10 : Parked Slave Broadcast
      • 11 : 予約

      コントローラー→ホストの場合

      • 00 : Point-to-Point
      • 01 : パーク状態ではないスレーブ
      • 10 : パーク状態のスレーブ (Parked Slave Broadcast)
      • 11 : 予約
  • Length (16ビット) Data部の長さ(バイト)
  • Data

0x03 SCOデータ

  • Connection Handle (12ビット)

    各接続ごとに持っている12ビットのユニークな値

  • (Resv) (4ビット)
  • Length (8ビット) Data部の長さ(バイト)

0x04 HCIイベント

  • Event Code (8ビット)

    0xFFはベンダー固有のデバッグイベント用、0xFEはBluetoothロゴテスト用として予約されている

  • Length (8ビット) Parameters部の長さ(バイト)
  • Parameters (最大255バイト)
用語の所属
Bluetooth

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club