Rola模块学习

物联网终端模块学习: Rola通信模块的学习(适合初学者 Rola学习深度理解)

首先可以到开源代码网站github下载源码,很方便的,里面的源码也有很多简化清晰易懂,或者如果在网上买了这种模块,会赠送源代码的。然后就是下载sx1278的芯片手册了,这个直接到网上搜索就ok了。最后我们一起来学习下这个模块的使用。

概述

概述:SX1276/77/78 系列产品采用了 LoRa TM 扩频调制解调技术,使器件传输距离远远超出现有的基于 FSK 或 OOK 调制方式的系统。在最大数据速率下,LoRa TM 的灵敏度要比 FSK 高
出8dB;此外,LoRa TM 在选择性和阻塞性能方面也具有显著优势,可以进一步提高通信可靠
度。同时,它还提供了很大的灵活性,用户可自行决定扩频调制带宽(BW)、扩频因子(SF)
和纠错率(CR)。扩频调制的另一优点就是,每个扩频因子均呈正交分布,因而多个传输信
号可以占用同一信道而不互相干扰,并且能够与现有基于 FSK 的系统简单共存。此外,
SX1276/77/78 还支持标准的 GFSK、FSK、OOK 及 GMSK 调制模式,因而能够与现有的
M-BUS 和 IEEE 802.15.4g 等系统或标准兼容。(这些属于发送接收器性质的无线通信基础知识,需加强认识,方便学习)还有对着数据手册了解sx1278器件的关键参数对后面代码的学习与设置有很大的帮助。
.对于sx1278芯片中的无线通信调制方式Rola和FSK技术的对比如下表格:

RolaFSK
1.通信距离远1.容易实现
2.Lora芯片兼容FSK模式1.抗噪声与抗衰减较好
3.低功耗3.传输速率较高

无线通信的应用要涉及到各种各样的参数,功耗、传输距离、传输数据量等等。而在远距离传输时,综合各项指标,LoRaTM调制方式为最佳选择,

使用流程

关于能看懂原代码以及自己写简化版的代码,了解其流程非常重要,以及各种设置,设置主要还是对于芯片的寄存器的位进行操作。所以了解寄存器的位的功能以及读写寄存器十分重要。比如:下面展示一些 定义寄存器地址映射

// 寄存器:RegModemConfig2,偏移地址:0x1E 
#define REG_LR_MODEMCONFIG2                          0x1E
/*
  bit7-4 扩频因子设置(具体见数据手册)
	bit3 :0 :正常模式 , 发送单个数据包
	       1 : 持续模式,通过FIFO发送多个数据包
	bit2 : 发送端crc信息
	       0 : crc关闭
				 1 : crc开启
	bit1-0 : RX超时最高有效值
*/

寄存器又包括:

1.LoRa TM 配置寄存器:配置寄存器可以通过SPI接口访问。寄存器在任何设备模式(包括睡眠模式)下均可读,但仅在睡眠和待机模式下可写。请注意:在LoRa TM 模式下,自动顶级定序(TLS模式)不可用, 配置寄存器映射关系变化可以参见数据手册。。
2.状态寄存器:状态寄存器在接收机运行过程中提供状态信息。
3.LoRa TM 模式 FIFO 数据缓存(具体操作原理可以参见数据手册,清晰易懂)
注意:以上对看懂源码以及形成自己风格简化非常重要!

LoRa TM 调制解调器状态机序列流程图:

在发送模式下,仅在需要发送数据包数据的时候才会启动射频模块、PLL模块及PA模块,
这样可以优化功率消耗率。下图介绍下典型的发送程序流程图
在这里插入图片描述

  1. 静态配置寄存器只有在睡眠模式、待机模式或FSTx模式下才可以访问。
  2. LoRa TM FIFO数据缓存只有在待机模式下才允许写入。
  3. 通过发送TX模式请求,开始数据发送。
  4. 一旦完成数据发送,则发出TxDone中断请求,芯片回到待机模式。
  5. 发送操作完成后,可以手动将无线设备设置为睡眠模式或重新向FIFO数据缓存写入数
    据,以便稍后再次进行Tx操作。

