物联网LoRa系列-28:LoRaWAN PingPong终端与Class ABC类型终端不能互通的原因与解决办法

tech2022-08-17  173

在LoRa终端与LoRa网关和服务器联调之前,有时候需要通过相对简单的PingPong终端序给Class A/B/C类型的终端发送数据,以验证Class A/B/C终端可以正常收发数据包。然而原生提供的 PingPong与Class A/B/C类型终端之间是无法发送数据帧的。

经过一番深入调研,发现主要有如下的几个原因,导致这两种应用程序之间无法发送物理层的帧,解决了这些问题,会对LoRa的射频芯片的物理层和相应的软件驱动程序有一个更加深入的理解。

先总结如下:

一. RF层

原因1:频点

问题原因:

PingPoing测试应用程序采用的TDD的模式,上下行采用了相同的频点,如470300000。

Class A/B/C的470频带,采用是的FDD模式,上行的发送频率是470300000,而下行的接收频点为:

CN470_FIRST_RX1_CHANNEL 500300000 CN470_RX_WND_2_FREQ        505300000

 

解决办法:

修改PingPoing的接收和发送频点到500300000

#define RF_FREQUENCY                                500300000 //470300000 // Hz

 

原因2:频点变化

PingPoing采用单一频点,且采用了相同的频点:470300000

CN470 Band,26M主频时,上行发送有连续的96个频点,下行接收有连续的48个频点。

因此,因此PingPoing的发送的数据,Class A/B/C类型终端肯定收不到。

 

解决办法:

固定化Class A/B/C类型终端的接收频点: bool RegionCN470RxConfig( RxConfigParams_t* rxConfig, int8_t* datarate )

     //frequency = CN470_FIRST_RX1_CHANNEL + ( rxConfig->Channel % 48 ) * CN470_STEPWIDTH_RX1_CHANNEL;

     frequency = CN470_FIRST_RX1_CHANNEL + CN470_STEPWIDTH_RX1_CHANNEL;

 

二. 调制解调层

 

三. LoRa物理层

原因1: LoRa同步字

PingPong终端程序使用了默认的LoRa同步字:,属于private network的配置。

#define LORA_MAC_PRIVATE_SYNCWORD 0x1424 

 

LoRaWAN的终端,采用的是公网的配置:

#define LORA_MAC_PUBLIC_SYNCWORD  0x3444

 

解决方法:

在main()函数中增加对public network下同步字的设定,代替默认的配置。

Radio.SetPublicNetwork(1);

 

原因2: IQ翻转

PingPong终端程序的IQ翻转未使能。

ClassA-C终端的的IQ翻转使能。

 

解决办法:

PingPong终端程序的IQ翻转使能。

#define LORA_IQ_INVERSION_FLAG               1  // from 0 t0 1

   Radio.SetTxConfig(                                     MODEM_LORA,                                     TX_OUTPUT_POWER,                                     LORA_FDEV_NA,                                     LORA_BANDWIDTH,                                     LORA_SPREADING_FACTOR,                                     LORA_CODINGRATE,                                     LORA_PHY_PREAMBLE_LENGTH,                                     LORA_PHY_PAYLOAD_LENGTH_FLAG,                                     LORA_PHY_PAYLOAD_CRC_FLAG,                                     LORA_FREQ_HOP_FLAG,                                     LORA_FREQ_HOP_PERIOD,                                     LORA_IQ_INVERSION_FLAG,                                     TX_TIMEOUT_VALUE);

 

四. 数据包的收发控制

原因1:发送与接收窗口不对齐

PingPong终端程序定时发送,如5s。

ClassA-C有一定的接收窗口,即使classC, 其实也并不是一直设置在Rx模式。

 

解决办法:

            case DEVICE_STATE_CYCLE:             {                 printf("state: DEVICE_STATE_CYCLE=%d\r\n", DeviceState);

                printf("Turn Rx on\r\n");                 Radio.Rx(0);  //确保class 终端,出发发送外,其他时间一直处于接收状态。

                DeviceState = DEVICE_STATE_SLEEP;

                // Schedule next packet transmission                 TimerSetValue( &TxNextPacketTimer, TxDutyCycleTime );                 TimerStart( &TxNextPacketTimer );                 break;             }


后记:

(1)解决了上述问题,LoRaWAN PingPong终端就可以向Class A/B/C类型终端发送数据。

(2)数据的发送只停留在物理层的值,并没有在MAC层进行加密和解密。因此只限于物理层之间的通信

 

最新回复(0)