LoRa - IOT 5
LoRa - IOT 5
1. LoRaWAN MAC Message Format
MAC Message
FormatRadio PHY layer는 Preamble , PHDR, PHDR_CRC, PHYPayload, CRC로 이루어 져있다.
Preamble은 사설망인지
공개망인지를 결정한다. 그렇기에 이 부분을 교체함으로써 사설망을 만들 수도 공개망을 만들 수도 있다.
PHYPAYLoad은 MAC
message이고 MACPayload,
Join-Request , Join-Response 구분된다.
2. LoRaWAN MAC Header
MHDR는 size가 1bytes이고 상위 세개의 비트가 MType(Mac Type)으로 구성된다. 하위 5비트는 RFU와 Major 정보로
나누어져 있는데 다 영어로 세팅 되어 있어서 결국 상위 3개의 비트가 MAC
Header의 값 결정한다.
MType이 111인 Proprietary는
현재 폼에서 따르지 않는 message를 쓸 때 적용하는 field 값이다. 필드 값은 101 까지가
쓰인다라고 생각하면 되고 Mac Header를 다시 byte로
표현을 해 보면 다음과 같다.
3. MAC Frame Format - join Request
Join Request는 총 18 byte로
구성 되어 있다
mic 값은 MHDR 부터 Join Request 까지를 AppKey로 계산해서 4 바이트 mic
값을 뽑아낸다.
join request는 유일 하게 암호화가 되지 않는다.
인코딩 된 payload를
보면 전혀 인코딩 되어 있지 않고 mic 값만 인코딩 된 data값이 나온다.
Join Request 예제
인코딩된 payload를 보면 전혀 인코딩 되어 있지 않고 mic 값만 인코딩 된 data값이 나오는 것을 확인 할 수 있다.
35 8E 가 Device Nounce 되었다. (2byte)
4. MAC Frame Format - Join Accept
이것은 server에서 data를 내려주는 형태로 MHDR에는 20이 들어간다.
CFList는 사용할
수 있는 채널들의 정보들을 내려주는 것이다.
MHDR 에서 Join Accept 까지 AppKey를 통해 MIC 값 뽑아내고 이 값들을 다시 암호화해서 데이터를 전송한다.
Join Accept 예제
전혀 알아 볼 수 없는 값으로 인코딩이 되어 데이터 전송 받는다.
5. MAC Frame Format - MAC Data
제일 많이 쓰인다.
FRMPayload가 실질적인 data node라고 생각하면 된다.
FHDR에는 server에서 내려준 device 값이 들어간다.
FOpts : Mac commend를 따로 MAC 패킷을 이용해서 전송을 하는 것이 아니라 FHDR를 이용해서
전송을 할 수 있다.
FPort는 DF포트 까지 사용할 수 있다.
FRMPayload는 실질적으로 application
data나 network data가 들어가게 된다.
DevAddr은 서버에서 내려준 Device address
값 계속 이용한다.
FCtrl은 uplink와 downlink가
서로 다른 포맷을 가지고 있다.
Uplink는 단말기에서 서버로 데이터를 올리는 것을 말한다.
Downlink는 서버에서 단말기로 데이터를 내리는 것이다.
1) Uplink
ADR 은 "data rate를 언제든지 변경할 수 있다" 라는 field로
거의 항상 켜져 있다 그래서 1로 들어가 있다
AdrackReq field는 server와 통신이 제대로 잘 이루어 지지 않을 때 이부분에 AdrackReq를 열면 server가 data를 내려줘야 하는 request field
이다.
ACK field는 confirmed data
down을 받았을 때 "받았다"라는 ACK field를 세팅 해 준다.
Commend가 있을 경우에는 commend가 fOption
field로 들어가면서 length가 몇인지를 bit를
통해서 알려주고 실질적으로 0이 아닌 경우에는 데이터가 있다고 생각하고 그부분을 해석을 해야한다.
2) Down link
단말기와 비슷하게 구성된다.
ADR의 경우 영어로 세팅되고 RFU 또한 영어로 세팅된다.
ACK 같은 경우는 단말기에서 confirm the data를 보냈을 때 서버에서 "잘
받았다" 라고 Ack field를 세팅해서 data를 내린다.
FPending 된 data가 많다. 즉 서버가 "너에게 보내줄 데이터가 많다" 라고 할 때는 이 FPending field를 세팅해서 단말기에서 수시로
RX Window를 열수 있도록 한다.
Mac commend가 따로 있을
경우에는 이 fOption field를 사용하여 length의
값을 지원해 주게 되어 있습니다.
7. FPort
FPort는 1bytes를 사용하며 0번부터 255번 까지 사용하고 있다.
0번의 경우는 network message만 사용하는 FPort이다. -> MAC commend 들이다
Application layer에서 자유롭게 사용하면 되는데 센서들이 굉장히 다양한 경우 센서별로 port를 할당을 하여서 센서 구분을 쉽게 할 수 있는 장점들이 있고 이렇게 센서별로 할당을 하는 경우들이 굉장히 많다.
LoRaWAN Mac layer test protocol은 인증맵에서 사용하는 test protocol layer이고 인증 맵에서 지금 LoRaWAN이 제대로 만들어졌는지에
대한 규격검증은 244 번 포트를 통해 한다.
225번부터는 아직 사용해선 안된다.
1번부터 255 번까지는 다 어플리케이션 layer라고
생각하고 암호화는 어플리케이션 세션키로 한다.
인코딩은 FRMPayload에
한해서만 된다. NwkSkey, AppSKey로 인코딩이 된 data가 들어가고 나머지는 인코딩 되지 않은 data가 들어간다.
8. Unconfimed Data up (예제)
1234가 ASCII으로 변환되어 31 32 33 34 로 전송된다.
Unconfirmed data 이기 때문에 MHDR에 40 들어간다.
80이면 ADR은 켜지고 나머지는 다 0이다. è fOption이 없다.
참고 :
서울 IOT 워크숍 LoRA 강의 06강
댓글
댓글 쓰기