三、Introduction on LoRaWAN options

本文件描述了一种用于可为移动的或固定在一个固定位置的电池供电的终端设备而优化的LoRaWAN™网络协议。LORA™是一个由Semtech公司开发的长距离低功耗低通信速率无线调制应用。设备实现多类包括CLASSA在内的通信模式。LoRaWAN网络通常部署成星型网络拓扑结构, 网关中继终端及后端网络中央服务器的数据。网关通过标准IP协议连接至网络服务器,而终端采用单跳网络LORA™或FSK与一个或多个网关通信。所有通信一般是双向的,当然上行通信预计将是主要的流量。各个终端设备和网关的通信分散在不同的频率信道和通信速率之中。通信速率将根据通信范围和消息的持续时间取一个折中值,以不同的速率通信实现互不干扰。Lora的通信速率范围从0.3kbps到50kbps。为了最大限度的提高终端设备的电池寿命和网络容量,LoRa基础网络能管理通信速率和每个终端设备的RF输出,也就是说,具备自适应通信速率(ADR)功能。只要遵守以下规则,终端设备可能用任何可用的信道、任何可用的通信速率通信:

  • [x] 1)终端的每次通信以伪随机的方式改变通信信道。产生的频率多样性使系统在干扰上更具鲁棒性。
  • [x] 2)终端遵守该子带规定的最大发送占空比和地方法规。
  • [x] 3)终端遵守该子带规定的最大发射持续时间(或滞留时间)和地方法规。

所有LoRaWAN设备至少实现了CLASSA的功能。此外,他们还可能实现了本文档描述的CLASS B,CLASS C或被其他人自定义的功能。

所有多字节采用的都是小端模式(little endian)和EUI是64位整数,发送为小端模式。

LoRaWAN CLASSA CLASSB CLASSC 区分

双向终端设备(CLASSA)

A类的终端设备允许双向通信,每一个终端设备的上行传输,跟随两个短的下行接收窗口。发送时隙的调度基于终端设备自己的通信需求,该时隙是基于随机时间基础(ALOHA类型的协议的)上的很小变动。CLASSA适用于超低功耗终端系统的应用,该类应用只要求终端发送上行传输之后,服务端再下行传输至终端。从服务端在任何其他时间下行链路通信将必须等待直到下一个预定的上行链路通信(即每次只能先上行数据才能收到下行数据)。

带接收时隙的双向终端设备(CLASSB)

B类的终端设备允许更多的接收时隙。除A类随机接收窗口,B类设备中在计划的时间打开额外的接收窗口。为了使终端设备打开它的接收窗口,在计划的时间中接收到来自网关的同步信标(Beacon帧)。这允许服务端知道什么时候终端正在侦听信号。

最大接收时隙的双向终端设备(CLASSC)

C类有近连续打开接收窗口的终端设备,只有发射时才关闭接收。CLASSC终端设备将比CLASS A、CLASS B功耗更大,但CLASS C终端设备的通信延迟最低。

LoRa调制解调器的链路控制

通过配置寄存器RegOpMode,就能将FSK调制解调器切换成LoRaTM调制解调器,切换操作可以在飞行模式(睡眠模式)下进行;LoRa调制解调器采用专有的调制和解调程序,将扩频调制与循环纠错编码技术结合起来,从而提高了链路预算和抗干扰性。LoRa调制解调器的配置图:

LoRa调制解调器拥有独立的双端口数据缓冲FIFO,而且在所有操作模式下均可通过SPI接口访问该通道。选定LoRa调制模式之后,配置寄存器中SX1276/77/78的映射关系发生变化。

RegOpMode寄存器

name bits description
LongRangeMode 7bit 0:FSK/OOK模式 1:LoRa模式 该位仅可在睡眠模式下修改。
AccessSharedReg 6bit 设置该位,允许在LoRa 模式下访问FSK 寄存器页面
reserved 5~4bits 预留
LowFrequencyModeOn 3bit 访问低频模式寄存器(从地址0x61开始)0:高频 1:低频
Mode 2~0bits 收发器模式(睡眠、待机等)

