详细的LoRaWAN协议解析在这里
本文主要介绍LoRa在Arduino上的实现过程,从而学习LoRa协议的实现。
包括传统的GFSK调制技术以及LoRa(远程)扩频技术
这里说一下啥叫LoRa扩频技术
扩频通信的基本思想:根据香农公式****,为了提高信号的传输速率C,可以增加带宽W或者提高信噪比S/N,即当传输速率一定时,带宽与信噪比可以互换。扩频通信就是用带宽换信噪比。
LoRa目前主要在ISM频段运行,包括433、868、915MHz等。LoRa的优势在于长距离能力,单个网关或基站可以覆盖数百平方公里范围
管脚定义
PIN描述GND信号地DIO(1/2/3/4/5/6)数字IO,可自定义VCC电源(1.8V~3.6V)MISOSPI数据输出MOSISPI数据输入SCKSPI时钟输入NSSSPI片选ANT天线接口
核心初始化设置为:
函数声明:
接收的参数为频率,也就是说上述发送的频率为,595430(十进制)
具体操作在这里:
下面逐步分析这个初始化函数都干了些神马
检测是否定义了:
这是一个内置了LoRa功能的Arduino开发板
管脚设置
第一步:将设置为输出,找到这个变量定义的是
也就是用作LoRa的中断引脚
下一步将这个管脚置高,也就是输出高电平
第二步:如果复位引脚不等于-1,就将复位引脚置为输出,并且输出一个10us的脉冲
第三步:开启SPI
第四步:读取版本信息
这个函数只是简单的调用了一下这个函数,该函数的定义就在下面
首先是配置
默认的SPI频率为:
第二个参数表示dataOrder,只有两种选项,另一种是,分别是Most Significant Bit(),和Lest Significant Bit()
第三个参数表示dataMode,可选SPI_MODE0, SPI_MODE1, SPI_MODE2, or SPI_MODE3
除了频率,SPI传输需要设置
:时钟空闲时候电平为低电平(SCLK有效为高)
:时钟空闲时候电平为高电平(SCLK有效为低)
:第一个边沿采样
:第二个边沿采样
SPI传输基于同时发送与接收,主机传送字节,并返回从从机接收的字节
而version的信息位于:
也就是判断所用的LoRa模块必须是SX12系列的
第五步:设置睡眠模式
用到的参数:
注意读取寄存器,用的是,而写寄存器用的是。
第六步:设置频率
首先为什么要左移19位
第七步:写TX与RX FIFO
SX12系列配备了一个256字节的RAM作为数据缓存区,仅在LoRa模式下可用,对其的所用访问都要都过SPI接口完成,可以在除睡眠模式之外的所有模式下访问FIFO,会自动清除旧的内容。
第八步:设置前端的低噪放
这里是读取原来LNA寄存器中的值,将此值与做或运算,然后再写回去。可以看到一定取得最后两位表示
SX1276/77/78 feature three distinct RF power amplifiers. Two of those, connected to RFO_LF and RFO_HF, can deliver up to +14 dBm, are unregulated for high power efficiency and can be connected directly to their respective RF receiver inputs via a pair of passive components to form a single antenna port high efficiency transceiver. The third PA, connected to the PA_BOOST pin and can deliver up to +20 dBm via a dedicated matching network. Unlike the high efficiency PAs, this high-stability PA covers all frequency bands that the frequency synthesizer addresses.
SX12系列包括三个不同的RF功率放大器,其中两个连接到RFO_LF and RFO_HF,可以提供高达+14dBm的功率,并且无需调节,第三个连接到PA_BOOST 引脚,可以通过专用匹配网络,获得高达+20dBm的功率
第九步:设置自动增益放大器
第十步:设置发射功率
最后一步:设置为空闲模式,等待发送操作