LoRaWAN 規範 1.0 (章節5)
最近在做LoRa, LoRaWAN協議略微複雜,邊讀邊翻譯,現在把
部分關鍵的翻譯分享給各位做物聯網的同行。
當然裡面摻雜了一些我的個人筆記,希望對大家有所幫助。
如果哪裡有問題,歡迎應各位留言或者郵件指正。翻譯很辛苦,轉載請註明出處和源連結
宣告
本文翻譯版本已更新至LoRaWAN 1.0.2。
5 MAC Commands
網路管理時會在網路伺服器和終端MAC層之間傳輸一系列MAC命令。MAC層命令對應用、應用伺服器以及終端裝置上的應用永不可見。
一幀資料中可以包含任何MAC命令序列,MAC命令既可以放在FOpts中和正常資料一起傳送;也可以放在FRMPayload
注意:
不想被別人截獲破解的命令要放到FRMPayload中單獨傳送
一條MAC命令由一個位元組的命令ID(CID)和特定的命令序列組成,命令序列可以是空。
CID | 命 令 | 終端傳送 | 閘道器傳送 | 簡介 |
---|---|---|---|---|
0x02 | LinkCheckReq | × | 用於終端驗證網路連線 | |
0x02 | LinkCheckAns | × | 迴應驗證請求, 同時包含終端接收質量相關的估算的訊號功率 | |
0x03 | LinkADRReq | × | 請求終端改變資料率、傳輸功率、接收率或者通道 | |
0x03 | LinkADRAns | × | LinkRateReq的應答 | |
0x04 | DutyCycleReq | × | 設定裝置的最大總髮射佔空比 | |
0x04 | DutyCycleAns | × | DutyCycleReq的應答 | |
0x05 | RXParamSetupReq | × | 設定接收時隙相關引數 | |
0x05 | RXParamSetupAns | × | RXSetupReq的應答 | |
0x06 | DevStatusReq | × | 請求終端狀態 | |
0x06 | DevStatusAns | × | 返回終端裝填,即電量和解調情況 | |
0x07 | NewChannelReq | × | 建立或修改無線電通道 | |
0x07 | NewChannelAns | × | NewChannelReq的應答 | |
0x08 | RXTimingSetupReq | × | 設定接收時隙的時間 | |
0x08 | RXTimingSetupAns | × | RXTimingSetupReq的應答 | |
0x09 | TxParamSetupReq | x | 網路伺服器用它來設定終端裝置停留時間的最大值和最大EIRP(等效全向輻射功率),與地域相關 | |
0x09 | TxParamSetupAns | x | TxParamSetupReq命令的回覆 | |
0x0A | DlChannelReq | x | 通過將下行頻率與上行頻率進行偏移,來修改下行R1的無線通道(即:建立不對稱通道) | |
0x0A | DlChannelAns | x | DlChannelReq命令的回覆 | |
0x80 ~ 0xFF | Proprietary | × | × | 保留命令 |
注:
MAC命令長度不固定,這就要求MAC命令執行端必須隱式獲知。因為無法忽略不明的MAC命令,而且一旦遇到不明的MAC命令,就會導致處理MAC命令佇列的程序終止。因此,建議遵循首先對MAC命令進行說明的LoRaWAN規範。這樣的話,所有當前版本LoRaWAN規範中實現的MAC命令都可以被更高版本的規範相容處理。
注:
終端裝置所有被網路伺服器調整過的內容(例如:RX2,新建立或調整過的通道)僅在下次入網前有效。因此,終端裝置每次重新入網之後都會使用預設引數配置,而網路伺服器則根據需要對這些值重新調整。
5.1 鏈路檢查 (LinkCheckReq和LinkCheckAns)
終端使用LinkCheckReq命令檢查與網路的連通性,該命令不含荷載(payload)。
網路伺服器收到(一個或多個)閘道器轉發過來的LinkCheckReq後回覆一條LinkCheckAns命令。
大小(位元組) | 1 | 1 |
---|---|---|
LinkCheckAns Payload | Margin | GwCnt |
Margin(解調餘量)是最近一條被成功收到的 LinkCheckReq
命令的鏈路預算(單位dB
),是一個8位(bits)無符號整型,範圍 [0,254]。值為 0
表示在解調的下限(0dB或者沒有餘量)上收到了資料,值20
表示閘道器在比解調下限高出 20 dB
的訊號強度上收到了資料。255
是保留值。
GwCnt是最近一次成功收到 LinkCheckReq
的閘道器的數量。
5.2 速率自適應 LinkADRReq
和LinkADRAns
網路伺服器通過傳送 LinkADRReq
命令對終端裝置速率進行調整。
大小(位元組) | 1 | 2 | 1 |
---|---|---|---|
LinkADRReq Payload | DataRate_TXPower | ChMask | Redundancy |
大小(位 bits) | [7:4] | [3:0] |
---|---|---|
DataRate_TXPower | DataRate | TXPower |
資料速率(DataRate)以及TX輸出功率(TXPower)和地理區域相關,參考《LoRaWAN地域相關引數手冊》(《LoRaWAN Regional Parameters document》)。命令中的TX輸出功率指的是裝置可以使用的最大發射功率。指定一個能夠使用的比當前在使用的更高的功率的命令執行成功後,此時,終端裝置將使用盡可能大(不超過命令設定以及物理允許的範圍)的功率回覆確認訊息。通道掩碼(ChMask)通過對最低有效位相應的位置填0
來對上行通道的可用性進行編碼,通道列表如下:
對應原文:
An end-device will acknowledge as successful a command which specifies a higher transmit power than it is capable of using and should, in that case, operate at its maximum possible power.
表5:通道狀態表
第幾位 | 可用通道 |
---|---|
0 | Channel 1 |
1 | Channel 2 |
.. | .. |
15 | Channel 16 |
ChMask中某位是1
,表示啟用該位對應的上行通道(用來進行上行傳輸的通道),只有終端裝置當前使用的資料速率可以在該通道上使用時,該通道才可以使用;如果是0
,則表示對應的上行通道不可用。終端裝置當前使用的通道要設為1
第幾位 | 7 | [6:4] | [3:0] |
---|---|---|---|
Redundancy bits | RFU | ChMaskCntl | NbTrans |
冗餘(Redundancy)位中,NbTrans表示每條上行訊息重複傳送的次數,僅用於 unconfirmed
型別的上行訊息。預設值為1
,表示每幀只上傳一次。有效範圍 [1:15]。終端裝置收到NbTrans == 0時仍然使用預設值。網路管理員通過控制節點的上行冗餘來保證給定的服務質量。終端裝置在重傳期間照常跳頻,每次重傳後也會等待接收資料,直到接收視窗過期。在RX1短暫視窗期間的任一時刻接收到下行訊息都會停止該訊息的重傳。對於A類來說,RX2情況與RX1相同。
通道掩碼控制(ChMaskCntl)欄位負責控制ChMask的掩碼位。當網路上通道的實現超過16個,該欄位必須是一個非0值。用它來控制ChMask使用哪16個通道,還可以用它來全域性性的開啟或關閉指定調製方式的所有通道。該欄位的具體使用和地域相關,具體見《LoRaWAN地域相關引數手冊》。
網路伺服器可能會在一條下行訊息中包含多個LinkAdrReq命令。終端裝置為了配置通道掩碼,會按照命令在下行訊息中的出現的順序處理所有LinkAdrReq訊息。對於命令中的這些ChMaskCntl,終端裝置要麼全部接受要麼全部拒絕,同時為它們的 LinkAdrAns 設定相同的 Channel Mask ACK 。對於 DataRate、TXPower 和 NbTrans ,因為它們是全域性性設定(後面的值會覆蓋前面的值),所以終端裝置只按照命令中的最後一條LinkADRReq執行。同樣,對於這些,終端裝置也會為它們在 LinkAdrAns 中各自設定相同的 ACK,來指明它們最終被接受了還是被拒絕了。
通道頻率與地域有關,具體見第六章。
終端收到 LinkADRReq
後回覆 LinkADRAns
命令。
大小(位元組) | 1 |
---|---|
LinkADRAns Payload | Status |
大小(位) | [7:3] | 2 | 1 | 0 |
---|---|---|---|---|
Status bits | RFU | Power ACK | Data rate ACK | Channel mask ACK |
LinkADRAns Status釋義如下:
表6:LinkADRAns
狀態位定義
欄位 | 0 | 1 |
---|---|---|
Channel mask ACK | 要使用的通道未定義;或通道掩碼想關閉所有通道。忽略該命令,終端狀態不改變 | 設定成功 |
Data rate ACK | 要使用的速率未定義;或者在指定的通道掩碼下,不支援該資料速率(所有在用的通道都不支援該速率)。命令被忽略,終端狀態不改變 | 設定成功 |
Power ACK | 終端未定義該功率等級。命令被忽略,終端狀態不改變 | 設定成功 |
以上三個欄位任意一個是0,命令就會執行失敗,節點保持之前的狀態不變。
5.3 終端的發射佔空比(DutyCycleReq
和 DutyCycleAns
)
DutyCycleReq
,網路協調員使用該命令來限制終端裝置的總髮射佔空比的最大值。總髮射佔空比指所有子頻帶的發射佔空比。
大小(位元組) | 1 |
---|---|
DutyCycleReq Payload | DutyCyclePL |
Bits | 7:4 | 3:0 |
---|---|---|
DutyCyclePL | RFU | MaxDCycle |
終端允許的發射佔空比的最大值:
MaxDutyCycle有效範圍[0:15]。在沒有區域調節設定佔空比限制的情況下,使用 0
表示“佔空比沒有限制”,有區域限制的除外。
注意,下面這條在LoRaWAN1.0.2中被刪除:
值為
255
時要求終端裝置立刻轉為靜默狀態,等價於遠端關閉終端。
終端收到DutyCycleReq後回覆DutyCycleAns, DutyCycleAns不包含任何payload。
5.4 接收視窗相關引數 (RXParamSetupReq
,RXParamSetupAns
)
通過下發RXParamSetupReq命令,可以修改第二個接收視窗(RX2)使用的頻率和資料速率。該命令還可以修改下行RX1
資料速率,使下行RX1
的速率相對上行進行偏移。
大小(位元組) | 1 | 3 |
---|---|---|
RX2SetupReq Payload | DLsettings |
Frequency |
第幾位 | 7 | 6:4 | 3:0 |
---|---|---|---|
DLsettings | RFU |
RX1DRoffset |
RX2DataRate |
RX1DRoffset 用來設定終端裝置上行和下行第一個接收視窗(RX1)資料速率之間的偏移,預設值是0
。基站在某些地域有最大功率密度限制,所以使用偏移,並且還可以用來均衡上行和下行的無線鏈路預算。
RX2DataRate 定義第二個接收視窗使用的資料速率,用法和 LinkADRReq 一樣(例如,0
表示 DR0/125kHz
)。Frequency 是第二個接收視窗使用的通道頻率,其頻率編碼規則的定義見 NewChannelReq 命令。
終端裝置回覆 RXParamSetupAns。終端裝置在沒有收到基於A類的下行資料前,會在所有上行資料的 FOpt 中攜帶 RXParamSetupAns,直到收到一次基於A類的下行資料。這樣可以保證及時上行鏈路存在丟包的情況,網路也總能知道終端裝置使用的下行鏈路引數。
其payload
只有一個位元組:
大小(位元組) | 1 |
---|---|
RX2SetupAns Payload | Status |
Status位結構如下:
第幾位 | 7:3 | 2 | 1 | 0 |
---|---|---|---|---|
Status bits | RFU | RX1DRoffset ACK | RX2 Data rate ACK | Channel ACK |
表 7: RX2SetupAns 的 status 含義
欄位 | 0 | 1 |
---|---|---|
Channel ACK | (對於終端)頻率不可用 | RX2 通道設定成功 |
RX2 Data rate ACK | (對於終端)未知的資料速率 | RX2 資料速率設定成功 |
RX1DRoffset ACK | RX1 上行/下行資料速率的偏移不在可用範圍 |
設定成功 |
3箇中的任何一個是0
,命令都會執行失敗並保持之前的狀態。
5.5 終端狀態(DevStatusReq
, DevStatusAns
)
伺服器通過傳送 DevStatusReq 獲取一個終端裝置的狀態,該命令沒有payload。終端收到 DevStatusReq 之後回覆DevStatusAns。
大小(位元組) | 1 | 1 |
---|---|---|
DevStatusAns payload | Battery | Margin |
電池電量(Battery)上報的資料編碼如下:
表8:電池電量編碼
電量 | 說明 |
---|---|
0 | 終端在使用外接電源 |
1..254 | 電池電量,1是最小值,254是最大值 |
255 | 終端裝置無法獲取電池電量 |
餘量(Margin)是最近一次接收成功 DevStatusReq 命令的解調信噪比,其值(四捨五入)取整,單位dB。餘量值是一個有符號整型,長度6個位元位,最小值 -32,最大值31。
佔位(bits) | 7:6 | 5:0 |
---|---|---|
Status | RFU | Margin |
5.6 建立或修改通道(NewChannelReq
, NewChannelAns
)
NewChannelReq命令要麼用來修改已有通道的引數,要麼建立一個新的通道。該命令設定新通道的中心頻率,以及在該通道上行傳輸的資料速率範圍。
大小(位元組) | 1 | 3 | 1 |
---|---|---|---|
NewChannelReq payload | ChIndex | Freq | DrRange |
通道索引(ChIndex)是新通道或者待修改通道的索引值。LoRaWAN規範中已經為不同的地域和頻段內建了預設通道,這些通道存在所有的裝置上,而且不能通過NewChannelReq(見第6章)進行修改。如果預設的通道數量是N,那預設的通道就是 0 ~ N-1
,而 ChIndex 可用範圍就是 N ~ 15
。終端裝置至少要能處理 16 個不同的通道。在某些地域終端允許儲存超過16個通道。
頻率(Freq)是一個 24bits 無符號整型,實際通道頻率是 100 × Freq Hz(筆記:按這個說法,433.1MHz 伺服器傳送的資料是 4331000),其中100MHz以下的值留待未來使用。通過這種方法可以以 100 Hz為步長,使用 100MHz~1.67GHz 之間任意的通道頻率。 Freq == 0表示不使用該通道。終端裝置必須對頻率進行檢查,保證它的射頻硬體支援將要使用的頻率,否則返回錯誤。
資料速率範圍(DrRange)指明此通道的資料速率範圍。該字由兩個4位長的索引組成:
大小(bits) | 7:4 | 3:0 |
---|---|---|
DrRange | MaxDR | MinDR |
根據章節5.2的定義,最小資料速率(MinDR)欄位指定此通道最低資料速率,例如:0 表示指定 DR0/125 kHz。與之類似,最大資料速率指定最高資料速率。例如:DrRange = 0x77
表示通道只能使用 50kbps GFSK,DrRange = 0x50
表示資料速率範圍是DR0 / 125 kHz 到 DR5 / 125 kHz。
建立或修改的通道一旦設定成功,可以馬上用來通訊。RX1
的下行頻率與其上行頻率相同。
終端回覆NewChannelAns
命令,其payload如下:
大小(位元組) | 1 |
---|---|
NewChannelAns Payload | Status |
狀態(Status)含義如下:
大小(bits) | 7:2 | 1 | 0 |
---|---|---|---|
Status | RFU |
Data rate range ok |
Channel frequency ok |
欄位 | 0 | 1 |
---|---|---|
Data rate range ok | 資料速率範圍超出終端當前所允許的範圍 | 終端相容該資料速率範圍 |
Channel frequency ok | 終端無法使用該頻率 | 可以使用 |
兩者之中有一個是0,就表示命令執行失敗,不會建立通道。
DlChannelReq允許伺服器將一個不同的下行頻率和RX1
關聯起來。所有支援 NewChannelReq 的地域也適用於 DlChannelReq (比如歐洲、中國,但美國和澳大利亞不可以,具體見《LoRaWAN地域相關引數》)
該命令會設定下行RX1的中心頻率:
大小(位元組) | 1 | 3 |
---|---|---|
DlChannelReq Payload | ChIndex | Freq |
頻率(Freq)是一個 24bits 無符號整型,實際通道頻率是 100 × Freq Hz,其中100MHz以下的值留待未來使用。通過這種方法可以以 100 Hz為步長,使用 100MHz~1.67GHz 之間任意的通道頻率。 Freq == 0表示不使用該通道。終端裝置必須對頻率進行檢查,保證它的射頻硬體支援將要使用的頻率,否則返回錯誤。
終端裝置回覆DlChannelAns。終端裝置在沒有收到下行資料前,會在所有上行資料的 FOpt 中攜帶 DlChannelAns,直到收到一次下行資料。這樣可以保證及時上行鏈路存在丟包的情況,網路也總能知道終端裝置使用的下行頻率。
Payload包含以下資訊:
大小(位元組) | 1 |
---|---|
DlChannelAns Payload | Status |
Status含義如下:
Bits | 7:2 | 1 | 0 |
---|---|---|---|
Status | RFU | Uplink frequency exists | Channel frequency ok |
0 | 1 |
---|---|
Channel frequency ok | 裝置無法使用該頻率 |
Uplink frequency exists | 該通道的上行頻率未定義,下行頻率只能給有效上行頻率的通道設定 |
5.7 Rx和Tx之間的延遲(RXTimingSetupReq
,RXTimingSetupAns
)
RXTimingSetupReq用來配置上行傳輸結束(一幀資料傳送完成的時刻)到開啟第一個接收視窗之間的時間間隔。第二個接收視窗比第一個晚1秒開啟。
大小(位元組) | 1 |
---|---|
RXTimingSetupReq Payload | Settings |
延遲(Delay)欄位指定時間間隔,由兩個4位的索引組成:
大小(bits) | 7:4 | 3:0 |
---|---|---|
Settings | RFU | Del |
延遲單位是秒(s),
Del | 延遲(秒) |
---|---|
0 | 1 |
1 | 1 |
2 | 2 |
3 | 3 |
… | … |
15 | 15 |
終端裝置回覆RXTimingSetupAns,並且不攜帶payload。
終端裝置在沒有收到下行資料前,會在所有上行資料的 FOpt 中攜帶 RXTimingSetupAns,直到收到一次下行資料。這樣可以保證及時上行鏈路存在丟包的情況,網路也總能知道終端裝置使用的下行引數。
5.7 Rx和Tx之間的延遲(RXTimingSetupReq
,RXTimingSetupAns
)
RXTimingSetupReq用來配置上行傳輸結束(一幀資料傳送完成的時刻)到開啟第一個接收視窗之間的時間間隔。第二個接收視窗比第一個晚1秒開啟。
大小(位元組) | 1 |
---|---|
RXTimingSetupReq Payload | Settings |
延遲(Delay)欄位指定時間間隔,由兩個4位的索引組成:
大小(bits) | 7:4 | 3:0 |
---|---|---|
Settings | RFU | Del |
延遲單位是秒(s),
Del | 延遲(秒) |
---|---|
0 | 1 |
1 | 1 |
2 | 2 |
3 | 3 |
… | … |
15 | 15 |
終端裝置回覆RXTimingSetupAns,並且不攜帶payload。
終端裝置在沒有收到下行資料前,會在所有上行資料的 FOpt 中攜帶 RXTimingSetupAns,直到收到一次下行資料。這樣可以保證及時上行鏈路存在丟包的情況,網路也總能知道終端裝置使用的下行引數。
5.8 終端發射引數(TxParamSetupReq,TxParamSetupAns)
該MAC命令只在需要監管的區域執行,參考《LoRaWAN地域相關引數手冊》。
TxParamSetupReq命令可以用來通知終端裝置其允許的最大駐留時間,比如:一個數據包在空中持續傳輸的最大時間,以及所允許的裝置最大的EIRP(有效全向輻射功率)。
大小(位元組) | 1 |
---|---|
TxParamSetup payload | EIRP_DwellTime |
EIRP_DwellTime欄位的結構如下:
Bits | 7:6 | 5 | 4 | 3:0 |
---|---|---|---|---|
MaxDwellTime | RFU | DownlinkDwellTime | UplinkDwellTime | MaxEIRP |
TxParamSetupReq的 [0:3] bits用來編碼 Max EIRP值,見下表:
編碼值 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Max EIRP(dBm) | 8 | 10 | 12 | 13 | 14 | 16 | 18 | 20 | 21 | 24 | 26 | 27 | 29 | 30 | 33 | 36 |
裝置無線傳輸的最大功率即為EIRP的最大值。裝置不必使用該功率進行傳輸,可也不能超過該EIRP。第4、第5位定義上、下行鏈路最大的駐留時間 ,編碼如下:
編碼值 | 駐留時間 |
---|---|
0 | 無限制 |
1 | 400 ms |
該命令執行後,終端裝置回覆TxParamSetupAns。 TxParamSetupAns不攜帶任何負載資料。如果在一個對此沒有要求的地域使用該命令,裝置不執行,並且不回覆。
PS
看到有些夥伴提問問題,由於本人的CSDN一般不線上。
本文由 qingchuwudi 譯製,除非另有宣告,在不與原著版權衝突的前提下,本作品採用知識共享署名 3.0 中國大陸許可協議進行許可。