RegOpMode.LongRangeMode进入Lora模式

#define OPMODE_LORA      0x80     //LoRa模式,该位仅可在睡眠模式下修改。
// 进入Lora模式的操作
static void opmodeLora() {
u1_t u = OPMODE_LORA;
#ifdef CFG_sx1276_radio
u |= 0x8; // TBD: sx1276 high freq
#endif
writeReg(RegOpMode, u);
}

RegOpMode.AccessSharedReg

一般情况下仅当器件设置为 LoRa 模式时,才能访问到 LoRa 寄存器(同理, FSK 寄存器仅在 FSK 模式下才能访问);但是如果设置了AccessSharedReg位,则允许在LoRa模式下访问位于地址空间(0x0D:0x3F)的 FSK 寄存器页面 。

该位在器件处于睡眠模式时工作。为确保之后能够正常访问 LoRa 寄存器,完成相关设置后清零该位。

RegOpMode.AccessSharedReg=0:访问LoRa寄存器页面0x0D:0x3F

RegOpMode.AccessSharedReg=1:(在LoRa模式下)访问FSK寄存器页面0x0D:0x3F

RegOpMode.mode(2~0bits) 进入操作模式

#define OPMODE_SLEEP     0x00     //000:睡眠模式
#define OPMODE_STANDBY 0x01 //001:待机模式
#define OPMODE_FSTX 0x02 //010:频率合成发送(FSTx)
#define OPMODE_TX 0x03 //011:发送(Tx)
#define OPMODE_FSRX 0x04 //100:频率合成接收(FSRx)
#define OPMODE_RX 0x05 //101:持续接收(RXCONTINUOUS)
#define OPMODE_RX_SINGLE 0x06 //110:单次接收(RXSINGLE)
#define OPMODE_CAD 0x07 //111:信道活动检测(CAD)
// 操作进入相应模式
static void opmode (u1_t mode) {
writeReg(RegOpMode, (readReg(RegOpMode) & ~OPMODE_MASK) | mode);
}
opmode(OPMODE_SLEEP);
opmode(OPMODE_STANDBY);
// ...

扩频因子(SF值)、调制带宽(BW)、纠错编码率(CR)

针对特定的应用,可以通过调整 扩频因子(SF值)、调制带宽(BW)及纠错编码率(CR) 这三个关键设计参数对LoRa调制解技术进行优化。对上述某个或多个参数进行调整之后,可实现在链路预算、 抗干扰性、频谱占用度及标称数据速率之间达到平衡。

扩频因子

LoRaTM扩频调制技术采用多个信息码片来代表有效负载信息的每个位。扩频信息的发送速度称为符号速率(Rs),而码片速率与标称符号速率之间的比值即为扩频因子,其表示每个信息位发送的符号数量。

扩频因子取值

RegModulationCfg2.SF 扩频因子(码片/符号) LoRa解调器 信噪比(SNR)
   6             |         64            |-5 dB
7 | 128 |-7.5dB
8 | 256 |-10 dB
9 | 512 |-12.5 dB
10 | 1024 |-15 dB
11 | 2048 |-17.5 dB
12 | 4096 |-20 dB

因为不同扩频因子(SpreadingFactor)之间为正交关系,因此必须提前获知链路发

送端和接收端的扩频因子。另外,还必须获知接收机输入端的信噪比。在负信噪比条件下信号也能正常接收, 这改善了LoRa接收机的灵敏度、链路预算及覆盖范围。

扩频因子寄存器取值在RegModemConfig2寄存器中。

RegModemConfig2寄存器

  • [x] RegModemConfig2.SpreadingFactor 取值(SF值):
