amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 2254|回复: 35

准备开始做lora,分享资料

  [复制链接]
发表于 2017-5-17 09:59:09 | 显示全部楼层 |阅读模式
前言:sx1276为Semtech公司推出的具有新型LoRa扩频技术的RF芯片,具有功耗低、容量大、传输距离远、抗干扰能力强的优点,下面对SX1276的使用进行总结,主要是驱动层面上的整理和总结。
    这篇博文主要是在调研时进行简单试用后的总结,简单测量Lora模式和FSK模式下的一些调试参数,没有进行深入研究,代码仓库中的代码可以实现收发操作,仅供参考,有问题还请及时指出,也欢迎大家一起讨论。希望调试SX1276的朋友们可以多多总结出更好的博文分享给大家!—— 2016.1.19更新

平台介绍
编译环境:IAR7.10
硬件平台:STM32F103+LoRa模块

一、阅读datasheet
1.1 基本工作参数
        移植之前,我们需要对芯片有一个整体的概念,对参数和工作模式要有一定的解,下面的表格为几款不同的RF模块的基本参数的比较。

SI4432        SI4463        SX1276
输出功率        <= +20dbm(100mw)        <= +20dbm(100mw)        <= +20dbm(100mw)
波特率        <= 256Kbps        <= 1Mbps        <= 300Kbps
接收灵敏度         <= -121dbm        <= -129dbm        <= -148dbm(LoRa)
调制方式        (G)FSK/OOK        (G)FSK/(G)MSK/OOK        (G)FSK/(G)MSK/OOK/LoRa
频率范围        240-930(MHz)        142-1050(MHz)        137-1020(MHz)
FIFO        64Byte        64Byte        256Byte(LoRa)
中断引脚        nirq        nirq        Diox
寄存器        128        298        113

SPI操作        1位读/写命令+
7位地址+
8位数据        先发送8位读写指令
等待SDO输出CTS信号为0XFF
读取/写入数据        1位读/写命令+
7位地址+
8位数据
工作状态        关闭/挂起/TX/RX        关闭/挂起/TX/RX        关闭/挂起/TX/RX/CAD
附加功能

ADC(8位)/温度传感器/
欠压检测/空中唤醒        温度传感器/欠压检测/
空中唤醒        温度传感器/欠压检测/
空中唤醒

1.2  工作模式
     SX1276大体分为关闭/挂起/TX/RX/CAD状态,FSK/OOK与LoRa模式之间切换时必须处于SLEEP状态才可以完成,我们调试时暂时完成收发工作即可。

1.3  寄存器操作
     Sx1276有0x00-0x70 共113个寄存器,通过SPI接口进行操作,SPI数据格式为1bit的读写指令+7bit地址+8bit数据,当需要连续对多个寄存器进行读写操作时,只需要保证时钟输出,寄存器地址会自动加1来完成读写操作,需要注意在FSK和LoRa模式下寄存器的用法有些不同。

1.4  其他
     由于初次接触RF芯片,阅读的手册也没有中文版本,对一些名词不是很清楚,读起来真的有些吃力,整理了一些RF相关的知识,仅供参考,请点击这里。

二、 准备工作
2.1  下载源码
     从Semtech官网下载最新固件(Firmware Drivers V2.1.0),解压到工作目录。

2.2  准备文件
     SX12xxDrivers-V2.1.0文件夹下只有src为我们需要使用的文件夹,将其拷贝至工作目录并打开,子文件夹为platform/radio,打开platform文件夹,里面包含不同的硬件平台,我们只保留sx12xxEiger文件夹和platform.h头文件。

2.3  修改BSP代码
     为了适应不同的硬件平台,代码中有大量的选择编译语句,根据自己实际使用的硬件平台进行修改,主要包括SPI的初始化,片选/中断/复位/中断等引脚的初始化。其中复位引脚低电平有效,工作时悬空或拉高。

2.4  建立工程并添加源文件
     建立IAR工程,将修改好的源文件添加至工程,编译并修改相关错误。官方提供的代码总体还是比较容易修改并运行的,保持耐心。

2.5  硬件连接
     LoRa模块有八个引脚,分别为VCC/GND/MISO/MOSI/SCK/NSS/RES/DIO,连接时VCC/GND连接3.3V电源,MOSI/MOSI/SCK/NSS连接STM32的SPI端口,RES/DIO连接单片机的普通IO口,其中RES为复位引脚,DIO为中断输入引脚。

三、分析源码
3.1  寄存器配置
     主要配置参数在sx1276-LoRa.c文件中:
