LoT ラブオンテック

非モテ男の、非モテ男による、【女の子にモテたい】非モテ男のためIT活用ブログ

IoT

LoRaWANのフレームフォーマットの詳細(MAC層)

更新日:



※このフォーマットはClassAのものです。

LoRaWANは使用環境(背景)によって、

クラスA/B/Cのように3分類されています。

ですが、クラスが異なっていても

フォーマットに大きな変化はないです。




LoRaWANの標準フォーマットは、

アプリケーション層より

下位層を定義しています。



今回はMAC層のフォーマットです。

LoRaWANのフレームフォーマットの

全体は次のようになっています。



4層に見えますが機能面を考慮すると、

L1・L2がLoRaWANによって定義された

フォーマットと考えて良いでしょう。




上の画像を見て分かる通り、

LoRaWANのMAC層(PHY Payload)は、

MACヘッダー、MACペイロード、MIC


以上の3つで構成されています。

※MIC : Message Integrity Code



1byte 0~Mbytes 4bytes
MHDR MAC Payload MIC




それでは順にMAC層を見ていきましょう。


MHDR(MAC Header)のフォーマット



MHDRつまりMACヘッダーは、

次の3つで構成されています。

  • MType (Message Type, 3ビット)
  • RFU (Reserved for Future Usage, 3ビット)
  • Major(2ビット)




まずはMTypeについてです。

Message Type Description
000 Join Request
001 Join Accept
010 Unconfirmed Data Up
011 Unconfirmed Data Dowm
100 Confirmed Data Up
101 Confirmed Data Down
110 RFU
111 Proprietary



Join Request / Join Accept :

OTAA (Over-The-Air Activation)をする際に

ネットワーク参加のために使います。

エンドデバイスのアクティベーションは、

OTAAとABP (Activation By Personalization)

この2つの方法があります。



Confirmed Data :

データを送信するためのメッセージで、

受信者からのAckによる返信が必要です。



Unconfirmed Data :

データを送信するためのメッセージで、

受信者からのAckによる返信が不要です。



UP / Down はそれぞれ、

アップ / ダウンリンクを示します。



RFU :

予約フィールドです。



Proprietary :

このメッセージタイプは、

標準のフォーマットではなく、

独自に機能拡張(改変)した場合に用いる。




MACヘッダーのMType以外は、

次のようになっています。




RFU :

将来のための予約フィールドです。

現段階ではこのフィールドは使用せず、

フレームには1をセットします。



Major :

LoRaWANのフレームフォーマットの

バージョンを意味します 。

00 LoRaWAN R1
01 RFU
10 RFU
11 RFU


今後バージョンアップがあれば、

RFUのところが定義されていくでしょう。


MAC Payloadのフォーマット


MACペイロードには、

フレームヘッダーと呼ばれる

フィールドなどが格納されます。


7~23 bytes 0~1 byte 0~N bytes
FHDR FPort FRMPayload



それではFHDRから見ていきましょう。


FHDR(Frame Header)のフォーマット


FHDRはフレームコントロールや

アドレスなどが含まれます。

4 bytes 1 byte 2 bytes 0~15 bytes
DevAddr FCtrl FCnt FOpts


DevAddr :


デバイスのアドレスを入れます。



FCtrl :


フレームコントロールです。

他の無線規格だとフレームコントロールに

フレーム(メッセージ)タイプが入るのですが

LoRaWANが違います。


またアップリンクとダウンリンクとで

フォーマットが少し異なります。

数字は何ビット目かを表します。

FCtrl全体では1バイトです。


FCtrl (Up-Link)
7 6 5 4 3~0
ADR ADRACKReq ACK ClassB FOptsLen
FCtrl (Down-Link)
7 6 5 4 3~0
ADR RFU ACK FPending FOptsLen


ADR (Adaptive Data Rate):


エンドデバイスは個々に

データレートを最適化出来ます。


1ビットのフィールドなので、

0もしくは1が格納されます。


1:所属ネットワークの最速レート

0:デフォルトのまま


固定されているエンドデバイスなら

1をセットしても大丈夫ですが、

移動体の場合であれば、

0をセットしてデフォルトの

データレートを使用した方が実用的です。


ちなみに1がセットされている場合は、

MACコマンドによってデータレートが

可能な限り最速になるように調整します。



ADRACKReq :

ADR acknowledgment request

上記によりデータレートを高くしたら、

エンドデバイスは周期的に、

まだそのレートを有効化を維持するために

このビットフィールドを使います。


エンドデバイスが、デフォルトの

