LoRaWAN 規範 1.0 (章節5)

最近在做LoRa, LoRaWAN協議略微複雜,邊讀邊翻譯,現在把部分關鍵的翻譯分享給各位做物聯網的同行。
當然裏面摻雜了一些我的個人筆記,希望對大家有所幫助。
如果哪裏有問題,歡迎應各位留言或者郵件指正。

翻譯很辛苦,轉載請註明出處和源鏈接

聲明

本文翻譯版本已更新至LoRaWAN 1.0.2

5 MAC Commands

網絡管理時會在網絡服務器和終端MAC層之間傳輸一系列MAC命令。MAC層命令對應用、應用服務器以及終端設備上的應用永不可見。

一幀數據中可以包含任何MAC命令序列,MAC命令既可以放在FOpts中和正常數據一起發送;也可以放在FRMPayload中單獨發送,此時FPort = 0,但不能同時在兩個字段攜帶MAC命令。放在FOpts中的MAC命令不加密,並且不能超過15個字節。放在FRMPayload中的MAC命令必須加密,同時不能超過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 鏈路檢查 (LinkCheckReqLinkCheckAns

終端使用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 的網關的數量。

link margin參考:Link margin

5.2 速率自適應 LinkADRReqLinkADRAns

網絡服務器通過發送 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 。對於 DataRateTXPowerNbTrans ,因爲它們是全局性設置(後面的值會覆蓋前面的值),所以終端設備只按照命令中的最後一條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 終端的發射佔空比(DutyCycleReqDutyCycleAns

DutyCycleReq,網絡協調員使用該命令來限制終端設備的總髮射佔空比的最大值。總髮射佔空比指所有子頻帶的發射佔空比。

大小(字節) 1
DutyCycleReq Payload DutyCyclePL

Bits 7:4 3:0
DutyCyclePL RFU MaxDCycle

終端允許的發射佔空比的最大值:

=12MaxDCycle

MaxDutyCycle有效範圍[0:15]。在沒有區域調節設置佔空比限制的情況下,使用 0 表示“佔空比沒有限制”,有區域限制的除外。

注意,下面這條在LoRaWAN1.0.2中被刪除:

值爲 255 時要求終端設備立刻轉爲靜默狀態,等價於遠程關閉終端。

終端收到DutyCycleReq後回覆DutyCycleAnsDutyCycleAns不包含任何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秒:

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秒:

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

該命令執行後,終端設備回覆TxParamSetupAnsTxParamSetupAns不攜帶任何負載數據。如果在一個對此沒有要求的地域使用該命令,設備不執行,並且不回覆。

PS

看到有些夥伴提問問題,由於本人的CSDN一般不在線。

爲了方便交流,附個郵箱,有問題或者想法的朋友可以 給我寫信


知識共享許可協議 本文由 qingchuwudi 譯製,除非另有聲明,在不與原著版權衝突的前提下,本作品採用知識共享署名 3.0 中國大陸許可協議進行許可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章