#define SX1272_MC2_SF7  0x70    //RegModemConfig2.SpreadingFactor=7     128 码片/符号
#define SX1272_MC2_SF8 0x80 //RegModemConfig2.SpreadingFactor=8 256 码片/符号
#define SX1272_MC2_SF9 0x90 //RegModemConfig2.SpreadingFactor=9 512 码片/符号
#define SX1272_MC2_SF10 0xA0 //RegModemConfig2.SpreadingFactor=10 1024 码片/符号
#define SX1272_MC2_SF11 0xB0 //RegModemConfig2.SpreadingFactor=11 2048 码片/符号
#define SX1272_MC2_SF12 0xC0 //RegModemConfig2.SpreadingFactor=12 4096 码片/符号 /* sf_t sf = getSf(LMIC.rps);
enum _sf_t { FSK=0, SF7, SF8, SF9, SF10, SF11, SF12, SFrfu };
SX1272_MC2_SF7 + [0~5]<<4 即可得到SF7、SF8、SF9、SF10、SF11、SF12
*/
mc2 = (SX1272_MC2_SF7 + ((sf-1)<<4));
if (getNocrc(LMIC.rps) == 0) {
mc2 |= SX1276_MC2_RX_PAYLOAD_CRCON;
} writeReg(LORARegModemConfig2, mc2);
  • [x] RegModemConfig2.RxPayloadCrcOn取值:
  • 上行数据格式
前导码 可选报头 数据有效负载
0x34(8bytes) 报头+报头_CRC PayLoad+PayLoad_CRC
  • 下行数据格式
前导码 可选报头 数据有效负载
0x34(8bytes) 报头+报头_CRC PayLoad

上行、下行报头CRC及数据有效负载CRC都是芯片自动填充的,并且有时候某一项PayLoad_CRC不是必选项。

//RegModemConfig2.RxPayloadCrcOn = 0: CRC 关闭
//RegModemConfig2.RxPayloadCrcOn = 1: CRC 开启
#define SX1276_MC2_RX_PAYLOAD_CRCON 0x04 if (getNocrc(LMIC.rps) == 0) {
mc2 |= SX1276_MC2_RX_PAYLOAD_CRCON;
} writeReg(LORARegModemConfig2, mc2);

扩频因子6(SF6)设置(特定)



当扩频因子SF为6时, LoRa调制解调器的数据传输速率最快,因此这一扩频因子仅在特定情况下使用。使用时,需在SX1276/77/78寄存器上进行以下几项设置:

  • [x] 将RegModemConfig2.SpreadingFactor设置为6;
  • [x] 将报头设置为隐式模式(即RegModemConfig1.ImplicitHeaderModeOn设置为1);传输对时间有苛求的数据时使用隐式报头。
  • [x] 在寄存器地址(0x31)的2至0位中写入0b101一值;0x31在Lora模式下为预留寄存器,除本情况外不使用。
  • [x] 在寄存器地址(0x37)中写入0x0C一值。0x37在Lora模式下为预留寄存器,除本情况外不使用。

编码率

LoRaTM调制解调器采用循环纠错编码进行前向错误检测与纠错,以提高链路的鲁棒性。使用纠错编码之后,会产生额外的传输开销。每次传输产生的循环编码开销见下表。

编码率(RegTxCfg1) 循环编码率 开销比率
    1          |    4/5     |   1.25
2 | 4/6 | 1.5
3 | 4/7 | 1.75
4 | 4/8 | 2

前向纠错能有效提高链路的可靠性。由此,编码率(及抗干扰性能)可以随着信道条件的变化而变化——可以选择在报头中加入编码率以便接收端能够解析。

RegModemConfig1.CodingRate 纠错编码率

隐式报头模式下应在接收机上设置该位,以确定预期编码率。

RegModemConfig1.CodingRate = 001 : 4/5

RegModemConfig1.CodingRate = 010 : 4/6

RegModemConfig1.CodingRate = 011 : 4/7

RegModemConfig1.CodingRate = 100 : 4/8

所有其他值:预留

