641|2

61

帖子

2

资源

一粒金砂(中级)

【NUCLEO-WL55JC2测评6】 LoRa点对点通信

本帖最后由 nich20xx 于 2020-7-9 09:09 编辑

 

1 前言

LoRa调制方式是STM32WL的核心功能之一。

NUCLEO-WL55JC2的LoRa IP采用的是SX126x,因此LoRa部分的软件操作,跟单芯片SX126x软件访问方式有些相似,ST提供了类似SPI方式的API接口。

本文主要内容提要:

  • LoRa点对点单向、双向通信
  • 互通性验证
    • NUCLEO-WL55JC2、SX126x 模块、SX1278模块 互联互通

lora-radio-driver代码github仓库

https://github.com/Forest-Rain/lora-radio-driver

2 LoRa通信

2.1 LoRa数据帧格式

LoRa数据帧支持显性格式(Explicit header mode packet)与隐形格式( Implicit header mode packet )(no header)。

11.png

2.2 LoRa通信参数

LoRa通信参数主要有:

  • spreading factor (SF)
  • modulation bandwidth (BW)
  • error coding rate (CR)
  • low data rate optimization (LDRO)
    • 对于高SF或者低BW,同时长数据包,LDRO被使能,以便接收机更好正确解调LoRa信号

根据实际应用来选择合适的LoRa通信参数,以在链路预算、抗干扰、带宽、标称速率等之间获得平衡。

image.png

2.3 STM32WL LoRa驱动

image.png

3 LoRa点对点通信

一次完整的双向通信过程如下:

  1. 主机发起通信,发送一个数据包完成后,立即进入接收
  2. 从机默认一直处于接收状态,接收到主机的数据后,回传接收到的数据包
  3. 主机端接收到应答数据后,判断接收数据包内容是否正确
  4. 同时使用一个设备只接收,用作监听设备,用于监听与分析主机与从机发送的数据。

image.png

点对点双向通信流程

3.1 通信测试

3.1.1 LoRa通信参数配置

22.png

3.1.1.1 射频初始化

#define TX_OUTPUT_POWER                             14        // dBm

#define LORA_BANDWIDTH                              0         // [0: 125 kHz,
                                                              //  1: 250 kHz,
                                                              //  2: 500 kHz,
                                                              //  3: Reserved]
#define LORA_SPREADING_FACTOR                       7         // [SF7..SF12]
#define LORA_CODINGRATE                             1         // [1: 4/5,
                                                              //  2: 4/6,
                                                              //  3: 4/7,
                                                              //  4: 4/8]
#define LORA_PREAMBLE_LENGTH                        8         // Same for Tx and Rx
#define LORA_SYMBOL_TIMEOUT                         0         // Symbols

{ 
    // ...
    Radio.SetChannel( lora_radio_test_paras.frequency );

    Radio.SetTxConfig( MODEM_LORA, lora_radio_test_paras.txpower, 0, lora_radio_test_paras.bw,
                      lora_radio_test_paras.sf, lora_radio_test_paras.cr,
                      LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
                      true, 0, 0, LORA_IQ_INVERSION_ON, 3000 );

    Radio.SetRxConfig( MODEM_LORA, lora_radio_test_paras.bw, lora_radio_test_paras.sf,
                      lora_radio_test_paras.cr, 0, LORA_PREAMBLE_LENGTH,
                      LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON,
                      0, true, 0, 0, LORA_IQ_INVERSION_ON, true );
}

3.1.1.2 生成空口测试包

void send_ping_packet(uint32_t src_addr,uint32_t dst_addr,uint8_t len)
{
    tx_seq_cnt++;
                            
    tx_timestamp = TimerGetCurrentTime();
    
    // Send the next PING frame
    uint8_t index = 0;
    
    // header 
    Buffer[index++] = 0x00; // echo cmd
    
    Buffer[index++] = src_addr & 0xFF;
    Buffer[index++] = src_addr >> 8;
    Buffer[index++] = src_addr >> 16;
    Buffer[index++] = src_addr >> 24;

    Buffer[index++] = dst_addr & 0xFF;
    Buffer[index++] = dst_addr >> 8;
    Buffer[index++] = dst_addr >> 16;
    Buffer[index++] = dst_addr >> 24;
 
    Buffer[index++] = tx_seq_cnt & 0xFF;
    Buffer[index++] = tx_seq_cnt >> 8;
    Buffer[index++] = tx_seq_cnt >> 16;
    Buffer[index++] = tx_seq_cnt >> 24;    
    
    // data
    Buffer[index++] = 'P';
    Buffer[index++] = 'I';
    Buffer[index++] = 'N';
    Buffer[index++] = 'G';
    
    // 00,01,02...
    for( uint8_t i = 0; i < len - index ; i++)
    {
        Buffer[index + i] = i;
    }
    rt_thread_mdelay(1);
    Radio.Send( Buffer, len );
}

3.2 通信测试结果

3.2.1 单向通信

  • 测试目的

验证NUCLEO-WL32JC2单向LoRa通信

  • 测试设备:
    • 1个NUCLEO-WL32JC2
    • 1个SX1268模块
  • 测试步骤

使用NUCLEO-WL32JC2发送,SX1268模块接收

  • 1个NUCLEO-WL32JC2为发送端 ( lora ping -m)
  • 1个SX1268模块只接收(监听)( lora ping -s)

33.png

STM32WL发送,SX1268模块接收

3.2.2 双向通信

  • 测试目的
    • 验证NUCLEO-WL32JC2的双向通信
  • 测试设备:
    • 2个NUCLEO-WL32JC2
  • 测试步骤
  1. 主机输入 lora ping -m,主机测试日志如下

44.png

主机STM32WL发送,并接收应答

  1. 从机输入 lora ping -s,-s也可以缺省,从机测试日志如下

55.png

从机SX1268模块侧接收数据,然后回传

3.2.3 互通性

测试目的:

验证STM32WL与SX126X、SX127X模块之间的互连互通。

测试设备:

  • 1个NUCLEO-WL32JC2做主机 ( lora ping -m)
  • 1个SX1268模块做从机 ( lora ping -s)
  • 1个NUCLEO-WL32JC2只接收(监听)( lora rx)
  • 1个SX1278模块只接收(监听)( lora rx)

66.png

互通性测试(STM32WL <-> SX1268模块,STM32WL、SX1278模块监听)

4 参考


回复

174

帖子

0

资源

一粒金砂(中级)

这代码,一看就头大,要玩转这块板不容易,幸好没申请

点评

搞板子看代码还是必经之路   我现在买了一个透传模块,以为它可以监听WL55JC2的只要参数设置一直,可买来后透传产家不提供SX1268的配置参数。现在变成进退两难    详情 回复 发表于 2020-7-9 14:40

回复

5824

帖子

453

资源

五彩晶圆(高级)

donatello1996 发表于 2020-7-9 14:14 这代码,一看就头大,要玩转这块板不容易,幸好没申请

搞板子看代码还是必经之路

 

我现在买了一个透传模块,以为它可以监听WL55JC2的只要参数设置一直,可买来后透传产家不提供SX1268的配置参数。现在变成进退两难

 


回复
您需要登录后才可以回帖 登录 | 注册

关闭
站长推荐上一条 1/7 下一条

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表