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

2023-11-08

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

物联网LoRa系列-28:LoRaWAN PingPong终端与Class A/B/C类型终端不能互通的原因与解决办法 的相关文章

  • postman之在tests断言中使用for循环断言和断言空

    一 tests断言中使用for循环断言 1 在使用postman判断过程中 想要实现这么一个场景的判断 因为banner位置的配置是多变的 可以不配置 可以配置一个 也可以配置多个 在接口检测判断过程中想要通过for循环对banner列表中
  • Ubuntu安装了python3.8和python3.7,安装numpy时出现问题

    环境 Ubuntu20 04 由于目前PySpark只支持python3 7及以下的版本 而Ubuntu20 04自带的python3是python3 8 5 于是我安装了python3 7 9 且没有改动默认的python版本 千万别改
  • 接口测试的维度

    在 Python自动化测试实战 的书籍里面系统的介绍了基于Python语言的接口自动化测试实战和基于Python语言的UI自动化测试实战 特别是接口测试部分 详细的介绍了HTTP的协议原理 序列化与反序列化 主流测试工具 Postman和J
  • 2020CCPC河南省赛 发通知(离散+差分)

    学院一共有 n 位学生 用 1 编号 每天 学院都会派遣辅导员给学生发送若干通知 以保证各项措施 活动消息得到落实 现在 学院要求辅导员发送一条关于光盘行动的通知 对于通知信息 同学们的反应往往各不相同 辅导员预测出第 i 号学生收到通知后
  • vue面试题——v-if 和v-show的区别

    面试前端时 涉及到vue v if和v show几乎是必问的一道题 所以记录一下 首先我们先来看一段代码
  • iwconfig查看网卡 ifconfig查看ip /etc/init.d/ssh restart

    iwconfig查看网卡 ifconfig查看ip etc init d ssh restart 开启ssh服务 1 查看是否有sshd config cat etc ssh sshd config 查看是否有sshd config文件 2