再以学习者的角度解释一下此流程图,首先按要求设置待机模式(通过寄存器RegOpMode(0x01)),然后向数据缓冲区FIFO写数据,再把模式设置成发送模式,等待RegIrqFlags(0x12)状态寄存器中的状态位第三位TxDone置为1,接下来软件自动调整模式寄存器为待机模式,最后就是判断是否有新的要发送的数据。
其他的一般的流程均按照此方法可以分析! 之前全是基础知识,需掌握,接下来将讲述代码实现流程;

简化代码实现:

1.代码中首先要设置参数如发射功率434MHZ,扩频因子:12,纠错编码:4/6,带宽等,实现其最好使用函数封装方便调用,写函数时都是写相应寄存器的值进行设置。(参数根据实际情况设置)

2.笔者使用的是stm32驱动sx1278,通过spi总线与sx1278连接,在程序中做好spi读写的函数(sx1278寄存器为8位),然后在sx1278.c中写一个读写寄存器的函数,可以参照源码,这个函数至关重要,对于以下的设置都会调用。

3.Lora初始化中流程如代码:

初始化代码,可以参照数据手册中的规定设置
*********************************************************************************************************
*	函 数 名: SX1276LORA_Init
*	功能说明: SX1278初始化
*	形    参
*	返 回 值: 错误代码(无需处理)
*********************************************************************************************************
*/
void SX1276LORA_Init(void)
{
    SX1276LoRaSetOpMode(Sleep_mode);    /* 设置成睡眠模式 */
    SX1276LoRaFsk(LORA_mode);	          /* 设置为Lora模式 */
    SX1276LoRaSetOpMode(Stdby_mode);    /* 设置为待机模式 */
    SX1276WriteBuffer( REG_LR_DIOMAPPING1, GPIO_VARE_1); /* 写 0x40寄存器 ,DIO引脚映射设置 ,设为00*/
    SX1276WriteBuffer( REG_LR_DIOMAPPING2, GPIO_VARE_2);
    SX1276LoRaSetRFFrequency();                         /* 频率设置 */
    SX1276LoRaSetRFPower(PowerValue);                   /* 功率设置 */
    SX1276LoRaSetSpreadingFactor(SpreadingFactor);	    /* 扩频因子设置 */
    SX1276LoRaSetErrorCoding(CodingRate);		      /* 纠错编码设置 */
    SX1276LoRaSetPacketCrcOn(True);			          /* 打开	CRC校验 */
    SX1276LoRaSetSignalBandwidth( Bw_Frequency );	/* 设置扩频带宽 , 125khz */
    SX1276LoRaSetImplicitHeaderOn(False);		      /* 同步头是显性模式 */
    SX1276LoRaSetPayloadLength( 0xff);            /* 设置有效负载长度 */
    SX1276LoRaSetSymbTimeout( 0x3FF );            /* 设置超时时间 */
    SX1276LoRaSetMobileNode(True);                /*低数据率hua*/


    //	RF_CAD_RECEIVE();
    RF_ContinuousReceive();        /*设置为连续接收模式 */
}

如上图代码所示,可以将设置函数分别封装成函数进行调用,函数的代码也十分简单,就是参照数据手册规定对sx1278中的寄存器进行设置,这里不再赘述。

4.发送与接收数据包的操作代码:
发送处理在上面已有介绍,接下来介绍下单一与连续接收处理如图:
在这里插入图片描述
简单以初学者的角度介绍下连续接收流程:首先设置为待机模式(手册中规定在进行接收初始化时必须为待机模式),接收初始化,然后初始化完成后模式设置为连续接收模式,接下来就判断RegIrqFlags(0x12)状态寄存器中的状态位第六位RxDone是否置为1和第七位的超时中断RxTimeout置为1,如果接收状态的RxDone为1,则接下来判断状态寄存器也是**RegIrqFlags(0x12)**中的第五位的负载crc效验的标志位,如果没有出错最后就是读取接收到的数据了。由于设置为连续接收模式,则接收完成后继续去等待判断状态寄存器的的相关位,
这里注意了,是不是大致看了这里的介绍对源码的理解上了一个层次,一定注意参照数据手册看源码,并注意寄存器的位的功能,以及读/写。这里只是宏观的介绍了下,有帮与读者理解以及入门,具体细节还望在实践操作中学习。

结束语:由于博主初次写博客,水平可能不佳,望各位读者朋友指正。本人就是将自己学习到的以及自己理解的相关知识分享出来,望这些能帮助到各位读者,共同进步。有问题可以留言,以及相关技术可以一起讨论。
  • 22
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值