为了让LoRa不同终端之间能够相互发送数据,同时也能让终端与Server之间能够相互发送数据,有很多的参数需要在通信的双方达成一致。如果这些配置参数不正确,很容易导致通信的双方无法收到数据。
这里总结了LoRaWAN pingpong、Class A/B/C类型终端的一些常见配置数据,以及相应的值,以便于比较。
模式类型参数说明参数符号可选值Ping PongClass ATX射频功率TX_OUTPUT_POWER22, 17, …2217TX RX射频中心频点 (这是pingpong程序与LoraWan程序不能互发数据的第1个原因)RF_FREQUENCY923000000, 915000000, 470300000, 779000000, …470300000CN470_FIRST_RX1_CHANNEL 500300000 CN470_RX_WND_2_FREQ 505300000Tx RxLoRa调制解调器Modem的类型PacketTypetypedef enum { PACKET_TYPE_GFSK = 0x00, PACKET_TYPE_LORA = 0x01, PACKET_TYPE_NONE = 0x0F }RadioPacketTypes_t;PACKET_TYPE_LORAPACKET_TYPE_LORATx RxLoRa调制解调器分频因子SpreadingFactortypedef enum { LORA_SF5 = 0x05, LORA_SF6 = 0x06, LORA_SF7 = 0x07, LORA_SF8 = 0x08, LORA_SF9 = 0x09, LORA_SF10 = 0x0A, LORA_SF11 = 0x0B, LORA_SF12 = 0x0C }RadioLoRaSpreadingFactors_t;LORA_SF12LORA_SF12Tx RxLoRa调制解调器带宽Bandwidthtypedef enum { LORA_BW_500 = 6, LORA_BW_250 = 5, LORA_BW_125 = 4, LORA_BW_062 = 3, LORA_BW_041 = 10, LORA_BW_031 = 2, LORA_BW_020 = 9, LORA_BW_015 = 1, LORA_BW_010 = 8, LORA_BW_007 = 0 }RadioLoRaBandwidths_t;LORA_BW_125 LORA_BW_125 Tx RxLoRa调制解调器编码率CodingRatetypedef enum { LORA_CR_4_5 = 0x01, LORA_CR_4_6 = 0x02, LORA_CR_4_7 = 0x03, LORA_CR_4_8 = 0x04 }RadioLoRaCodingRates_t;LORA_CR_4_5LORA_CR_4_5Tx RxLoRa调制解调器低速优化LowDatarateOptimize0, 100Tx Rx物理层帧帧的类型PacketTypetypedef enum { PACKET_TYPE_GFSK = 0x00, PACKET_TYPE_LORA = 0x01, PACKET_TYPE_NONE = 0x0F }RadioPacketTypes_t; PACKET_TYPE_LORA PACKET_TYPE_LORATx Rx物理层帧前导码长度PreambleLength8, 12, 16….128Tx Rx物理层帧公网私网设置RadioPublicNetworktypedef struct { bool Previous; //true or false bool Current; //true or false }RadioPublicNetwork_t; Tx Rx物理层帧LoRa同步字 (这是pingpong程序与LoraWan程序不能互发数据的第2个原因)REG_LR_SYNCWORD#define LORA_MAC_PRIVATE_SYNCWORD 0x1424 //默认for点对点 #define LORA_MAC_PUBLIC_SYNCWORD 0x3444 //for点对网关0x1424 0x3444 Tx Rx物理层帧帧头的类型HeaderTypetypedef enum { LORA_PACKET_VARIABLE_LENGTH = 0x00, LORA_PACKET_FIXED_LENGTH = 0x01, LORA_PACKET_EXPLICIT= LORA_PACKET_VARIABLE_LENGTH, LORA_PACKET_IMPLICIT = LORA_PACKET_FIXED_LENGTH }RadioLoRaPacketLengthsMode_t;ORA_PACKET_VARIABLE_LENGTHORA_PACKET_VARIABLE_LENGTHTx Rx物理层帧payload的长度PayloadLength0.255255255Tx Rx物理层帧PayLoadCRC开关CrcModetypedef enum { LORA_CRC_ON = 0x01, LORA_CRC_OFF = 0x00 }RadioLoRaCrcModes_t; LORA_CRC_ON LORA_CRC_ON Tx Rx物理层帧IQ翻转 (这是pingpong程序与LoraWan程序不能互发数据的第3个原因)InvertIQtypedef enum { LORA_IQ_NORMAL = 0x00, LORA_IQ_INVERTED = 0x01 }RadioLoRaIQModes_t;LORA_IQ_NORMALLORA_IQ_INVERTEDTx物理层帧启动Tx模式OperatingModes:MODE_TX Tx物理层帧启动Tx发送模式 以及发送超时 (硬件发送超时)Radio.Tx(timeout) SX126xSetTx(timeout);0: Tx single mode, Tx一致待在Tx模式下,直到数据包发送完成,然后自动进入低功耗模式。 1..262s:超时模式,Tx一致待在Tx模式下,直到数据包发送完成,或超时,然后自动进入低功耗模式。0s0sTx物理层帧发送超时,软件定时器 有TxDone终端负责关闭 (软件发送超时)TxTimeout0…xxx3s3sTx物理层帧测试命令,连续发送模式 RADIO_SET_TXCONTINUOUSWAVENANATx物理层帧测试命令,无限制的发送前导模式 RADIO_SET_TXCONTINUOUSPREAMBLENANARx物理层帧启动Rx模式OperatingModes:MODE_RX Rx物理层帧启动RX模式接收 以及接收超时 (硬超时) 定时模式的作用是为了在特定的时间没有数据要接收时候,进入低功耗。Radio.Rx(timeout) SX126xSetRx(timeout);0: Rx single mode,即一直处于接收模式,直到接收到一个完整的数据包,然后离开Rx新模式,进入低功耗模式。0xFF FF FF: 连续接收模式,即一直处于接收模式,不进入低功耗模式,可以多次连续接收多个数据包。其他:超时模式,即处于接收模式,直到接收到一个完整的数据包或超时发生,然后离开Rx新模式,进入低功耗模式。5*1000 5sRx1Win: Rx2Win:Rx物理层帧从定时模式切换到single 模式,防止在超时的最后期限达的时候,才开始有数据包的接收StopRxTimerOnPreambleDetect0:直到接收到完整的物理层帧头,才离开timeout模式,进入single mode,等待接收完整的数据帧。 1: 一旦接收到preamble,就离开timeout模式,就进入single mode,等待接收完整的数据帧。00Rx物理层帧从定时模式切换到single 模式,防止在超时的最后期限达的时候,才开始有数据包的接收。 但由于前导的符号的数量有可能很多,需要指明,接收多多少个前到符号,就可以离开timeout模式,进入single模式RaSymbNumTimeout该参数只有在StopRxTimerOnPreambleDetect=1时有效。 0: 当接收到一个前导符的时候,就认为已经接收到前导符号,可以离开timeout模式,进入single mode。0是最敏感的,一旦有一个前导副,就认为有可能有数据。 1: 当接收到设置的RaSymbNumTimeout个数的前导符号的时候,可以离开timeout模式,进入single mode00Rx物理层帧接收增益模式RxBoosted REG_RX_GAIN0x94:power saving低功耗接收增益 (默认的低功耗) 0x96:Boosted临时提升接收增益(功耗增加,但接收灵敏度提升), RxDutyCycle, 必须使用0x96。0x940x94Rx+RC物理层帧启动Rx+RC模式OperatingModes:MODE_RX_DC 00Rx+RC物理层帧自动接收休眠模式切换 硬件listen模式或sniff模式,周期性唤醒进入接收模式,这样避免通过软件设置Rx模式SX126xSetRxDutyCycle( uint32_t rxTime, uint32_t sleepTime )rxPeriod:Rx的时间 sleepPeriod: 休眠时间00