全面拆解和构建5G物联网-28:LoRaWAN PingPong终端与Class A/B/C类型终端不能互通的原因与解决办法

在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

扫描二维码关注公众号,回复: 11601401 查看本文章

原因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层进行加密和解密。因此只限于物理层之间的通信

猜你喜欢

转载自blog.csdn.net/HiWangWenBing/article/details/108372297