主页(http://www.pttcn.net):Lora及LoraWAN
Lora和LoraWAN的区别LoRa经常被误用来描述整个LPWAN通信系统,其实Lora是Semtech拥有的专有调制格式。 SX1272和SX1276 LoRa芯片使用称为chirp扩频(CSS)的调制技术来组成技术栈的物理层(PHY)。 LoRaWAN是一个开放标准,它定义了基于LoRa芯片的LPWAN技术的通信协议。 LoRaWAN在数据链路层定义媒体访问控制(MAC),由LoRa联盟维护。 LoRaWAN是一种媒体访问控制(MAC)层协议,专为具有单一运营商的大型公共网络而设计。 总体而言,LoRa仅包含链路层协议,并且非常适用于节点间的P2P通信;LoRaWAN也包含网络层,因此可以将信息发送到任何已连接到云平台的基站。 Lora及LoraWAN层级关系LoRa = PHY Layer LoRaWAN or Symphony Link = MAC Layer Lora的一些知识点介绍Lora调制方式优势1、LoRa扩频调制解调技术使器件传输距离远远超出现有的基于 FSK 或 OOK 调制方式的系统,能到25公里以上的距离; 2、它还提供了很大的灵活性,用户可自行决定扩频调制带宽(BW)、扩频因子(SF)和纠错率(CR)。 3、每个扩频因子均呈正交分布,因而多个传输信号可以占用同一信道而不互相干扰,并且能够与现有基于 FSK 的系统简单共存。 4、LoRa调制解调器采用专利扩频调制技术。与传统调制技术相比, LoRa可以增加链路预算并增强对带内干扰的抗干扰能力。同时,放松了对晶体基准振荡器的频率容限要求,从而能够在降低系统成本的基础上提高性能。 SX1276/77/78 器件与关键参数图中可以看出,sx1276功能和频段覆盖是最完善的,可以针对欧洲标准、美国标准、中国标准、国际标准市场,目前中国一般使用的是sx1278(iot520芯片); SX1278接收灵敏度-148dbm,接收电流10.3mA,包长最大256个字节(Payload有效字节长度)。实际LoraWAN在SF7模式下只使用到了222个字节。 SX1276/77/78 器件频段、功率硬件控制1、SX1276/77/78 配备了三个不同的射频功率放大器。其中两个分别与 RFO_LF 和 RFO_HF引脚连接,能够实现高达+14dBm 的功率放大功能。第三个功率放大器与 PA_BOOST 引脚连接,能够通过专门的匹配网络实现高达+20dBm 的功率放大功能。与高效功率放大器不同的是,这个高稳定性功率放大器能够覆盖频率合成器处理的所有频段。 RFO_LF 主要针对LF频段( 低频段169M和433M、470M),RFO_HF主要针对高频频段(868M-915M),而PA_BOOST能覆盖所有频段,一般现在设计使用PA_BOOST引脚,能保证+20dBM的发送功率。 2、SPI通信可以达到10M,一般LoraWAN时要求使用10M保证SPI通信时间可以忽略。 电源策略SX1276/77/78在整个工作温度及操作电压范围内采用内部电压调控机制,以保证电压及器件特性的稳定性。 在1.8V-3.7V电压范围内, +17dBm输出功率保持稳定,以及保证2.4V-3.7V电压范围+20dBm输出功率保持稳定。 BW、SF、CR、RSSI、SNR值扩频调制带宽(BW):增加信号带宽,可以提高有效数据速率缩短传输时间,但会牺牲灵敏度。 一般使用125K 注意: 较低频段( 169 MHz )不支持 250kHz 和 500kHz 的带宽。 扩频因子(SF):SF7~SF12,还有一个比较特殊的SF6一般很少使用,要使用时对寄存器操作要做特殊的操作。 纠错率(CR):一般使用4/5 前向纠错技术 信道编码之所以能够检出和校正接收比特流中的差错,是因为加入一些冗余比特,把几个比特上携带的信息扩散到更多的比特上。为此付出的代价是必须传送比该信息所需要的更多的比特。 为进一步提高链路的鲁棒性, LoRaTM调制解调器采用循环纠错编码进行前向错误检测与纠错。使用这样的纠错编码之后,会产生传输开销。 在存在干扰的情况下,前向纠错能有效提高链路的可靠性。由此,编码率(及抗干扰性能)可以随着信道条件的变化而变化——可以选择在报头中加入编码率以便接收端能够解析。有关LoRaTM数据包及报头的更多信息。 接收信号强度指示(RSSI):常规情况下,公式是这样:
/*
RSSI (dBm) = -157 + Rssi, (高频口)
RSSI (dBm) = -164 + Rssi, (低频口)
另外在SNR0时,可以参考如下公式:RSSI = -157+16/15 * PacketRssi (or RSSI = -164+16/15 * PacketRssi)。当然SNR<0时,还要注意同样做噪声干扰的校正,在公式后面 + PacketSnr * 0.25 。
*/ 在纯净环境下,RSSI跟与距离是一个非线性曲线的关系,所以路测时在一定距离内RSSI值有参考价值,过距离后基本没有参考价值。 基本表现为:太近、太远RSSI变化并不太明显,而中间有一段距离表现比较明显;但是,RSSI值受环境影响太大,一般情况下仅供参考使用。 Lora的数据包结构前导码Preamble:前导码用于保持接收机与输入的数据流同步。 默认情况下, 数据包含有12个符号长度的前导码。 前导长度是一个可以通过编程来设置的变量,所以前导码的长度可以扩展。接收机的前导码长度应与发射机一致。如果前导码长度为未知或可能会发生变化,应将接收机的前导码长度设置为最大值。 可以通过设置前导码值进行地址过滤,实现分组通信。 报头Header:分显示报头(默认模式)和隐式报头; 显示报头包括: 以字节数表示的有效负载长度; 前向纠错码率; 是否打开可选的16位负载CRC。 报头按照最大纠错码(4/8)发送。 有效数据Payload:真正发送的数据 Payload CRC:对Payload数据的CRC校验 空中传输时间已知扩频因子(SF)、编码率(CR)及信号带宽(BW),可以使用提供的公式计算出单个LoRa数据包的总传输时间,在LoraWAN需要知道每次数据传输在空中的传输时间。 LoRa跳频当单个数据包时间可能超过相关法规允许的最大信道停留时间,一般采用跳频扩频技术(FHSS);FHSS方案的工作原理为:每个LoRa数据包的部分内容通过在微控制器MCU管理的频率查询表中选取的跳频信道进行发送。在预定的跳频周期结束之后, 发射机和接收机切换到跳频预定义列表中的下一个信道,以便继续发送和接收数据包的下一部分内容。 占空比(DutyCycle)节点发射LoRa数据的时间t1与发射周期T的比值就是占空比。占空比跟国家无线电管理的相关规定有关系,占空比满足不了国家法律时过国家相关认证会比较麻烦。 例如:470频段占空比要求为 1%,节点使用该频段某个信道发送一组数据耗时 10 ms,那么这个节点的本次发送周期为T1。节点在本周期结束,也就是 T1−10 ms 以后才可以再次发送数据。 T1=10/%=1000ms,需要等待 1000−10=990ms 才可以再次发送。 当占空比无法满足国家法律时,通过跳频手段可以解决。 信道活动检测(CAD)可使用信道活动检测器来检测其他LoRa信号是否占用了本信道;可以一定程度上减轻信道冲突问题。 SX1276状态机IdleMode | 1: 睡眠模式 | FromStart | 00:进入 LowPowerSelection 状态 | LowPowerSelection | 1:进入空闲状态 | FromIdle | 1:发生 T1 中断时进入接收状态 | FromReceive | 110:发生 PreambleDetect 中断时进入定序器关闭状态 |
状态间切换跟监听模式有一定的关系。 LoraWAN的一些知识点介绍LoraWAN网络的射频芯片介绍主要组成sx1276/77/78芯片作为终端芯片;sx1301+2片sx1255/1257作为基站芯片; Lora 470M频段有96路上行,48路下行;上、下行的通信信道是不相同的。而上行信道对应的下行信道有一定的算法关系。 sx1301+sx1255/57SX1301一般外接2片SX1257(或SX1255)。SX125x是射频前端芯片,它负责将I/Q(In-phase / Quadrature,同相正交数字信号)转换成无线电模拟信号。 1255支持的频段为400~510M,1257为862~1020M SX1301的结构图,它是由2个MCU和ASIC(ApplicationSpecific Integrated Circuit,专用集成电路)的综合体。主要部件包括: 射频MCU:该MCU通过SPI总线连接2片SX125x,主要负责实时自动增益控制、射频校准和收发切换。 数据包MCU:该MCU负责分配8个LoRa调制解调器给多个通道,它仲裁数据包的机制包括速率、通道、射频和信号强度。 IF0~IF7的LoRa通道:它们的带宽固定为125kHz,每个通道可以设置中心频率,每个通道可以接收SF7~SF12共6种速率的LoRa信号。 理论上可以同时处理6*8=48个终端的上行数据,但是它只有8路LoRa解调器,所以一个通道(IF0~IF7)接收了6个正交数据包,解调器也只负责处理其中一个。 IF8通道:带宽支持125 / 250 / 500kHz,用于基站之间的高速通信。 IF9通道:收发(G)FSK信号,LoRaWAN在欧洲地区使用了该通道。 一般基站设计时,推荐使用GPS作为标准时钟信号源(误差50ns)
LoraWAN网络本该是个大角色虽然目前LoraWAN在中国的前景貌似只能走小型私网为主(运营商没有主推),但是LoraWAN天生就比较适用于大型公共网络,而不是私网; 目前LoraWAN公网在欧洲发展得比较快。 Lora的调制方式导致通信速率很慢,数据在空中传输的时间是比较长的,信道只有96路上行48路下行(中国470标准),在单一区域如果有多个LoraWAN网络,就更容易产生碰撞问题;由于网络可能来自不同厂家,这种碰撞是无法单方面避免的。 LoraWAN的网络结构LoraWAN采用星型拓扑结构,由后台服务器统一管理,能比较好的解决多基站多节点的接入问题;每个节点将数据传输到一个或多个基站。然后基站将数据转发到网络服务器,在网络服务器对信息进行必要的处理。 终端设备可能用任何可用的信道、任何可用的通信速率通信,终端的每次通信以伪随机的方式改变通信信道。 后台服务分运营商服务和应用商服务。 LoraWAN通信通信模式CLASS A CLASS B CLASS C所有LoRaWAN设备至少实现了CLASSA的功能。此外,他们还可能实现了CLASS B,CLASS C或被其他人自定义的功能。 CLASSA 双向终端设备 每一个终端设备的上行传输,跟随两个短的下行接收窗口。每次只能先终端上行数据才能收到基站的下行数据;CLASSA适用于超低功耗终端系统的应用。 CLASSB 带接收时隙的双向终端设备 除A类随机接收窗口,B类设备中在计划的时间打开额外的接收窗口。在计划的时间中接收到来自基站的同步信标(Beacon帧)。 CLASSC 最大接收时隙的双向终端设备 C类有近连续打开接收窗口的终端设备,只有发射时才关闭接收。 本次主要针对CLASS A模式下进行介绍。
Message type 消息类型,通信命令000 Join Request Join请求帧001 Join Accept Join接受帧010 Unconfirmed Data Up 上行非确认帧011 Unconfirmed Data Down 下行非确认帧100 Confirmed Data Up 上行确认帧101 Confirmed Data Down 下行确认帧110 Rejoin Request Rejoin请求帧111 Proprietary (自定义专有帧) MAC commands MAC层命令MAC层命令(最大15个字节)可以夹带在上、下行数据中, MAC层命令对于应用程序、应用服务器以及终端上的应用程序来说都是不可见的。 Link Check commands (LinkCheckReq, LinkCheckAns) :链路检测 Link ADR commands (LinkADRReq, LinkADRAns) : ADR设置 End-Device Transmit Duty Cycle (DutyCycleReq, DutyCycleAns):占空比设置 Receive Windows Parameters (RXParamSetupReq, RXParamSetupAns) :接收窗口参数设置 End-Device Status (DevStatusReq, DevStatusAns) :设备状态 Creation / Modification of a Channel (NewChannelReq, NewChannelAns) :信道修改 Setting delay between TX and RX (RXTimingSetupReq, RXTimingSetupAns) :设置接收窗口时间 Join过程网络在建立之初,终端设备启动后需要向服务端发起Join请求(接入请求),只有在接入请求得到成功答复,并根据答复配置相关参数后,终端才算成功加入网络。Join成功后才能进行数据的上行、下行通信。 Join过程、CLASS A等模式下,服务器、终端之间约定了两个下行接收窗口(时间窗口)来实现数据的交互。一般通信方式为:终端上行数据包后进入低功耗模式,等到约定的时间窗口后开始进入接收模式,接收服务器下行来的数据。 在Join之前要了解一下Receive Windows概念。 接收窗口Receive Windows 在每次上行传输的终端设备打开两个短的接收窗口。接收窗口开始时间是一个配置周期的传输结束的最后一个上行比特。 终端在上行结束后考虑到功耗等问题不会立即进入接收模式,低功耗到合适时机再打开接收,接收下行数据。此协议约定了两个窗口,数据只会在其中一个窗口中接收到。 开窗时间误差要求为+/- 20us First receive window:第一接收窗口,一般第一接收窗口的信道值是上一次上行信道对应的下行信道值,而通信速率相同。 Second receive window:第二接收窗口,一般第二窗口的信道值和数据速率是不变的,但是可通过MAC命令修改的第二接收窗口的频率和数据速率。 接收窗口持续时间 接收窗口的长度必须至少为有效地检测的下行链路前同步码(前导码)所要求的终端设备的无线电收发机的时间。比如同为12字节的前导码,SF7和SF12的有效监测时间是不同的。 基站发送数据要求 如果网络打算发送的下行链路到一个终端设备,必须在接收窗口(两个之一)开始之前发起传输。 终端发送数据要求 一个终端不得发送另一个上行消息给基站,除非它已经接收在上次发送的第一或第二接收窗的下行基站消息,或者前一次传输的第二接收窗口已过期。 Join-request Join请求主要信息Join-request信息包含终端的AppEUI、DevEUI及随机的DevNonce(2字节)。 DevNonce是一个随机值,主要用于重放攻击;在Join过程中要求服务器对每个终端保留一定数量的DevNonce历史值(一般5个以上);当检测到某次Join时值为DevNonce历史值则判断为发生了安全问题,将直接拒绝本次Join。 Join-accept Join接受主要信息1) 假如终端被允许接入网络,网络服务器将用join-accept响应终端的join-request请求。Join-accept信息将像普通的下行一样的发送,只不过会使用JOIN_ACCEPT_DELAY1 或JOIN_ACCEPT_DELAY2,而不是分别用RECEIVE_DELAY1和RECEIVE_DELAY2 这样的延时。 2) Join-accept信息中包含3字节的App应用随机数(AppNonce),一个网络标示(NetID),一个设备地址(DevAddr),一个TX和RX之间延时(RxDelay)以及一个终端正在加入的网络的频率信道列表选项(CFList)。 以后该终端的通信将随机使用该CFList信道值。 DevEUI是IEEE标准中的全球终端ID;EUI64地址空间是终端的全球唯一标示。相当于是设备的MAC地址。 AppEUI是IEEE标准的全球APP应用ID,EUI地址空间是终端APP应用供应商的唯一标示。 所述AppEUI、DevEUI在执行激活过程之前就被存储在终端中。DevEUI AppEUI需要向相关机构申请。 AppNonce是一个随机值或者基于某些形式的由网络服务器提供的唯一ID值,AppNonce用于终端导出NwkSKey和AppSKey两个会话密钥;作为网络安全登录的一个参与变量。 NetID格式如下:低7位(LSB)命名为NwkID与前面章节所述的的7位MSB短地址相匹配。相邻或者重叠的网络必须具有不同的NwkIDs。剩下的17个高位可以由网络运营商任意选择。 NetID不同运营商或者漫游网络标识。 AppKeyAES-128加密/解密密钥,该密钥由应用程序所有者分配给该终端设备。 设备地址(DevAddr)由当前运营商网络提供的设备地址。终端提供了DevEUI、AppEUI,服务器将答复一个DevAddr和一个随机的AppNonce,以后通信就直接可以用DevAddr通信了,而AppNonce则是密钥产生者。 配网方式终端要加入LoRaWAN网络,有2种方法完成入网:ABP(Activation by Personalization,个性化激活)和OTAA(Over-the-Air Activation,空中激活)。 ABP方式一般向服务器端提供终端的DevEUI,由服务器端生成:设备地址(DevAddr),APP应用标示(AppEUI),网络会话密钥(NwkSKey),APP应用密钥 (AppSKey)信息并将该信息写入终端中,终端重启后将直接接入基站(没有Join过程)。 OTAA方式终端Join之前必须要明确以下信息:全球唯一终端标示(DevEUI)、APP应用标示(AppEUI)、AES-128加密/解密密钥(AppKey)。 终端Join以后将保存:设备地址(DevAddr),APP应用标示(AppEUI),网络会话密钥(NwkSKey),APP应用密钥 (AppSKey)信息。 NwkSKey、AppSKey都是基于由AppNonce、AppKey、NetID 等参数经过一定的算法得出。 NwkSKey仅作用于MIC校验(数据完整性校验)和和Payload MAC层相关的加密;如MAC commands操作。 AppSKey APP应用会话密钥。网络服务器和终端通过AppSKey加密和解密Payload字段中APP应用程序特定数据信息。它也可以用来计算和验证包含在Payload字段中应用程序特定数据消息的应用程序级的MIC。 终端并没有设置任何形式的网络密钥,相比ABP而言OTAA方式可以自动接入任意运营商的网络。 安全性评估:NwkSKey为运营商级的网络密钥不能解析数据,而AppSKey是应用商级的密钥;这样能保证运营商无法获取到应用商的真实数据,保证了应用商数据的安全性。 Up Link/Down Link 数据上行/下行010 | Unconfirmed Data Up | 上行非确认帧 | 011 | Unconfirmed Data Down | 下行非确认帧 | 100 | Confirmed Data Up | 上行确认帧 | 101 | Confirmed Data Down | 下行确认帧 |
使用DevAddr与基站通信 Fopts 携带的是MAC cmd指令(如果有的话) FRMPayload 为实际要上行的数据 470M频段(中国)特性同步字长度要求 LORA | 0x34 | 8 symbols | GFSK | 0xC194C1 | 5 bytes |
|
|
|
96路上行,470.3 MHz 每 200 kHz递增一个到 489.3 MHz,SF7~SF12 4/5 48路下行,500.3 MHz 每 200 kHz递增一个到 509.7 MHz,SF7~SF12 4/5 • 默认发送功率 14 dBm. • 125 kHz BW 最大至 +17 dBm. • 传输时间不大于 5000 ms. • 所有终端必须支持96路信道 • Join过程中要求从SF7~SF12并从96路信道中随机挑选一个接入 JoinResp CFList 信道列表分配Join答复中,服务器将信道列表带给终端;以后终端将以这些信道值与基站通信。 CFList | ChMask | ChMask | ChMask | ChMask | ChMask | ChMask | RFU | CFListType |
信道分配列表,从470.3 MHz开始,每200 kHz一个,一直讲96个分配完。 LinkADRReq ADR请求信道分配列表当终端开启了ADR后,服务器检测到要启动ADR时,将发生LinkADRReq重新配置终端的通信速率、发生功率和信道列表。 0 | Channels 0 to 15 |
| 1 | Channels 16 to 31 |
| 2 | Channels 32 to 47 |
| 3 | Channels 48 to 63 |
| 4 | Channels 64 to 79 |
| 5 | Channels 80 to 95 |
| 6 | All channels ONThe device should enable all currently defined channels independently of the ChMask field value. |
| 7 | RFU |
|
Max Payload最大发送长度要求0 | 59 | 51 | 1 | 59 | 51 | 2 | 59 | 51 | 3 | 123 | 115 | 4 | 230 | 222 | 5 | 230 | 222 | 6:15 | Not defined |
|
Tx和Rx窗口信道的对应关系第一窗口Rx1第一窗口信道:Rx1 = |本次Tx信道-48|;如本次Tx为49、47信道,则下行信道为1信道。 Rx1第一窗口DR值选择: 取决于RX1DROffset (0~7)及上行的DR值,目前RX1DROffset4~7预留 第二窗口• DR值保持与第一窗口相同 • RX2 信道值 = DevAddr%48,当然也可以通过MAC commands修改。 470M频段默认配置参数RECEIVE_DELAY1 1 s
RECEIVE_DELAY2 2 s //(must be RECEIVE_DELAY1 + 1s)JOIN_ACCEPT_DELAY1 5 s
JOIN_ACCEPT_DELAY2 6 s
MAX_FCNT_GAP 16384ADR_ACK_LIMIT 64ADR_ACK_DELAY 32ACK_TIMEOUT 2 //+/- 1 s (random delay between 1 and 3 seconds) MAX_FCNT_GAP: 为接收方会同步保存接收数据的的帧号,对比收到的增加过的值和当前保存的值如果两者之差大于 MAX_FCNY_GAP 就说明中间丢失了很多数据然后就会丢掉这条数据。 ADR_ACK_LIMIT ADR_ACK_DELAY: 如果终端的数据速率经过网络优化比最低速率大,那节点就要定期检查保证服务器仍然能够收到上传的数据。 终端上行的帧计数器每递增一次(重传时计数器不递增)的同时,设备的 ADR_ACK_CNT 计数器也递增。如果 ADR_ACK_LIMIT (ADR_ACK_CNT >= ADR_ACK_LIMIT)次上行之后没有收到下行回复,就会设置 ADR 请求响应位(将 ADRACKReq 设为1)。此时要求网络在接下来的 ADR_ACK_DELAY 次上行之内做出响应,在任何一次上行后收到下行数据,节点都会重置计数器 ADR_ACK_CNT。在此期间的下行数据不需设置ACK位,因为终端在等待接收期间收到任何应答都表示网关还能接收来自该设备的上行数据。如果在接下来 ADR_ACK_DELAY 次之内(比如:总共发送次数 ADR_ACK_LIMIT + ADR_ACK_DELAY)没有收到回复,就切换到更低的数据速率上,以获得更远的射频传输距离,并重复上述过程7。终端设备每达到 ADR_ACK_DELAY 就会再次降低自己的数据速率。 LoraWAN的使用场景低数据量、容忍高时延的非移动(或偶尔移动)的终端设备
(中国集群通信网 | 责任编辑:李俊勇) |