エヌシーアイ総合システムのtaguchyです。
普段は主にBtoCのWEBシステムや、BtoB向けWEB APIの開発などをしていて、最近はIoT関連でもお仕事させていただいています。
今回はLPWA「LoRaWAN」のフレームフォーマットを自分用のメモも兼ねて記載します。
フレームフォーマット
全体
LoRaWANのフレームフォーマットは以下のようなフィールド構成となっています。
| Preamble | PHDR | PHDR_CRC | PHYPayload | CRC |
|---|
- Preamble:同期用ビット
- PHDR:物理ヘッダ
- PHDR_CRC:物理ヘッダ整合性チェック用ビット
- PHYPayload:実データ
- CRC:整合性チェック用ビット(Uplink時のみ設定)
TCP/IPでも良く聞くようなフィールドが設定されていますね。
PHYPayload
PHYPayloadは以下のように分割できます。
| MHDR | MACPayload | MIC |
|---|---|---|
| 1 byte | 1~N byte | 4 byte |
| MHDR | Join-Request | MIC |
|---|---|---|
| 1 byte | 18 byte | 4 byte |
| MHDR | Join-Response | MIC |
|---|---|---|
| 1 byte | 12~28 byte | 4 byte |
- MHDR:MACヘッダ
- MACPayload or Join-Request or Join-Response:デバイスとサーバー間の通信に使用される領域
- MIC:整合性チェック用ビット
"MACPayload or Join-Request or Join-Response"はデバイスとサーバー間の通信に使用される領域になります。
"MHDR"の頭3bit(MType)の値によって以下のメッセージタイプに識別され、そのタイプによってデータサイズや用途が異なります。
| MType | メッセージタイプ | 備考 |
|---|---|---|
| 000 | Join Request | OTAAでのJOIN要求 |
| 001 | Join Accept | OTAAでのJOIN許可 |
| 010 | Unconfirmed Data Up | デバイスからのデータ送信(送達確認無し) |
| 011 | Unconfirmed Data Down | デバイスへのデータ送信(送達確認無し) |
| 100 | Confirmed Data Up | デバイスからのデータ送信(送達確認有り) |
| 101 | Confirmed Data Down | デバイスからのデータ送信(送達確認有り) |
| 110 | RFU | 未使用(将来のための予約値) |
| 111 | Proprietary | 独自メッセージフォーマット |
MHDR
MHDRは以下のように分割できます。
| MType | RFU | Major |
|---|---|---|
| 3 bit | 3 bit | 2 bit |
- MType:メッセージタイプ(前述)
- RFU:予備値
- Major:メジャーバージョン
Majorの値によってエンコードの有無などが決まるそうです。
※詳しい方がいましたらご教授いただきたいです。
MACPayload
MACPayloadは以下のように分割できます。
| FHDR | FPort | FRMPayload |
|---|---|---|
| 7~22 byte | 0~1 byte | 0~N byte |
- FHDR:FRAMEヘッダ
- FPort:ポートフィールド
- FRMPayload:アプリケーション(センサー)固有メッセージ
FPortの値は0~224になっており、
0はFRMPayloadの値がMACコマンドのみであることを示します。
1~223はアプリケーション固有の値、
224はMACレイヤーテスト用に予約された値です。
FHDR
FHDRは以下のように分割できます。
| DevAddr | FCtrl | FCnt | FOpts |
|---|---|---|---|
| 4 byte | 1 byte | 2 byte | 0~15 byte |
- DevAddr:LoRaネットワーク上のデバイスを一意に識別する値
- FCtrl:フレームコントロール値
- FCnt:送信カウンタ
- FOpts:オプション
FCtrlの内容はUplink時、Downlink時で変わります。
<記載途中>
随時追記していきます。