データレートを使う場合は、

このフィールドは使われることはありません。



ACK :

ネットワークでおなじみのAckです。


Class B :

エンドデバイスがClassBモードで

送信する場合は1がセットされます。



FPending (Frame Pending):

ゲートウェイがエンドデバイスに対して、

送信すべきデータを保持している場合に

このビットフィールドは使われます。

なのでダウンリンクのみで使われます。




FOptsLen :

FHDR内のFOptsは可変なので、

その長さを示します。



FCnt (Frame counter):

各エンドデバイスは、2つの

フレームカウンターを保有しています。

FCntUp と FCntDownです。


これらは、データフレームの

追跡(track)のために使用されます。


エンドデバイスが送信した場合は、

アップリンクのFCntを

エンドデバイスが受信した場合は、

ダウンリンクのFCntをインクリメントします。


データフレームを送受信したら、

値を1ずつ増加させていきます。



FOpts (Frame options) :

MACコマンドが格納されます。

MACコマンドはフレームペイロードと

共存が出来ません(後述)。



FPort と FRM Payload


ここで一度、読み方と

MAC Payloadの確認しておきましょう。


FHDR : フレームヘッダー
FPort : フレームポート
FRM Payload : フレームペイロード

7~23 bytes 0~1 byte 0~N bytes
FHDR FPort FRMPayload


FPortの次のフィールドである、

FRM Payloadが空でない限り、

FPortには何かかしらの値が入ります。



ちなみにFRM payloadには、

アプリケーションデータが入ります。



またFRM Palyloadが空でも、

FHDRのFOptsにMACコマンドが

格納されている場合でも、

FPortは値をとります。


Value Description
0(0x00) MAC command
1~223(0x01~0xDF) Application Specific
224~255(0xE0~0xFF) RFU


FPort(値)は1バイトサイズなので、

0~255までの範囲です。



MACコマンドもFRM Payloadも

どちらも存在しない場合は、

FPortには何も格納されません。

FPortがフィールドから存在しなくなります。



注意したいのが、FPortが "0" に

セットされているということは、

0という値が存在していることになります。



参考程度にMACコマンドを載せておきます。

参考資料より一部抜粋したものです。



以下のコマンドはLoRaWAN初期のものです。

version1.1の現在はもう少し追加されました。

CID Command End-device Gateway Description
0x02 LinkCheckReq × Used by an end-device to validate its connectivity to a network
0x02 LinkCheckAns × Answer to LinkCheckReq Command
0x03 LinkADRReq × Request the end-device to change data rate
0x03 LinkADRAns × Acknowledges the LinkADRReq command
0x04 DutyCycleReq × Sets the maximum aggregated transmit duty-cycle of a device
0x04 DutyCycleAns × Acknowledges a DutyCycleReq command
0x05 RXParamSetupReq × Sets the reception slot parameters
0x05 RXParamSetupAns × Acknowledges a RXSetupReq command
0x06 DevStatusReq × Requests the status of the end-device
0x06 DevStatusAns × Returns the status of the end-device, namely its battery level and its demodulation margin
0x07 NewChannelReq × Creates or modifies the definition of a radio channel
0x07 NewChannelAns × Acknowledges a NewChannelReq command
0x08 RxTimingSetupReq × Sets the timing of the receptions slots
0x08 RXTimingSetipAns × Acknowledges RxTimingSetupReq command
0x80~0xFF Proprietary × × Reserves for proprietary network command extentions



End-DeviceかGatewayの×印は、

使用できないという意味です。

つまり、アップリンク用コマンドか

ダウンリンク用コマンドかで分かれています。




MAC層の最後のMICについてです。

MIC (Message Integrity Code)


メッセージの完全性を

確認するためのコードです。

MICはAES-CMACアルゴリズムに

基づいて算出されます。



ちなみにこのMICという言葉は、

LoRaWANで出てきた目新しい言葉ではなく、

IEEE802.11などでも出来てきます。



LoRaWANのセットアップする際に出てくる、

NwksKeyはMICの計算で使用されます。




以上です。

最後まで読んでいただきありがとうございました。



参考資料:
・LoRaWAN Specification(2015)
https://www.rs-online.com/designspark/rel-assets/ds-assets/uploads/knowledge-items/application-notes-for-the-internet-of-things/LoRaWAN%20Specification%201R0.pdf
・LoRaWAN Specification v1.1
https://lora-alliance.org/resource-hub/lorawanr-specification-v11

-IoT

Copyright© LoT ラブオンテック , 2020 All Rights Reserved Powered by STINGER.