エヌシーアイ総合システムの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時で変わります。
<記載途中>
随時追記していきます。