#define SX1276_MC1_CR_4_5            0x02
#define SX1276_MC1_CR_4_6 0x04
#define SX1276_MC1_CR_4_7 0x06
#define SX1276_MC1_CR_4_8 0x08
// ...
switch( getCr(LMIC.rps) ) {
case CR_4_5: mc1 |= SX1276_MC1_CR_4_5; break;
case CR_4_6: mc1 |= SX1276_MC1_CR_4_6; break;
case CR_4_7: mc1 |= SX1276_MC1_CR_4_7; break;
case CR_4_8: mc1 |= SX1276_MC1_CR_4_8; break;
default:
ASSERT(0);
}
// ...
// set ModemConfig1
writeReg(LORARegModemConfig1, mc1);
// ...

信号带宽

增加信号带宽,可以提高有效数据速率以缩短传输时间,但这是以牺牲部分一接收灵敏度为代价。当然,多数国家对允许占用带宽都设有一定的约束。FSK调制解调器描述的带宽是指单边带带宽,而LoRaTM调制解调器中描述的带宽则是指双边带带宽(或全信道带宽)。LoRaTM调制解调器规格表中列出了在多数规范约束的带宽范围。

带宽(kHz) 扩频因子 编码率 标称比特率(bps)
7.8 12 4/5 18
10.4 12 4/5 24
15.6 12 4/5 37
20.8 12 4/5 49
31.2 12 4/5 73
41.7 12 4/5 98
62.5 12 4/5 146
125 12 4/5 293
250 12 4/5 586
500 12 4/5 1172

注意: 较低频段(169 MHz)不支持250kHz和500kHz的带宽。

RegModemConfig1.Bw 信号带宽

#define SX1276_MC1_BW_125                0x70
#define SX1276_MC1_BW_250 0x80
#define SX1276_MC1_BW_500 0x90 // ...
switch (getBw(LMIC.rps)) {
case BW125: mc1 |= SX1276_MC1_BW_125; break;
case BW250: mc1 |= SX1276_MC1_BW_250; break;
case BW500: mc1 |= SX1276_MC1_BW_500; break;
default:
ASSERT(0);
}
// ...
// set ModemConfig1
writeReg(LORARegModemConfig1, mc1);
// ...

比特速率、码片速率和符号速率等区分

经过信源编码的含有信息的数据称为“比特”;

经过信道编码和交织后的数据称为“符号”;

经过最终扩频得到的数据称为“码片”。

符号表示约定

  • BW表示带宽(BandWidth)
  • SF表示扩频因子(SpreadingFactor)
  • Rs符号速率(Symbol Rate)
  • cps码片速率(chip per-second)
  • Rb比特率(Bit Rate)

符号速率(Symbol Rate)

  • SymbolRateBitRate的对应关系要依据调制方式。如是BPSK调制,那么1bit可以代表0,1两种信息,此时BitRate=SymbolRate。如是QPSK调制,4个信息就需要2bit来表示,此时BitRate=2 SymbolRate
  • 符号速率*扩频因子=码片速率。

码片速率(chip per-second)

  • 系统通过扩频把比特转换成码片。码片相当于模拟调制中的载波作用,是数字信号的载体。
  • 一个数据信号(如逻辑1或0)通常要用多个编码信号来进行编码,那么其中的一个编码信号就称为一个码片。
  • 码片数率是指扩频调制之后的数据数率,用cps表示(chip per-second) 。

LoRa发送参数关系(扩频因子、码片速率、符号速率)

  • [x] LoRa符号速率
Rs = \frac{BW}{2^{SF}}

发送信号为恒包络信号。每赫兹每秒发送一个码片。

  • [x] 扩频因子

    码片速率=符号速率×扩频因子
SF = \frac{cps}{{Rs}}

