无线通讯LoRa—SX1278芯片开发笔记
1、资源搜集Datasheet 和驱动源码从Semtech官网下载最新驱动代码http://www.semtech.com/apps/filedown/down.php?file=sx12xxDrivers-V2.1.0.zipDatasheet我上传了资源,中文版和英文版都有,还带了笔记的http://download.csdn.net/detail/csdn_logo/95607682、过一遍Datasheet,过之前必须对一些英文缩写有些了解,不然会要到处翻专业术语及其缩写:FHSS 跳频扩频技术 FIFO 先进先出队列,这里代表队列寄存器PA 功率放大器 LNA 低噪声放大器SNR 信噪比 SF 扩频因子PLL 锁相环 CAD 信道活动检测CR 编码率 BW 带宽RS符号速率 Preamble 序头。。。重要参数:扩频因子 RegModulationCfg因为不同扩频因子(SpreadingFactor)之间为正交关系,因此必须提前获知链路发送端和接收端的扩频因子。另外,还必须获知接收机输入端的信噪比。在负信噪比条件下信号也能正常接收,这改善了LoRa接收机的灵敏度、链路预算及覆盖范围。注:SF=6 时必须用ImplicitHeader 模式循环纠错编码cyclic error coding信号带宽Bandwidth较低频段(169 MHz)不支持250kHz和500kHz的带宽数据包结构序头preamble 报头 header (可配) 数据段 payload 校验码CRC对于希望前导码是固定开销的情况,可以将前导码寄存器长度设置在6到65536之间来改变发送前导码长度,实际发送前导码的长度范围为6+4至65535+4个符号。这样几乎就可以发送任意长的前导码序列。接收机会定期执行前导码检测。因此,接收机的前导码长度应与发射机一致。如果前导码长度为未知或可能会发生变化,应将接收机的前导码长度设置为最大值。报头分显示报头模式和隐式报头模式低数据速率优化LowDataRateOptimize当单个符号传输时间超过16毫秒时,必须使用LowDataRateOptimize位。注意:发射机和接收机的LowDataRateOptimize位设置必须一致。有效负载 payload其实就是数据段,即你要发或者要收的数据数字寄存器和 数字I/O寄存器113个,数字I/O也有6个,太多了,具体见Datasheet操作模式 OpMode3、分析驱动源码解压后打开doc下的README.txt找到关于sx1276的相关说明如下:2.1.3 SX1276 driver version V2.1.0——————————————————————————-The SX1276 driver is split in 4 parts (驱动源码包含如下四个部分)1. Generic SX1276 driver. 驱动调用接口( src\radio\SX1276.c )2. SX1272 FSK modem driver. FSK调制模式用( src\radio\SX1276-Fsk.c andsrc\radio\SX1276-FskMisc.c )3. SX1272 LoRa modem driver. LoRa调制模式用( src\radio\SX1276-LoRa.cand src\radio\SX1276-LoRaMisc.c )4. SX1276 HAL ( Hardware Abstraction Layer ). 硬件抽象层(src\platform\sx12xxEiger\SX1276-Hal.c )1. The generic SX1276 driver implements atleast the functions required bythe RadioDriver structure defined in src\radio\radio.h file. It offersalsothe same interface for the FSK or the LoRa modem.Inorder to choose which modem to use one must modify the src\radio\radio.hfile as follows:-For FSK modem#define LORA 0-For LoRa modem#define LORA 12. FSK调制的可以跳过不看3. The LoRa modem driver handles the SX1276as a LoRa modemInorder to change generic LoRa modem settings one must modify the followingparameters in file src\radio\SX1276-LoRa.c (LoRa模式初始化参数配置的结构体)tLoRaSettings LoRaSettings ={870000000, // RFFrequency 收发频率20, // Power 发射功率8, // SignalBw [0: 7.8kHz, 1: 10.4 kHz, 2: 15.6 kHz, 3: 20.8 kHz, 4: 31.2 kHz, 带宽// 5: 41.6 kHz, 6: 62.5 kHz, 7: 125 kHz, 8:250 kHz, 9: 500 kHz, other: Reserved]7, // SpreadingFactor [6:64, 7: 128, 8: 256, 9: 512, 扩频因子// 10: 1024, 11: 2048, 12:4096 chips]2, // ErrorCoding [1:4/5, 2: 4/6, 3: 4/7, 4: 4/8] 循环纠错编码true, // CrcOn CRC校验false, // ImplicitHeaderOn 序头模式1, // RxSingleOn 接收模式中的single模式开关 0代表continue模式0, // FreqHopOn 跳频开关4, // HopPeriod 跳频周期100, // TxPacketTimeout 发送超时时间100, // RxPacketTimeout 接收超时时间4 // PayloadLength 负载数据长度};4. The HAL makes the SX1276 driver platformindependent.One must modify each function inside this file(src\platform\sx12xxEiger\SX1272-Hal.c ) according to the platform used.(根据硬件平台修改硬件抽象层)3. How to use the driver:——————————————————————————-This driver has been tested for high speedtransmission (up to 100kbps in FSK)and long payloads (up to 255 bytes in FSK or LoRa). To set a transmission /reception, it is necessary to:-Change the payload lengthThe payload length for the system isdefined with the parameter BUFFER_SIZElocated in main.c#define BUFFER_SIZE 128 // Definethe payload // size hereThe payload length can be configured from 1up to 2554、用例自己定义一个函数用来动态的初始化芯片staticvoidRFInit(){Radio->LoRaSetOpMode(RFLR_OPMODE_STANDBY);//settheRFsettingsRadio->LoRaSetPa20dBm(false);Radio->LoRaSetRFPower(5);Radio->LoRaSetSpreadingFactor(7);//SF6onlyoperatesinimplicitheadermode.Radio->LoRaSetErrorCoding(1);Radio->LoRaSetPacketCrcOn(0);Radio->LoRaSetSignalBandwidth(7);Radio->LoRaSetImplicitHeaderOn(0);Radio->LoRaSetSymbTimeout(0x3FF);Radio->LoRaSetPayloadLength(128);Radio->LoRaSetLowDatarateOptimize(true);Radio->LoRaSetFreqHopOn(false);Radio->LoRaSetRxSingleOn(true);Radio->LoRaSetPreambleLength(6);Radio->LoRaSetOpMode(RFLR_OPMODE_STANDBY);}通过RF发送数据的发送函数,主要用于收发异频,收发异频能减少干扰INT8URFWrite(INT8U*buff,INT8Usize,INT32Ufreq){Radio->LoRaSetRFFrequency(freq);//478750000DownChannel[10]Radio->SetTxPacket(buff,size);while(Radio->Process()!=RF_TX_DONE);returnsize;}通过RF接收数据的接收函数INT8URFRead(INT8U*buff,INT32Ufreq,INT8Utimeout){uint32_tresult;INT16URxLen;Radio->LoRaSetRFFrequency(freq);Radio->LoRaSetRxPacketTimeout(timeout*1500);//1s=1500Radio->StartRx();while(1){result=Radio->Process();///SX1276LoRaProcessif((result==RF_RX_DONE)||(result==RF_RX_TIMEOUT)){break;}}if(result==RF_RX_DONE)//RFBuffer{Radio->GetRxPacket(buff,&RxLen);returnRxLen;}else{return0;}}了解详情LoRaWAN版本历史及协议格式说明
译文参考翻译原文链接LoRaWAN 规范 1.0 (章节2~4)LoRaWAN 规范 1.0 (章节5)LoRaWAN 规范 1.0 (章节6)LoRaWAN 规范 1.0 (章节7)LoRaWAN 规范 1.0 (章节10~13)英文文档下载链接LoRaWAN1.0.1_d3LoRaWAN Specification 1R0LoRaWAN1.0.2第7章物理层(Physical layer)的内容放到另一个文档LoRaWAN Regional Parameters修正章节4.3.1.1中与ADR相关的错误描述(要写成ADR_ACK_LIMT而不是ADR_ACK_DELAY)修正章节18.2标题错误(1.0.1中是19.2)增加MAC命令DlChannelRec,该命令用来修改节点下行频率增加MAC命令Tx ParamSetupRec,此命令用来远程修改某些区域中节点的最大TX驻留时间和最大无线电发射功率终端设备能够处理多个ADRreq命令(章节5.2)明确AppKey定义LoRaWAN1.0.1_d3该版本是一些bug修复,协议本身没有什么改动。阅读中文翻译的朋友可以略过大部分改动,因为这些在翻译过程中已经处理了。变化如下:明确 RX 窗口开启时间修正 章节NA 中 DR2 负载大小上限修正 7.2.2 中的拼写错误对 7.2.2 中使用码率 4/5 提出新的规定,以保证无线传输时间 < 400ms修正 6.2.5 中的JoinAccept MIC算法5.2 中的 字段名由 NbRep 改为 NbTrans删掉4.3.3.2,排除 MAC层不对应用数据(Applicative payload)加密的情况。出于应用对安全的进一步要求,不管用什么算法,需要对payload加密(这里无关LoRaWAN协议,跟个人安全有关),然后再使用LoRaWAN中的算法在MAC层再次加密。修正 FHDR 相关错别字修正 7.2.5 中 chMaskCntl 等于6或7时 ChMask 对信道的影响。说明 JoinResp 消息中 RX1 的数据速率偏移删除 7.2.7 中 DRoffset表的下半部分。LoRaWAN Specification 1R0初始版本协议格式整理整个协议包括LoRa和网关交互部分,服务器只需要带颜色的数据。最近有不少朋友对PHYPayload还是搞不清,再分享两张图片,把整个流程都分享给大家1 入网激活2 接收入网3 正常通信本文由 qingchuwudi 整理、译制,除非另有声明,本作品采用知识共享署名 3.0 中国大陆许可协议进行许可。了解详情利用DEMO系统 评估LoRa终端与网关
一. 系统意义为帮助客户有效评估LoRa终端http://www.rimelink.com/pd.jsp?id=2)和网关(http://www.rimelink.com/pd.jsp?id=14),我们设计一个DEMO板,该DEMO板需要满足:简单易用,成本低廉,稳定可靠,开放设计资料(免费下载源代码:http://www.rimelink.com/nd.jsp?id=38&_np=105_315)。达到:1. 帮助用户与LoRa终端硬件接线;2. 帮助用户与LoRa终端解析软件协议帧;3. 有效评估LoRa终端的性能(通信距离、能耗等)和LoRa网关功能。如此一来,客户可以快速搭建一个物联网系统,该系统如下图所示,可以将温湿度采集到云服务器,通过智能手机查看。二. 产品框架DEMO板的整体框架如下图所示,MCU选用STM8L151C8T6,达到开发和采购低成本;温湿度传感器选用SHT10,它的成本较低;电池盒安装2节AAA干电池,贴片方式焊接在电路板上;miniUSB接口方便接入5V供电;2.0mm圆孔8芯排座用于安装LoRa终端。三. 硬件设计四. 软件设计1. 软件开发环境开发语言为ASNI C,IDE为IAR for STM8,为降低复杂度没有使用操作系统。2.Demo系统逻辑Demo系统的主程序逻辑如上图所示,非常简洁,基于最简单的软件结构:while(1)无限循环。经过实测:Demo系统采集SHT10的12位湿度约用时62毫秒,采集14位温度约用时216毫秒。用户每3秒采集一次温湿度数据,再传输给RNDU470T。3. UART驱动时序RNDU470T是超低功耗产品,它大部分时间都处于休眠状态,因此Demo系统需要“唤醒”RNDU470T才能发送UART数据帧;同理,考虑Demo系统也可能处于休眠状态,RNDU470T在发送UART数据帧也通过信号线“唤醒”用户系统。具体时序请查看《锐米LoRa终端说明书》。如下图所示,当Demo系统发送UART数据帧时,先置高P7引脚,然后启动UART端口发送序列,当发送结束时再拉低P7引脚;置高P7引脚(T0时刻)与启动UART端口发送(T1时刻)有一个延时Tx prepare time,它的最小值为100微秒。4. UART通信帧解析算法RNDU470T的UART通信帧格式如下图所示,它是变长数据帧,帧具体的定义请参考《锐米LoRa终端说明书》。为简化系统设计,我们强烈建议您采用“状态机”来解析该UART数据帧,并且把解析工作放在ISR(中断服务程序)完成,仅当接收到最后一个字节(0x0D)时,再将整个数据帧提交给进程(Demo系统为main程序)处理。该解析状态机的原理如下图所示:5. 代码工程整个工程文件如下图所示:main.c:Demo系统的整体逻辑代码;SHT7x.c/.h:SHT10驱动代码;stm8l15x_it.c/.h:MCU中断服务程序注册文件timer.c/.h:定时器驱动代码;uart.c/.h:UART驱动代码。Project下存放基于IAR开发环境的工程文件;STM8L15x_StdPeriph_Driver:ST公司官方驱动库文件。了解详情LoRaWAN 规范1.0 (章节10~13)
10 B类模式的上行数据帧除了帧头中FCtrl字段的保留(RFU)位,B类和A类的上行数据帧一样。B类使用A类中没有使用的RFU位第几位 | 3… | ||||
---|---|---|---|---|---|
FCtr | AD | ADRACKRe | AC | Class | FOptsLe |
LoRaWAN 规范1.0.2(章节7)
7. 物理层(Physical Layer7.1 欧洲ISM频段 863-870MHz7.1.1 欧洲 863-870 前导码同步字见下表:调制方式 | 同步字 | 前导码长度 |
---|---|---|
LoR | 0x3 | 8 symbol |
GFS | 0xC194C | 5 byte |
调制方式 | 带宽[kHz | 信道频率[MHz | FSK 比特率 或 LoRa 数据率或比特率 | Nb 信道 | 占空比 |
---|---|---|---|---|---|
LoR | 12 | 868.10 868.30 868.5 | DR0 至 DR5 / 0.3-5kbp | < |
LoRaWAN 规范 1.0.2 (章节6)
6 终端激活(End-Device Activation所有终端设备在正式加入LoRaWAN网络之前必须先进行初始化并激活。有两种激活方式无线激活(Over-The-Air Activation (OTAA)),设备部署和重置时使用;手动激活(Activation By Personalization (ABP)),此时初始化和激活一步完成。6.1 激活成功后存储在终端设备的数据以下信息在激活成功后回存储在终端设备:设备地址(DevAddr)、应用ID(AppEUI)、网络会话密钥(NwkSKey)和应用会话密钥(AppKey)。6.1.1 终端设备地址(DevAddr)DevAddr是终端在当前网络中的识别码,大小32bits。结构如下:Bi | [31..25 | [24..0 |
---|---|---|
DevAddr bit... |
LoRaWAN 规范 1.0.2 (章节5)
5 MAC Command网络管理时会在网络服务器和终端MAC层之间传输一系列MAC命令。MAC层命令对应用、应用服务器以及终端设备上的应用永不可见。一帧数据中可以包含任何MAC命令序列,MAC命令既可以放在FOpts中和正常数据一起发送;也可以放在FRMPayload中单独发送,此时FPort = 0,但不能同时在两个字段携带MAC命令。放在FOpts中的MAC命令不加密,并且不能超过15个字...了解详情LoRaWAN 规范 1.0.2 (2~4章)
2 LoRaWAN 简介LoRaTM 是由Semtech开发的一种远距离、低功耗、低速率的无线射频技术。本文档中,将具有比A类更多功能的设备统一称为 “高类终端设备”。原文Devices implementing more than Class A are generally named “higher Class end-devices” in this document.2.1 LoRaWAN Classes终端双向通信(A类)A类的终端设备每次发送数据后会打开两个持续时间很短的接收窗口来接收下行数据,终端设备通过这种方式实现双向通信。传输时间间隔等于终端设备基础的时间间隔加上一个随机时间(ALOHA类型协议)。对终端设备来说,A类是功耗最低的系统,只有在发送数据后的一小段时间内接收处理服务器发送来的数据。服务器在其它所有时间上的下行数据必须等待节点下一次发送数据才可以下发。通过随机时间对间隔进行微调来实现随机访问,让所发送者平等、自由地竞争信道的使用权。低功耗,先发送后接收,发送和接收交替进行。终端只有在发送数据后才能接收处理服务器发送来的数据,发送数据不受接收数据的影响。收发比=1:1具有接收时隙的终端双向通信(B类)B类终端设备允许更多的接收窗口。在A类接收窗口的基础上B类设备还会在特定的时刻打开更多的接收窗口。而为了保证终端设备能够在特定的时间打开接收窗口,它会从网关接收信标来完成时间同步。这样服务器也就可以获知终端设备的所有接收窗口的时刻。同样是先发送后接收,不同的是每次发送后按照一定时间间隔启动接收窗口,接收多条数据。时间间隔从网关获取,以便服务器知晓终端接收消息的时刻。收发比=1:N最大接收时隙的终端双向通信(C类)C类终端设备的接收窗口,除了在发送数据的时候关闭外一直处于打开状态。C类终端功耗比A类和B类都大,但对于和服务器之间的交互来说延迟也最低。打开接收窗口的时间间隔很小,几乎不间断的接收消息。比A和B更耗能,但和服务器交互的延迟低。 2.2 规范高级类的附加功能向下兼容低级类。所有LoRaWAN终端必须实现A类的功能。注意:本规范手册中:物理消息格式、MAC消息格式以及A类和其它高级类都具备的东西,只在本手册的A类部分介绍。3 物理层消息格式LoRa中用来区分上行和下行消息。3.1 上行链路消息上行链路消息由终端发送经过一个或多个网关中转后到达服务器1。它使用的LoRa无线分组显性模式由物理头(PHDR)和它的CRC(PHDR_CRC)校验组成。由CRC保证荷载数据的一致性(发送和接收的数据完全一致,不仅仅是数据完整)。Uplink PHY:3.2 下行链路消息下行链路消息由服务器发送给终端设备,每条消息对应的终端设备是唯一确定的,而且只通过一个网关2转发。下行链路消息由物理头(PHDR)和这个头的CRC(PHDR_CRC)组成3。下行链路消息:3.3 接收窗口设备终端每次发送数据完成后打开两个收窗口。以数据发送结束作为基准进行计算接收窗口的开启时间。发送 | | RX1 | RX2|<---------------------->|<--------------------------->| || 无线发送耗时 | RECEIVE_DELAY1 | || |<------------------------------------------------------->|RECEIVE_DELAY3.3.1 第一个接收窗口的 开启、使用的信道和数据速率第一个接收窗口(RX1)使用的频率、数据速率与上行传输时使用的频率、数据速率存在映射关系。RX1在发送完成后第RECEIVE_DELAY1秒(+/- 20 毫秒)开启。并且收发数据使用的数据速率和地域有关,详情资料在文档《LoRaWAN 区域相关参数手册》(LoRaWAN Regional Parameters document)。默认情况下第一个接收窗口数据速率和最后一次发送数据时使用的速率相同。3.3.2 第二个接收窗口的 开启、使用的信道和数据速率第二个接收窗口RX2使用经过修正的可配置的 经过配置的固定的 频率和数据速率。RX2在发送完成后第RECEIVE_DELAY2秒(+/- 20 毫秒)开启。频率和数据速率可以通过MAC命令修改(见第5章)。默认的频率和数据速率与地域相关,详情资料在文档《LoRaWAN 区域相关参数手册》(LoRaWAN Regional Parameters document)。3.3.3 接收窗口持续时间接收窗口的最短时间必需满足:终端设备的无线收发器能够处理完下行数据的前导码。3.3.4 接收期间接收者的活动无线电接收器在某个接收窗口检测到相应的前导码后会继续接收,直到下行数据帧全部解调完毕。如果在第一个接收窗口检测并完成解调,同时通过检查地址(服务器分配的地址)和MIC,确认该帧属于本节点,终端设备不再打开第二个接收窗口。3.3.5 服务器给终端设备发送消息服务器必需要十分精确的在这两个接收窗口的时间点上发送数据终端设备才能收到。3.3.6 接收窗口相关的重要事项上一次发送结束后,在没有收到数据或者第二个没有关闭前,不能再次发送。3.3.7 其它协议数据的收发节点可以通过LoRaWAN收发窗口监听或传输其它协议,或者做任何传输。收发其它协议或者在LoRaWAN收发窗口之间传输任何数据。 不过,终端设备仍然要遵守当地法律法规并且遵循LoRaWAN规范。4 MAC 消息格式LoRa所有的上下行链路消息都会包含PHY负载(Payload),该负载以单字节MAC头(MHDR)为开始,MAC头后面是MAC负载(MACPayload)4,结尾是4字节的消息一致码(MIC)。4.1 MAC 层 (PHYPayload)大小(字节 | 1..... |
---|
怎样把LoRa终端功耗降到极致
一. 引言能耗对于电池供电的产品来说是一个重大的问题,一旦电能耗尽设备将“罢工”,在某些场合电能意味着电子产品的生命。物联网时代将会有越来越多电池供电的设备通过无线通信连接,降低能耗再次摆在工程师的桌面上—解决它。锐米LoRa终端(简称终端)RNDU470Thttp://www.rimelink.com/pd.jsp?id=2)不但具备空旷环境传输5km的超长距离优势,还将休眠能耗降低到极致(0.4uA,带RTC为1.4uA)。我们是怎么做到的呢?接下来,一步一步解密。二. 硬件设计1.选用低功耗器件终端MCU选用STM8L151C8T6,它属于超低功耗,不带RTC休眠为400nA,带RTC下休眠为1.4uA。该MCU拥有较大的RAM(4KB)和自带EEPROM(2KB),不用扩展外部存储设备,进行一步降低功耗和成本。终端射频芯片选用SX1278,在休眠模式下,该芯片功耗低至忽略不计。2.尽可能快地让射频模块休眠SX1278属于LoRa TM扩频调制技术,它的远距离优势得益于调制增益,不是靠增大发射功率(那将消耗更多电能)。该射频芯片的电流消耗如下:休眠<0.2uA,空闲=1.6mA,接收=12mA,发射(最大功率)=120mA.终端MCU通过“中断+定时器超时”方式控制SX1278,一旦射频完成发送或接收,立即进入休眠模式。3.了解MCU的工作模式与功耗降低MCU的功耗首先尽可能少地开启外设,其次尽可能地让其休眠。我们一起看看STM8L151C8T6不同工作模式下功耗。更多信息请链接http://blog.csdn.net/jiangjunjie_2005/article/details/47700597模式 | 等待 | 低功耗运行 | 低功耗等待 | 主动停止 | 停止 | |
入口 | WF | WF | 软件代码 | 软件代码+WF | HAL | HAL |
晶振 | 开 | 开 | LSI或LS | LSI或LS | LSI或LS... |
LoRa频率与带宽测试
一、测试目的跳频是抵抗外部干扰和多径衰退的好方法,它将频率分成一个个单独的物理信道。LoRa无线通信也不例外,需要按频率划分信道。LoRa的中心频率和通信带宽都是可以动态设置的,本实验旨在测试带宽与信道划分的关系。二、测试方法如上图所示,用2片iWL881A(长沙市锐米通信科技有限公司,www.rimelink.com)通过USB转串口连接到PC机上。模块都支持shell命令,可以设置BW(带宽)和Freq(频率)。RX模块接收到数据后,通过UART打印到PC屏幕上。三、测试数据带宽(kHz | 中心(kHz | 最小(kHz | 最大(kHz | 信道(kHz | 信道/带宽 |
50 | 470,00 | 469,90 | 470,42 | 52 | 1.0 |
471,00 | 470,90 | 471,42 | |||
25... |