前言
SX1276 LORA通信,按照默认的设置可以正常使用。存在问题是,但设置扩频因子或带宽组合成较低的数据传输速率时,两个节点之间无法通信。
一、测试数据
室内近距离通信成功率测试结果表:
SF | BW | 成功率 |
---|---|---|
7 | 125kHz | 100% 100% 100% 100% 100% 100% 100% 100% 100% 100% |
8 | 125kHz | 100% 100% 100% 100% 100% 100% 100% 100% 100% 100% |
9 | 125kHz | 100% 100% 100% 100% 100% 100% 100% 100% 100% 100% |
10 | 125kHz | 100% 90% 98% 88% 94% 98% 94% 92% 96% 96% 92% 92% |
11 | 125kHz | 100% 100% 100% 100% 100% 100% 100% 100% 100% 100% |
12 | 125kHz | 发射机未正常发送数据 |
相关测试数据参考https://blog.csdn.net/zhouxiangjun11211/article/details/110110297
- 其他条件不变,当SF=10时,近距离通信有丢包现象;
- 其他条件不变,当SF=12时,发射机未正常发送数据,设置SF=11,BW=6时,发射机同样未正常发送数据;
二、LORA波形参数设置
- 波形参数,代码接口
tLoRaSettings LoRaSettings =
{
0, // Setting change
434 , // 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]
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 [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
700, // TxPacketTimeout
100, // RxPacketTimeout :8=100ms 7:80ms
128, // PayloadLength (used for implicit header mode)
};
- 对应波形参数设置表格:
参数 | 值 | 描述 |
---|---|---|
频率 | 434 | 频率设置434MHz |
功率 | 20 | SX1276输出功率20dBm |
信号带宽 | 7 | 对应信号带宽125kHz |
扩频因子 | 7 | 扩频因子SF=7 |
编码率 | 2 | 编码率4/6 |
校验位 | ture | 使能校验位 |
隐式header | false | 设置为显示header |
单一接收 | 1 | 单一接收模式 |
跳频使能 | 0 | 关闭跳频功能 |
发射延时 | ||
接收延时 |
- 接收延时设置太小会导致无法正常接收数据;
- 注意接收延时的设置与符号传输时间的对应关系,符号传输时间与接收延时成正比;
- SF=7,接收延时设置:1600;
三、相关参数说明
1. LORA相关设置
设置 | 描述 |
---|---|
睡眠模式 | 低功耗模式,该模式下只能通过SPI和配置寄存器访问,LoRa FIFO不能访问。这是唯一允许FSK/OOK模式与LoRa模式切换的操作模式 |
待机模式 | 晶体振荡器和LoRa基带模式被开启,而射频部分和PLL则被关闭 |
RX连续模式 | SX1276将打开所有所需模块,处理所有接收到的数据,直到客户请求变更操作模式 |
RX单一模式 | SX1276将打开所有所需模块,在接收到有效数据包前保持此状态、随后切换回待机模式 |
CAD模式 | 在CAD模式下,设备将检测已知信道,已检测LoRa前导码信号 |
-
单一接收模式:调制解调器在一段时间内搜索前导码,如果在一定时间段内没有检查到前导码,则触发RxTimeout中断,并回到待机模式;
-
前导码检索时间的长度,通过“RegSymb Timeout”寄存器修改;
-
连续接收模式:调制解调器在信道内连续搜索扫描前导码,当检查到前导码后,调制解调器继续接收,直到数据包接收完,继续等待下一个前导码。
2. 接收模式的使用场景
- 单一接收模式通常应用在电池供电或对功耗要求敏感的系统中;
- 连续工作模式通常应用于对无低功耗要求的通信系统中;
四、其他参数初始化
void SX1276LoRaInit( void )
{
RFLRState = RFLR_STATE_IDLE;
SX1276LoRaSetDefaults( );
// We first load the device register structure with the default value (read from the device)
SX1276ReadBuffer( REG_LR_OPMODE, SX1276Regs + 1, 0x70 - 1 );
// Set the device in Sleep Mode
// SX1276LoRaSetOpMode( RFLR_OPMODE_SLEEP );
SX1276LR->RegLna = RFLR_LNA_GAIN_G1;
SX1276LR->RegLna = RFLR_LNA_BOOST_LF_BOOST;
SX1276WriteBuffer( REG_LR_OPMODE, SX1276Regs + 1, 0x70 - 1 );
// set the RF settings
SX1276LoRaSetRFFrequency( LoRaSettings.RFFrequency ); //set frequency
SX1276LoRaSetSpreadingFactor( LoRaSettings.SpreadingFactor ); // SF6 only operates in implicit header mode.
SX1276LoRaSetErrorCoding( LoRaSettings.ErrorCoding );
SX1276LoRaSetPacketCrcOn( LoRaSettings.CrcOn );
SX1276LoRaSetSignalBandwidth( LoRaSettings.SignalBw );
SX1276LoRaSetImplicitHeaderOn( LoRaSettings.ImplicitHeaderOn );
SX1276LoRaSetSymbTimeout( 0x3FF );
SX1276LoRaSetPayloadLength( LoRaSettings.PayloadLength );
SX1276LoRaSetLowDatarateOptimize( true );
SX1276LoRaSetPAOutput( RFLR_PACONFIG_PASELECT_PABOOST ); //Ñ¡Ôñ PA_BOOST ¹Ü½ÅÊä³öÐźÅ
SX1276LoRaSetPa20dBm( false ); //×î´óÊä³ö¹¦ÂÊ
LoRaSettings.Power = 4;
SX1276LoRaSetRFPower( LoRaSettings.Power );
}
// Set the device in Standby Mode
SX1276LoRaSetOpMode( RFLR_OPMODE_STANDBY );
}