[html] view plain copy 在CODE上查看代码片派生到我的代码片
// Default settings  
tLoRaSettings LoRaSettings =  
{  
    434000000, // RFFrequency  
    20,        // Power  
    7,        // 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]  
    11,        // SpreadingFactor [6: 64, 7: 128, 8: 256, 9: 512, 10: 1024, 11: 2048, 12: 4096  chips]  
    1,        // ErrorCoding [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8]  
    true,      // CrcOn [0: OFF, 1: ON]  
    false,    // ImplicitHeaderOn [0: OFF, 1: ON]  
    1,        // RxSingleOn [0: Continuous, 1 Single]  
    0,        // FreqHopOn [0: OFF, 1: ON]  
    4,        // HopPeriod Hops every frequency hopping period symbols  
    100,      // TxPacketTimeout  
    100,      // RxPacketTimeout  
    21,        // PayloadLength (used for implicit header mode)  
};  
     其中SpreadingFactor为扩频因子,表示码片速率(扩频后的速率)与进入扩频调制之前的信号的比值,扩频倍数越大,信噪比则越高。ErrorCoding为循环纠错的一种机制。

3.2  流程分析
硬件和模块初始化
进入Sleep模式
进入LoRa模式
配置寄存器
准备发送数据(设置发送功率,中断等操作)
发送数据
等待发送完成。
    初始化过程先对硬件进行初始化,然后执行Radio = RadioDriverInit( );将函数入口地址赋值给tRadioDriver结构体中的函数指针。通过Radio->Init( );调用初始化函数。初始化结束后进行发送和接收的相关任务,具体查看驱动代码。

3.3  测试
     可以先在SPI初始化后,读取寄存器操作来查看SPI及相关控制引脚/复位引脚连接是否正确,也可以用来查询寄存器配置是否正确。
[html] view plain copy 在CODE上查看代码片派生到我的代码片
SX1276Read(0x42,test);//返回0x12  
SX1276Read(0x44,test);//返回0x2D  
     读取正确后可以在发送完成处加入断点,查看是否会进入发送完成中断,如果进入不了中断很有可能是RF频率配置不正确导致,代码中默认晶振频率为32MHz,所以当我们想要使用434M作为RF频率时,根据公式(P81)向寄存器写入的值为0x6c8000,如果晶振频率为30M则应向寄存器写入0x73BBBB,所以要明确所用模块的外部晶振频率。

3.4  收发
    启动定时器,每隔一秒发送一帧数据,发送完成后翻转LED状态,接收侧收到数据后翻转LED状态,完成收发实验。

四、代码仓库
    代码仓库地址(hg)
    说明:目前代码仓库使用的是FSK模式,需要Lora模式可以克隆后自行修改,仅供参考。
 楼主| 发表于 2017-5-17 10:00:01 | 显示全部楼层
附带源码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2017-5-17 12:30:21 | 显示全部楼层
支持楼主,我也想学习一下
发表于 2017-5-17 13:16:41 | 显示全部楼层
这个剩米饭这几年被炒了好几次了

也没见人说个所以然
发表于 2017-5-17 13:43:35 | 显示全部楼层
不知所云。
发表于 2017-5-17 13:51:10 | 显示全部楼层
支持下楼主,也关注这个。
发表于 2017-5-17 17:26:02 | 显示全部楼层
关注。。。。。
发表于 2017-5-17 18:57:56 | 显示全部楼层
请问楼主 这个适合 做 100个节点的场合吗?
发表于 2017-5-17 20:08:35 | 显示全部楼层
有朋友公司做这个,做的网关/路由器据说=说可以接入1万个(量应该没这么大,理论值吧)
发表于 2017-5-17 21:59:56 | 显示全部楼层
关注一下,多谢分享~
发表于 2017-5-17 22:31:17 | 显示全部楼层
Lora 是星形网络,单个节点距离可以做到公里级别吧
发表于 2017-5-17 23:05:39 来自手机 | 显示全部楼层
讲讲低功耗吧
发表于 2017-5-18 00:45:19 来自手机 | 显示全部楼层
不上lorawan,其实跟普通模块差不多用法
发表于 2017-5-18 12:00:57 | 显示全部楼层
LoRa简介物联网应用中的无线技术有多种,可组成局域网或广域网
 楼主| 发表于 2017-5-18 12:15:00 | 显示全部楼层
lvyi913 发表于 2017-5-17 18:57
请问楼主 这个适合 做 100个节点的场合吗?

低速低功耗,距离远分时传输可以的
 楼主| 发表于 2017-5-18 12:15:38 | 显示全部楼层
292302877 发表于 2017-5-17 22:31
Lora 是星形网络,单个节点距离可以做到公里级别吧