(3)LoraWAN:链路控制、SF BW CR的更多相关文章

  1. LLC 逻辑链路控制

    LLC  协  议 4.2.1 LLC帧格式 LLC协议定义了LLC层之间通信的帧格式,参见图4.3. 图4.3  LLC帧格式 LLC帧格式中各个字段的含义如下: ① 服务访问点(SAP)地址:SA ...

  2. (4)LoraWAN:Physical Message Formats

    四.Physical Message Formats LoRa数据包结构 LoRaTM调制解调器采用隐式和显式两种数据包格式.其中,显式数据包的报头较短,主要 包含字节数.编码率及是否在数据包中使用循 ...

  3. (2)LoraWAN:Lora LMIC library 编程模型及API

    二.LMIC library 编程模型及API LMiC库可以通过一组API函数(API functions),运行时函数(run-time functions),回调函数(callback func ...

  4. (0)Lora及LoraWAN

    Lora和LoraWAN的区别 LoRa经常被误用来描述整个LPWAN通信系统,其实Lora是Semtech拥有的专有调制格式. SX1272和SX1276 LoRa芯片使用称为chirp扩频(CSS ...

  5. BlueTooth: 蓝牙基础知识进阶——链路控制操作

    转自:http://blog.csdn.net/augusdi/article/details/25887395 七链路控制操作 链路控制操作就是用来描述一个设备是如何加入piconet又是如何从一个 ...

  6. 《TCP/IP详解卷1:协议》第2章 链路层-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  7. TCP/IP:链路层

    链路层主要目的: 1.        为IP模块发送和接收IP数据报. 2.        为ARP模块发送ARP请求和接收ARP应答. 3.        为RARP发送RARP请求和接收RARP应 ...

  8. tcp/ip详解 卷1 -- 链路层

    以太网 以太网指数字设备公司,英特尔公司,Xeror公司在 1982年联合公布的一个标准, 是当前 TCP/IP 采用的主要局域网技术. 以太网采用 CSMA/CD 的媒体接入方法, 即 带冲突检测的 ...

  9. 链路层 - SLIP,PPP,

    最常使用的封装格式是RFC 894定义的格式.图2 - 1显示了两种不同形式的封装格式.图中每个方框下面的数字是它们的字节长度. 两种帧格式都采用48 bit(6字节)的目的地址和源地址( 8 0 2 ...

随机推荐

  1. LNMP环境搭建(PHP7.4.0)

    目录 准备工作 安装wget 安装net-tools 安装vim 配置显示行号 关闭防火墙 安装Nginx 安装依赖 编译安装Nginx 配置环境变量 Systemd管理 安装MySQL 安装依赖 下 ...

  2. C:数值溢出问题

    当超过一个数据类型能够存放最大的范围时,数值会溢出. 有符号位最高位溢出的区别:符号位溢出会导致数的正负发生改变,但最高位的溢出会导致最高位丢失. #include <stdio.h> i ...

  3. css属性书写顺序(重点)

  4. 关闭AnyConnect登录安全警告窗口

    一.问题描述:使用AnyConnect client连接时,如何关闭的安全警告窗口? 二.原因分析:   AnyConnect Server(ASA)和AnyConect client(PC)上没有受 ...

  5. inline-block,真的懂吗

    曾几何时,display:inline-block 已经深入「大街小巷」,随处可见 「display:inline-block; *display:inline; *zoom:1; 」这样的代码.如今 ...

  6. hbase(待完善)

    1. 应用 <1>  hbase解决海量图片存储 <2>

  7. ypACM社团年终赛暨实验室选拔赛题解

    记得补题,题目两小时半还是挺困难ak的,毕竟我验题也验了几天的时间,题目基本没有锅.题目基本属于简单题 我的三道题都是很基本的题目,希望大家补题 这些题解都是我写的,如果有疑问可以qq问我 所有的核心 ...

  8. WCF 数据传输SIZE过大

    1.当客户端调用WCF服务时,接受数据过大,可通过以下配置解决 <basicHttpBinding> <binding name="BasicHttpBinding_Wcf ...

  9. 关于java自学的内容以及感受(7.21)

    直接切入正题说一下自学到的内容: 定义合法标识符的规则: 可以由英文字母,数字,_,$组成. 不能数字开头和包含空格. 不可以使用关键字和保留字,但是可以包含关键字和保留字. byte short i ...

  10. fiddler 保存请求数据并发送到自己的服务器接口

    通过Rules菜单打开 Customize Rules 搜索 OnBeforeResponse 方法,再方法后面添加如下代码: if (oSession.fullUrl.Contains(" ...