LoRaWAN 1.1 版本封稿很久了也沒有完整啃過一遍,最近邊啃邊翻譯,趁着這個機會把它碼下來。
如果覺得哪里有問題,歡迎留言斧正。
翻譯不易,轉載請申明出處和鏈接。
5 MAC指令
網絡管理時會在網絡服務器和終端設備的MAC層之前傳輸一系列的MAC指令。MAC層指令對應用、應用服務器或終端設備的應用永不可見。
單個數據幀可以包含任何MAC指令序列,MAC指令既可以包含在FOpts字段中和正常數據一起發送,也可以放在FRMPayload字段單獨發送,這是FPorts為0。放在FOpts中的MAC指令必須加密且不得超過15個字節。放在FRMPayload中的MAC必須加密,且不能超過FRMPayload的最大長度。
一條MAC指令由一個字節的命令ID(CID)和可能為空的特定命令序列組成。
接收端回復(answered)或應答(acknowledged)MAC指令,都是按照收到的順序進行傳輸。每一條MAC指令的回復都是按順序添加到緩沖區數據。所有以單獨幀接收的MAC指令都必須以單獨幀進行回復,這意味着包含有回復的緩沖區數據必須以單獨幀發送。如果MAC回復數據的長度大於最大的FOpt字段長度,設備必須把這條緩沖區數據的端口設為0,同時放進FRMPayload里進行發送。如果設備同時有應用負載和MAC回復需要發送,且兩者不能同時放進一幀里,那么MAC回復應該優先發送。如果緩沖區數據長度大於最大的FRMPayload可用大小,設備應該在拼接幀數據時減短緩沖區數據至最大FRMPayload長度。因此,最新的一條MAC指令有可能是被截斷不完整的。在任何情況下,列表里所有的MAC指令都是可執行的,即便MAC回復的緩沖區數據被減短過。網絡服務器不應該產生一系列的MAC指令,因為終端設備不能在單條上行中回復這么多條的MAC指令。網絡服務器應該參照以下來計算MAC指令回復的最大FRMPayload可用長度:
- 如果最新的上行的ADR位為0時:必須考慮最低速數據速率對應的最大負載大小。
- 如果最新的上行的ADR位為1時:必須考慮設備最新上行的數據速率對應的最大負載大小。
注意:當網絡服務器收到被減短的MAC回復時,可以對沒有收到回復的MAC指令進行重傳。
CID | Command | Transmitted by | short Description | |
終端 | 網關 | |||
0x01 | ResetInd | x | 由ABP設備發送,告知網絡服務器設備有重啟以及協商協議版本 | |
0x01 | ResetConf | x | ResetInd指令的應答 | |
0x02 | LinkCheckReq | x | 終端利用這個命令來判斷網絡連接情況 | |
0x02 | LinkCheckAns | x | LinkCheckReq的回復。包含接收信號強度,預估終端設備的接收能力(鏈路余量) | |
0x03 | LinkADRReq | x | 向終端請求改變數據速率,發射功率,重傳率以及信道 | |
0x03 | LinkADRAns | x | LinkADRReq的應答 | |
0x04 | DutyCycleReq | x | 向終端設置發送的最大占空比 | |
0x04 | DutyCycleAns | x | DutyCycleReq的應答 | |
0x05 | RXParamSetupReq | x | 向終端設置接收時隙參數 | |
0x05 | RXParamSetupAns | x | RXParamSetupReq的應答 | |
0x06 | DevStatusReq | x | 向終端查詢其狀態 | |
0x06 | DevStatusAns | x | 返回終端設備的狀態,即電池余量和鏈路解調預算 | |
0x07 | NewChannelReq | x | 創建或修改 1個射頻信道 | |
0x07 | NewChannelAns | x | NewChannelReq的應答 | |
0x08 | RXTimingSetupReq | x | 設置接收時隙的時間 | |
0x08 | RXTimingSetupAns | x | RXTimingSetupReq的應答 | |
0x09 | TxParamSetupReq | x | 網絡服務器用於設置基於當地規定的終端的最大允許駐留時間和最大EIRP | |
0x09 | TxParamSetupAns | x | TxParamSetupReq的應答 | |
0x0A | DlChannelReq | x | 通過從上行鏈路頻率移位下行鏈路頻率(即創建非對稱信道)來修改下行鏈路RX1無線電信道的定義 | |
0x0A | DlChannelAns | x | DlChannelReq的應答 | |
0x0B | RekeyInd | x | 有空中升級設備使用,告知一個安全的上下文升級(重新獲取密鑰) | |
0x0B | RekeyConf | x | RekeyInd的應答 | |
0x0C | ADRParamSetupReq | x | 網絡服務器用於設置終端設備的ADR_ACK_LIMIT和ADR_ACK_DELAY參數 | |
0x0C | ADRParamSetupAns | x | ADRParamSetupReq的應答 | |
0x0D | DeviceTimeReq | x | 終端設備用於獲取當前日期和時間 | |
0x0D | DeviceTimeAns | x | 由網絡服務器應答,DeviceTimeReq的應答 | |
0x0E | ForceRejoinReq | x | 網絡服務器請求設備立即重新入網,可周期性重試 | |
0x0F | RejoinParamSetupReq | x | 網絡服務器設備的周期性入網消息 | |
0x0F | RejoinParamSetupAns | x | RejoinParamSetupReq的應答 | |
0x80~0xFF | 私有 | x | x | 給私有網絡命令拓展做預留。 |
注意:一般終端設備對收到的MAC指令只作一次回復。如果回復丟失,那么網絡服務器需要重新發送一次該指令。當網絡服務器在新的上行沒有收到想要的MAC的回復時,自行決定是否重傳MAC指令。只有RxParamSetupReq,RxTimingSetupReq,DLChannelReq三個指令有不同的應答機制,因為它們會影響到下行的參數,相關細節在相應的章節里有描述。
注意:當設備終端請求MAC指令時,網絡服務器會在請求之后的RX1/RX2窗口盡可能地回復相應地應答/回復指令。如果在相應地窗口沒有接收到回復,那么終端設備自行決定是否重傳。
注意:MAC指令地長度盡管沒有明確給出,但MAC命令執行端必須隱性獲知。因此位置地MAC指令不能被忽略,一旦遇到不明地MAC指令,就會終止MAC指令隊列的處理。因此建議把LoRaWAN網絡協議規范最先描述的MAC指令放在前面。這樣的話,所有當前本本的LoRaWAN規范中實現的MAC指令都可以被更高版本的規范兼容處理。
5.1 標志着重啟了的指令(ResetInd, ResetConf)
這條MAC指令只對ABP設備和兼容LoRaWAN 1.1版本協議的網絡服務器有效。LoRaWAN 1.0服務器不實現這條指令。
OTA設備不應該實現這條指令。網絡服務器應該忽略來自OTA設備的ResetInd指令。
ABP設備使用ResetInd指令來通知網絡服務器,設備進行了重啟,且重新初始化成缺省的MAC和射頻參數(換言之,除了三個幀計數器以外的參數都重新出廠化設置了)。ResetInd指令在未收到ResetConf前都必須加到所有的上行的FOpt字段。
這條命令並非告知網絡服務器下行幀計數器已經重置。相反,ABP設備的幀計數器(包括上行和下行的幀計數器)應該從不重啟。
注意:對ABP設備來說這條命令意味着電源中斷過(例如更換電池)。設備可能丟失了存貯在RAM里的MAC層的上下文(幀計數器必須存貯在NVM(非易失性內存)里)。在這種情況,設備需要這種方法來傳達給網絡服務器說上下文丟失。在后續的LoRaWAN協議版本,這條指令可能也在設備和網絡服務器間用來協商一些協議的選項。
ResetInd指令包含設備支持的LoRaWAN的次版本號。
Size(bytes) | 1 |
ResetInd Payload | Dev LoRaWAN version |
Size(bytes) | 7:4 | 3:0 |
Dev LoRaWAN version | RFU | Minor=1 |
次版本號字段表明終端設備支持的LoRaWAN的次版本號。
Minor version | Minor |
RFU | 0 |
1(LoRaWAN x.1) | 1 |
RFU | 2:15 |
當網絡服務器收到ResetInd指令時,應該回復ResetConf指令。
ResetConf指令包含一個字節的負載,即網絡服務器支持的LoRaWAN 版本,這和"Dev LoRaWAN version"格式一致。
Size(bytes) | 1 |
ResetConf Payload | Serv LoRaWAN version |
如果服務器的版本是無效的,那么設備應該丟棄這條ResetConf指令,並在下一條上行幀時重傳ResetInd指令。
5.2 鏈路檢查命令(LinkCheckReq, LinkCheckAns)
終端設備使用LinkCheckReq指令來確認和網絡服務器之間的連接。這條指令沒有負載。
網絡服務器通過單個或者多個網絡收到LinkCheckReq指令,然后回復一條LinkCheckAns指令。
Size(bytes) | 1 | 1 |
LinkCheckAns Payload | Margin | GwCnt |
網關數量(GwCnt)是最近一次成功收到LinkCheckReq指令的網關的數量。
5.3 鏈路ADR指令(LinkADRReq, LinkADRAns)
網絡服務器使用LinkADRReq指令來要求終端設備進行速率自適應。
Size(bytes) | 1 | 2 | 1 |
LinkADRReq Payload | DataRate_TXPower | ChMask | Redundancy |
Bits | 7:4 | 3:0 |
DataRate_TXPower | DataRate | TXPower |
Bits# | Usable channels |
0 | Channel1 |
1 | Channel2 |
.. | .. |
15 | Channel16 |
Bits | 7 | [6:4] | [3:0] |
Redundancy bits | RFU | ChMaskCntl | NbTrans |
冗余(Redundancy)位中,NbTrans字段表示每條上行消息的發送次數。這對"確認"和"非確認"幀都有效。缺省值位1,表示每幀只傳輸一次。有效范圍為[1:15]。如果收到NbTrans==0,終端應該保持當前NbTrans值不變。
信道掩碼控制(ChMaskCntl)字段負責控制之前定義的ChMask的掩碼位。它負責控制包含16個信道的塊,決定哪個ChMask可以使用。還可以用來全局性的打開或關閉所有的信道來使用特定的調制。這個字段的使用方法以不同區域不同特性地被定義在[LoRaWAN區域特性參數文檔]。
網絡服務器在單條下行消息里可以包含多條LinkADRReq指令。終端設備為了配置信道掩碼,必須按照下行消息中的命令塊(即多條LinkADRReq指令),依照順序處理所有的LinkADRReq消息。網絡服務器在一條下行消息中不應該包含超過一個命令塊。終端設備應該發送單個LinkADRAns應答來全部接受或者全部拒絕拒絕這個命令塊。如果下行包含多於一個ADR命令塊,終端設備應該處理第一個塊,對於其余地ADR命令塊則回復一條NAck(即一條所有狀態位都設置為0的LinkADRAns應答)。對於數據速率,發射功率和重傳次數,因為它們是全局性的設置,所以設備只需按照連續ADR命令塊中最后一條LinkADRReq指令中的來執行即可。按順序處理完連續ADR命令塊,信道掩碼應答位應該是指最后信道方案的接受還是拒絕。
信道頻率以不同區域不同特性地被定義在[LoRaWAN區域特性參數文檔]。終端設備用LinkADRAns指令來回復LinkADRReq指令。
Size(bytes) | 1 |
LinkADRAns Payload | Status |
Bits | [7:3] | 2 | 1 | 0 |
Status Bit | RFU | Power ACK | Data rate ACK | Channel mask ACK |
LinkADRAns 狀態位為以下含義:
Bit = 0 | Bit = 1 | |
Channel mask ACK | 發送的 channel mask 使能了未定義的信道或者禁用所有信道。命令被丟棄,終端設備狀態不變。 | 發送的 channel mask 成功解析,已按照 mask 設置了當前的信道狀態。 |
Data rate ACK | 所請求的數據速率,終端無法識別,或者無法應用在當前信道中(不被任何使能的信道所支持)。命令被丟棄,終端設備狀態不變。 | 數據速率成功設置,或者要求設置的數據速率為15,這表明忽略掉。 |
Power ACK | 所請求的發射功率不能或者不得低於在終端上執行。命令被丟棄,終端狀態不變。 | 功率等級成功設置,或者要求設置的發射功率為15,這表明應該忽略掉。 |
如果三個位中任意一個為0,表明這個指令設置不成功,節點將保持之前狀態。
5.4 終端設備發射占空比(DutyCycleReq,DutyCycleAns)
DutyCycleReq指令被網絡協調者用來限制終端設備的總發射占空比的最大值。總發射占空比指所有子頻帶的發射占空比。
Size(bytes) | 1 |
DutyCycleReq Payload | DutyCyclePL |
Bits | 7:4 | 3:0 |
DutyCyclePL | RFU | MaxDCycle |
終端設備允許的最大發射占空比為:
MaxDutyCycle的有效范圍值是[0:15].值0代表着“沒有占空比限制”,有限制地區的除外。
終端設備用DutyCycleAns指令來回復DutyCycleReq。DutyCycleAns的MAC應答不包含任何的負載。
5.5 接收窗口參數(RXParamSetupReq, RXParamSetupAns)
RXParamSetupReq指令可以對每個上行消息之后的第二接收窗口(RX2)的頻率和數據速率進行改變。該指令同時允許修改下行RX1的數據速率,使下行RX1的數據速率相對上行進行偏移。
Size(bytes) | 1 | 3 |
RXParamSetupReq Payload | DLsettings | Frequency |
Bits | 7 | 6:4 | 3:0 |
DLsettings | RFU | RX1DRoffset | RX2DataRate |
RX1DRoffset字段用來設置終端設備上行和下行第一個接收窗口(RX1)數據速率之間的偏移。偏移的缺省值為0。偏移量用來考量一些地區的基站最大功率密度限制和平衡上下行的射頻鏈路預算。
數據速率(RX2DataRate)字段定義了第二接收窗口使用的下行數據速率,用法和LinkADRReq指令一致(例如,0表示DR0/125kHz)。頻率(Frequency)字段表示第二接收窗口使用信道的頻率,因此頻率編碼規則的定義詳見NewChannelReq指令。
終端設備使用RXParamSetupAns指令來應答RXParamSetupReq。終端設備在收到A類下行之前,RXParamSetupAns指令必須添加在所有的上行數據幀的FOpt字段中。這樣可以保證即使上行鏈路存在丟包,網絡服務器也總能知道設備使用的下行鏈路參數。
負載包含單字節的狀態信息。
Size(bytes) | 1 |
RXParamSetupAns Payload | Status |
狀態(Status)位有以下含義:
Bits | [7:3] | 2 | 1 | 0 |
Status bits | RFU | RX1DRoffset ACK | RX2DataRate ACK | Channel ACK |
LinkADRAns 狀態位有以下含義:
Bit = 0 | Bit = 1 | |
Channel ACK | 終端請求的頻率不可用 | RX2信道設置成功 |
RX2DataRate ACK | 終端請求的數據速率未知 | RX2數據速率設置成功 |
RX1DRoffset ACK | RX1上行/下行數據速率的偏移不在允許的范圍之內 | RX1DRoffset設置成功 |
如果三個位中任意一個為0,表明這個指令設置不成功,必須保持之前狀態。
5.6 終端設備狀態(DevStatusReq, DevStatusAns)
網絡服務器使用DevStatusReq指令來查詢終端設備的狀態信息。這個指令沒有負載。如果終端設備收到DevStatusReq,它必須回復DevStatusAns指令。
Size(bytes) | 1 | 1 |
DevStatusAns Payload | Battery | Margin |
報告電池電量(Battery)的編碼如下:
Battery | Description |
0 | 終端連接到外部電源 |
1..254 | 數值表示電池電量,1表示最低,254表示最高 |
255 | 終端無法測量電池電量 |
余量(Margin)是最近一次成功接收DevStatusReq指令的解調信噪比,其值為四舍五入取整,單位為Db。它是6位的有符號整數,最大值為31, 最小值為-32
Bits | 7:6 | 5:0 |
Status bits | RFU | Margin |
5.7 信道的創建或修改(NewChannelReq, NewChannelAns, DIChannelReq, DIChannelAns)
設備工作在固定的信道方案區域時,這些MAC指令不應該起作用。設備不應該回復這些指令。
請參照[LoRaWAN區域特性參數文檔]。
NewChannelReq指令可以用來修改現有的雙向信道或者創建一個新的信道。這條指令設置新的信道的中心頻率以及該信道的上行數據速率的范圍。
Size(bytes) | 1 | 3 | 1 |
NewChannelReq Payload | ChIndex | Freq | DrRange |
信道索引(ChIndex)是將要創建或修改的信道索引。根據所使用的區域和頻帶,在[LoRaWAN區域特性參數文檔]里LoRaWAN網絡協議規范規定了缺省信道,這些信道所有的設備都通用且不能通過NewChannelReq指令修改。如果缺省信道的數量為N,那缺省信道就是從0到N-1,且ChIndex的可接收范圍為N到15。設備必須具備處理至少16個個不同的信道的能力。在某些地區,設備可以存貯超過16個信道。
頻率字段是一個24位無符號整數。實際信道頻率為(100 x Freq),單位為Hz,其中低於100 MHz的頻率數值將會保留供將來使用。這允許以100 Hz為步長,設置100 MHz到1.67 GHz之間的信道頻率。Freq的值為0代表關閉這個信道。終端設備必須檢查實際能使用的頻率硬件射頻能否支持,否則返回錯誤。
數據速率范圍(DrRange)字段表示這個信道允許的上行數據速率的范圍。該字段被分成兩個4位:
Bits | 7:4 | 3:0 |
DrRange | MaxDR | MinDR |
按照章節5.2所定義的規則,最小數據速率(MinDR)字段規定了該信道最低上行數據速。例如以歐洲地區參數而言,0表示DR0 / 125 KHz,同樣的,最大數據速率(MaxDR)字段規定了該信道最大上行數據速。例如,DrRange = 0x77 表示該信道只允許使用 50 kbps的GFSK。DrRange = 0x50 表示支持DR0 / 125 kHz 到 DR5 /125kHz。
新增加或修改的信道一旦使能,可以立即用來通訊。RX1下行頻率和上行頻率相同。
終端設備通過回復NewChannelAns指令來應答NewChannelReq。這條消息的負載包含以下信息:
Size(bytes) | 1 |
NewChannelAns Payload | Status |
狀態(Status)位有以下含義:
Bits | [7:2] | 1 | 0 |
Status | RFU | Data rate range ok | Channel frequency ok |
Bit = 0 | Bit = 1 | |
Data rate range ok | 指定的數據速率范圍超出了終端當前范圍 | 該數據速率與終端能夠兼容 |
Channel frequency ok | 終端無法使用該頻率 | 終端能夠使用該頻率 |
如果兩個位中任意一個為0,表明這個指令設置不成功,新的信道沒有被創建成功。
DIChannelReq指令允許網絡服務器在RX1時使用不同的下行頻率。這個指令適用於所有支持NewChannelReq指令的區域(例如歐盟或者中國,但不適用於美國或澳大利亞)。
這個指令設置下行RX1的中心頻率,如下:
Size(bytes) | 1 | 3 |
DIChannelReq Payload | ChIndex | Freq |
信道索引(ChIndex)是被修改的下行頻率的信道索引。
頻率(Freq)字段是一個24位無符號整數。實際信道頻率為(100 x Freq),單位為Hz,其中低於100 MHz的頻率數值將會保留供將來使用。終端設備必須檢查實際能使用的頻率硬件射頻能否支持,否則返回錯誤。
終端設備通過回復DIChannelAns指令來應答DIChannelReq。終端設備在收到A類下行之前,DIChannelAns指令必須添加在所有的上行數據幀的FOpt字段中。這樣可以保證即使上行鏈路存在丟包,網絡服務器也總能知道設備使用的下行頻率。
這條消息的負載包含以下信息:
Size(bytes) | 1 |
DIChannelAns Payload | Status |
狀態(Status)位有以下含義:
Bits | [7:2] | 1 | 0 |
Status | RFU | Uplink frequency exists | Channel frequency ok |
Bit = 0 | Bit = 1 | |
Channel frequency ok | 設備無法使用該頻率 | 設備可以使用該頻率 |
Uplink frequency exists | 這個信道的上行頻率沒有定義,下行頻率只能設置已經存在的上行頻率的信道 | 這個信道的上行頻率是有效的 |
5.8 TX和RX之間的延時設置(RXTimingSetupReq, RXTimingSetupAns)
RXTimingSetupReq指令允許配置上行傳輸結束與第一個接收窗口開啟之間的時間間隔。第二接收窗口比第一個接收窗口晚一秒開啟。
Size(bytes) | 1 |
RXTimingSetupReq Payload | Settings |
延遲(Delay)字段指定時間間隔。這字段分成兩個4字節:
Bits | 7:4 | 3:0 |
Settings | RFU | Del |
延遲的單位為秒。Del = 0 對應於 1秒
Del | Delay[s] |
0 | 1 |
1 | 1 |
2 | 2 |
3 | 3 |
.. | .. |
15 | 15 |
終端設備使用不帶負載的RXTimingSetupAns指令來回復RXTimingSetupReq。
終端設備在收到A類下行之前,RXTimingSetupAns指令必須添加在所有的上行數據幀的FOpt字段中。這樣可以保證即使上行鏈路存在丟包,網絡服務器也總能知道設備使用的下行參數。
5.9 終端設備重傳參數(TxParamSetupReq,TxParamSetupAns)
這個MAC指令只在管控的特定區域執行。請參考[LoRaWAN區域特性參數文檔]。
TxParamSetupReq指令可以用來通知終端設備的最大駐留時間。換言之,一包數據在空中的最大持續傳輸時間,以及終端設備所允許的最大等效全向輻射功率(EIRP)。
Size(bytes) | 1 |
TxParamSetupReq Payload | EIRP_DwellTime |
EIRP_DwellTime字段的結構如下:
Bits | 7:6 | 5 | 4 | 3:0 |
MaxDwellTime | RFU | DownlinkDwellTime | UplinkDwellTime | MaxEIPR |
TxParamSetupReq指令的0..3位用來對最大EIRP值的編碼,如下表。表中EIRP值包含不同區域管控的最大EIRP限制的最大范圍。
Coded Value | 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位分別定義了最大上行和下行的駐留時間。編碼如下:
Coded Value | Dwell Time |
0 | No Limit |
1 | 400 ms |
當這個MAC指令生效時(因區域而定),設備回復TxParamSetupAns指令來應答TxParamSetupReq。這個TxParamSetupAns指令不能包含任何的負載。
當在一個對此沒有要求的區域使用該指令,設備不處理且不會回復。
5.10 重新獲取密鑰指令(RekeyInd, RekeyConf)
這條MAC指令只對OTA設備和兼容LoRaWAN 1.1版本協議的網絡服務器有效。LoRaWAN 1.0服務器不實現這條指令。
ABP設備不應該實現這條指令。網絡服務器應該忽略來自ABP設備的RekeyInd指令。
對於OTA設備來說,RekeyInd指令用來確定安全密鑰的升級和在后續的LoRaWAN版本(大於1.1)用來確定運行在終端設備和網絡服務器之間的LoRaWAN的次版本號。這個命令並不意味着MAC和射頻參數的重置(參照6.2.3章節)。
RekeyInd指令包含終端設備所支持的LoRaWAN的次版本號。
Size(bytes) | 1 |
RekeyInd Payload | Dev LoRaWAN version |
Bits | 7:4 | 3:0 |
Dev LoRaWAN version | RFU | Minor = 1 |
最小字段代表設備支持的LoRaWAN的次版本號。
Minor version | Minor |
RFU | 0 |
1(LoRaWAN x.1) | 1 |
RFU | 2..15 |
OTA設備應該在成功處理完入網請求之后(新的會話密鑰生成之后),一直在所有的確認和非確認上行幀里包含RekeyInd指令,直到收到RekeyConf。如果設備在ADR_ACK_LIMIT上行到來之前沒有收到RekeyConf,那么它應該變回請求入網狀態。在之后任何時候設備發送的RekeyInd指令網絡服務器都應該丟棄掉。在收到入網請求之后的新安全的密鑰以及帶有RekeyInd指令的第一條上行幀之前,網絡服務器應該丟棄所有的上行幀。
當網絡服務器收到RekeyInd指令時,回復一條RekeyConf指令。
ResetConf指令包含一個字節的負載,即網絡服務器支持的LoRaWAN 版本,這和"Dev LoRaWAN version"格式一致。
Size(bytes) | 1 |
RekeyConf Payload | Serv LoRaWAN version |
服務器版本必須大於0(不允許為0)。小於或等於設備的LoRaWAN版本。因此對於一個LoRaWAN1.1版本的終端設備來說,有效值只能為1。如果服務器的版本無效,終端設備應該丟棄這條RekeyConf指令,並在下一個上行幀時重傳RekeyInd指令。
5.11 自適應參數(ADRParamSetupReq, ADRParamSetupAns)
ADRParamSetupReq指令允許改變ADR_ACK_LIMIT和ADR_ACK_DELAY這兩個在ADR回退機制中使用的參數。ADRParamSetupReq指令由一個單字節負載。
Size(bytes) | 1 |
ADRParamSetupReq Payload | ADRparam |
Bits | 7:4 | 3:0 |
ADRparam | Limit_exp | Delay_exp |
Limit_exp字段設置ADR_ACK_LIMIT參數的值:
Limit_exp有效范圍為0到15, 對應的ADR_ACK_LIMIT是1到32768。
Delay_exp字段設備ADR_ACK_DELAY參數的值:
Limit_exp有效范圍為0到15, 對應的ADR_ACK_DELAY是1到32768。
終端設備使用ADRParamSetupAns指令來應答ADRParamSetupReq。ADRParamSetupAns指令不包含負載字段。
5.12 設備時間指令(DeviceTimeReq, DeviceTimeAns)
這條MAC指令只對兼容LoRaWAN 1.1版本協議的網絡服務器有效。LoRaWAN 1.0服務器不實現這條指令。
終端設備使用DeviceTimeReq指令來請求服務器的當前網絡日期和時間。該請求沒有負載。
網絡服務器使用DeviceTimeAns來給終端設備提供網絡日期和時間。這個時間是上行傳輸結束時的網絡時間。這個命令包含5個字節的負載,如下:
Size(bytes) | 4 | 1 |
DeviceTimeAns Payload | 32位無符號整數:1980年1月6日凌晨0點(*)至至今走過的秒 | 8位無符號整數:分秒,以1/2^8步長 |
網絡服務器提供的時間最差的時間精度必須在正負 100 毫秒。
(*)GPS 紀元(換言之,指1980年1月6日凌晨0點)作為起點。“秒”字段是以紀元為起點,經過的秒的數量。這個字段每秒單純的加1。把這個字段轉成UTC時間,閏秒必須考慮在內。
例如:2016年2月12日的14點24分31秒對於的GPS紀元時間是1139322288秒。2017年6月,GPS時間比UTC時間多出17秒。
5.13 重新入網指令(ForceRejoinReq)
網絡服務器通過重新入網指令要求設備立即發送重新入網請求(Rejoin-Request)類型0或類型2消息,並帶有可編程的重傳字段,發送周期和數據速率。服務器可以使用這個RejoinReq上行幀來重新生成設備的密鑰或初始化漫游切換過程。
這個命令有2個字節的負載。
Bits | 15:14 | 13:11 | 10:8 | 7 | 6:4 | 3:0 |
ForceRejoinReq bits | RFU | Period | Max_Retries | RFU | RejoinType | DR |
這些參數的編碼如下規則:
Period: 重傳之間的時隙應該等於32秒 x 2period + Rand32, Rand32是在[0:32]之間的一個隨機數。
Max_Retries:設備重新發送重新入網請求(Rejoin-request) 的總的次數。
- 0: 重新入網請求只發送一次(不重發)
- 1: 重新入網請求應該發送2次(1 + 1次重試)
- ...
- 7:重新入網請求應該發送8次(1 + 7次重試)
RejoinType: 這個字段表示設備應該發送的重新入網請求的類型。
- 0或1: 一個類型為0的重新入網請求將被發送
- 2: 一個類型為2的重新入網請求將被發送
- 3到7: RFU
DR:重新入網請求幀應該使用該數據速率DR傳輸。在實際物理調制的數據速率和DR值的對於關系,和LinkADRReq指令中的一致,且以不同區域不同特性地被定義在[LoRaWAN區域特性參數文檔]。
這條指令沒有回復,當終端收到這條命令時必須發送重新新入網請求。在收到這條指令時,應該立馬進行第一次RejoinReq消息的傳輸(但有可能網絡服務器沒有收到RejoinReq)。如果設備在未達到最大重傳次數時收到一條新的ForceRejoinReq指令,設備應該繼續傳輸新參數的RejoinReq。
5.14 RejoinParamSetReq(RejoinParamSetupAns)
網絡服務器使用RejoinParamSetupReq指令來請求設備定期發送一條RejoinReq類型為0的消息,這條消息包含可編程的周期,即上行的時間和數量。
時間和數量從可能沒有時間測量功能的設備中復制。這個周期規定了兩條RejoinReq傳輸之間的最大時間或上行的數量。設備可能發送RejoinReq很頻繁。
這個指令有單字節的負載。
Bits | 7:4 | 3:0 |
RejoinParamSetupReq bits | MaxTimeN | MaxCountN |
這些參數定義如下:
MaxCountN = C = 0到15。至少在每2C+4條上行消息,設備必須發送一條類型為0的重新入網請求。
MaxTimeN = T = 0到15。至少在每2T+10秒,設備必須發送一條類型為0的重新入網請求。
- T = 0 表示大概時17分鍾
- T = 15 大概是1年
以上兩種情況種的一種滿足(幀上行數量或者時間),RejoinReq幀都會被發送。
設備必須實現上行數量的周期功能(MaxCountN)。基於時間的周期功能是可選的。設備不能實現時間限制必須在回復中說明。
回復有單字節的負載。
Bits | Bits 7:1 | Bit 0 |
Status bits | RFU | TimeOK |
如果第0位等於1,設備接受最大時間和上行數量的的限制。如果等於0,那么只接受上行數量的限制。
注意:對於有非常低消息頻率和沒有時間測量能力的設備,可選的上行的數量這個機制不在LoRaWAN范圍內。