能到20KM,加放大
发表于 2017-5-18 18:17:53 | 显示全部楼层
持续关注中...
发表于 2017-5-19 11:53:50 | 显示全部楼层
谢谢楼主, 也正准备做这个通信。
发表于 2017-5-19 17:41:58 | 显示全部楼层
关注中,不知道lora在国内市场和NB-IOT未来怎么竞争?不过NB-IOT是收费项目,lora不收费,还是有很大应用空间的。
发表于 2017-5-19 22:57:52 | 显示全部楼层
mark 下 期待长期更新
发表于 2017-5-20 09:43:08 | 显示全部楼层
关注一下
发表于 2017-5-20 11:27:39 来自手机 | 显示全部楼层
这个速率能到多少?
发表于 2017-5-20 15:44:27 | 显示全部楼层
不知道和Sub1G 有什么优势对比
发表于 2017-5-20 19:00:03 | 显示全部楼层
牺牲速率来换取距离,但是如果节点一多,因为没有频段规划,同频干扰会暴露出问题。目前lora并没有很大量用,等大量用搞不好无缘无故就出问题了。
发表于 2017-5-20 23:29:36 | 显示全部楼层
orzorzorzorz 发表于 2017-5-20 19:00
牺牲速率来换取距离,但是如果节点一多,因为没有频段规划,同频干扰会暴露出问题。目前lora并没有很大量用 ...

请问 一个车间内100多个节点,想上无线,哪种方案比较靠谱?
发表于 2017-5-22 00:35:11 来自手机 | 显示全部楼层
刚好要用sx1212,跟这个型号有多大区别?
发表于 2017-5-22 11:44:02 | 显示全部楼层
快速入门, 多谢
发表于 2017-5-22 18:55:30 | 显示全部楼层
orzorzorzorz 发表于 2017-5-20 19:00
牺牲速率来换取距离,但是如果节点一多,因为没有频段规划,同频干扰会暴露出问题。目前lora并没有很大量用 ...

之前学习了下,也有这样顾虑。
发表于 2017-5-22 21:27:17 | 显示全部楼层
作为入门指导,还是不错的
感谢ing
发表于 2017-5-23 18:01:26 | 显示全部楼层
太慢太慢太慢,,,实时性太差,实时性太差,实时性太差...好了,我说完了.
发表于 2017-5-23 21:12:36 | 显示全部楼层

发射时 纹波能控制在多少?
发表于 2017-5-24 09:59:43 | 显示全部楼层
orzorzorzorz 发表于 2017-5-20 19:00
牺牲速率来换取距离,但是如果节点一多,因为没有频段规划,同频干扰会暴露出问题。目前lora并没有很大量用 ...

确实都有这样的顾虑 —— 传输距离是把双刃剑 !
发表于 2017-5-25 09:06:01 | 显示全部楼层
lvyi913 发表于 2017-5-20 23:29
请问 一个车间内100多个节点,想上无线,哪种方案比较靠谱?

车间内我想距离也就几十米-上百米算大了,不会几公里
短距离通讯sub1G内即可解决,上百K速率,冲突几率就大大降低
发表于 2017-5-25 10:53:48 | 显示全部楼层
orzorzorzorz 发表于 2017-5-25 09:06
车间内我想距离也就几十米-上百米算大了,不会几公里
短距离通讯sub1G内即可解决,上百K速率,冲突几率就 ...

谢谢您的回复。确实,车间内距离一般100多米最远。

这个sub 1G 我是第一次听,请问有没有模块或者模块厂家推荐?
发表于 2017-5-27 07:42:15 | 显示全部楼层
lvyi913 发表于 2017-5-25 10:53
谢谢您的回复。确实,车间内距离一般100多米最远。

这个sub 1G 我是第一次听,请问有没有模块或者模块厂 ...

1G一下频段各种小无线的统称,比如433M等
要想把无线做好还是得自己买芯片做模块,写适合自己场景的组网协议栈
当然没这个能力可以买第三方的纯模块,自己操作底层寄存器来做协议栈
如果买第三方的透传模块质量层次不齐,不推荐
发表于 2017-5-27 10:44:58 | 显示全部楼层
orzorzorzorz 发表于 2017-5-27 07:42
1G一下频段各种小无线的统称,比如433M等
要想把无线做好还是得自己买芯片做模块,写适合自己场景的组网 ...

哦,明白了,那我以前用过Si4463 就是属于您说的这一类。

您大致的意思我明白了,对于我这样的应用,可以买别家模块,自己编程组网。我之前也是这么做的,没用透传模块。

您能否提供几个质量可行的 类似模块的厂家。
因为我们不搞射频,所以硬件部分还是要采购模块。
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 粤ICP备09047143号 )

GMT+8, 2017-9-23 22:45

阿莫电子论坛, 原"中国电子开发网"

© 2004-2016 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表