随机推荐

  • python二级练习软件(90%原题)题库、三天速成。

    刷题软件 文末有联系方式 注明来意 我发现大家对考Python计算机二级都比较感兴趣 也有一些疑问 对于考证这个问题我简单说一下我的经验 python二级其实很容易通过 考试题题库是前九年真题加一套新题 你会遇到90 的原题 只要考前三天练
  • linux下搭建SVN遇到authentication failed问题的解决方法

    之前由于要管理项目组的文档 所以就想在linux下搭建一个svn平台 于是我就在网上找资料 并按照步骤搭建了一个SVN 结果老是出现一个authentication failed的错误 经过一个下午的努力 终于让我找出了错误的原因 一个非常
  • 微信小程序实例源码大全下载

    小程序QQ交流群 131894955 小程序开发直播腾讯课堂 https edu csdn net course detail 6743 微信小程序实例源码大全下载 微信小应用示例代码 phodal weapp quick 源码链接 htt
  • 避免Django重复提交表单,ERR_cache_miss错误

    在做项目时 遇到这个问题 首页设置为登录页login html 登录后跳转至工具页tool html 使用django自带的会话及身份验证中间件 自己认为的应该没问题 但总报标题所述错误 折腾了半天 终于解决 这里记录一下 我的urls p
  • 卷积神经网络详解

    卷积神经网络 Convolutional Neural Networks CNN 是应用最多 研究最广的一种神经网络 卷积神经网络 以下简称CNN 主要用于图片分类 自动标注以及产品推荐系统中 以CNN实现图片分类为例 图像经过多个卷积层
  • 【Unity入门计划】CreatorKitFPS:第一人称射击3D小游戏

    目录 Unity学习教程 1 添加并载入项目资源 添加项目资源 载入到Unity 2 载入Scene 3 从预制体添加射击Targets 4 管理游戏对象 4 1创建分组关系 4 2 区分相对坐标 世界坐标 5 自己做一个预制件 5 1 添
  • 【Python全栈开发从入门到实战】持续更新中......

    本专栏为Python全栈开发系列文章 技术包括Python基础 函数 文件 面向对象 网络编程 并发编程 MySQL数据库 HTML JavaScript CSS JQuery bootstrap WSGI Django Flask 后期运
  • OpenCV中的图像变换——傅里叶变换

    OpenCV中的图像变换 傅里叶变换 1 效果图 2 原理 3 源码 3 1 Numpy实现傅里叶变换 3 2 OpenCV实现傅里叶变换 3 3 HPF or LPF 参考 这篇博客将介绍OpenCV中的图像变换 包括用Numpy Ope
  • post方式加载iframe

    我们平常使用iframe时 直接设定src属性只能是get请求方式 get请求的参数大小有限制 如何实现即使用iframe又能通过post请求 两种方式 ajax使用post请求返回页面 直接将返回的页面数据放入iframe标签中 结合fo
  • linux-内核锁

    目录 一 铺垫知识 1 指令执行流 2 上下文 3 抢占 二 内核锁基础知识 1 为什么要用锁 why 2 锁保护什么 what 3 锁是如何保护资源的 How 三 各类锁的介绍 1 原子操作 2 spinlock 3 mutex 4 进程
  • HBase学习 -安装Hbase(2)

    目录 安装模式 独立式HBase安装 使用自带的Zookeeper 独立于HDFS的HBase安装 使用自带的Zookeeper 伪分布式HBase安装 使用自带的Zookeeper 伪分布式HBase安装 不使用自带的Zookeeper
  • nestjs: Redundant character escape ‘\@‘ in RegExp 处理

    问题 如标题 参考 Redundant character escape in RegExp CodeAntenna 解决办法 将转义符号 删除掉
  • 【分布式金融交易模型】Seata中间件的TCC模式实现一对一转账

    Seata中间件实现一对一转账 1 转账界面 2 本地事务在分布式下的问题 2 1 本地事务 2 1 1 事务四大特性 2 1 2 本地事务的概念 2 1 3 本地事务的实现 使用注解 Transactional 2 1 4 事务的隔离级别
  • elastisearch启动报错:org.elasticsearch.cluster.block.ClusterBlockException: blocked by: [SERVICE_UNAVAIL

    使用命令启动一个ES进程 bin elasticsearch E node name warmnode E cluster name geektime E path data warm data E node attr my node ty
  • upload-labs第一关

    level1 根据提示这是本地js文件上传绕过 有两种思路 第一种将浏览器中的js检验代码删除 第二种 将一句话木马的后缀改成可以上传的文件类型 利用burp suit抓包再改包绕过js 改包过程 上传成功 获取上传的图片地址 在网页上打开
  • 计算机无法识别3.0u盘启动,USB3.0接口不能识别U盘的解决方法

    USB3 0接口不能识别U盘的解决方法 USB接口可以说是电脑的标配 现在基本上所有电脑都会搭载USB接口 而USB标准从1 0发展到现在的3 0 甚至更新的也已出来 不过 如果USB3 0无法识别U盘 那该怎么办呢 USB3 0是一种技术
  • tensorflow实战(五)——过拟合调参(2)及学习率动态调整

    我们通过采取动态调整学习率的策略 缓解过拟合问题 随着训练轮数的增加 学习率逐渐下降会使模型拟合的更好 在这里 我们设定网络结构为 model tf keras Sequential 0 255共256个 故第一个参数为256 数据为三位数
  • Docker(一)简介、环境搭建

    文章目录 一 docker简介 1 什么是docker 2 什么是容器 3 传统的虚拟化技术和容器之间的差别 4 容器运行的过程 重要 二 docker环境部署及测试 1 环境部署 2 通过镜像运行容器 3 拉取镜像 一 docker简介
  • Qt_QWidget窗体设置模态显示

    QWidget是Qt中的窗口类 实现QWidget窗口显示有三个步骤 1 实例化一个窗口类对象 类QWidget的对象可以是QWidget 也可以是QWidget的继承类 QWidget pW new QWidget NULL 2 调用函数
  • 物联网LoRa系列-28:LoRaWAN PingPong终端与Class A/B/C类型终端不能互通的原因与解决办法

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