LoRa 之一 旧版驱动(sx12xxDrivers 您所在的位置:网站首页 STM32官方驱动 LoRa 之一 旧版驱动(sx12xxDrivers

LoRa 之一 旧版驱动(sx12xxDrivers

2024-01-31 07:57| 来源: 网络整理| 查看: 265

  在之前的项目中,一直使用 LoRa 通信。很早之前就想写写文章记录一下学习过程。怎奈一直是一知半解的状态,想写不敢写!LoRa 这个东西在国内用的貌似不是太多。   对于无线通信,各个国家或者地区都有严格的限制。例如,我们国家就有。前两年,工信部出了个指导意见还是啥东西来着,差点把 LoRa 搞黄了!LoRa 是工作在免费频段的。关于免费频段各个国家或者地区是有区别的!我们国家的各种规定在工信部官网可以找到!废话不多说,想要了解 LoRa 是啥的自己去搜索,我们重点说用法!

LoRa 和 LoRaWAN

  在介绍使用之前,我们必须要先区分好这两个概念!LoRa 是低功耗广域网通信技术中的一种,而按照 LoRa 联盟官方白皮书《what is LoRaWAN》的介绍,LoRaWAN 是为 LoRa 远距离通信网络设计的一套通讯协议和系统架构。类比于我们的网络通信,LoRa 定了物理层,而 LoRaWAN 定义了 MAC 层、数据链路层。LoRaWAN 定义了一套通信系统的架构,底层使用的是 LoRa 通信。这个应该就和我们的网络协议栈差不多吧。   在我们的实际使用中,我们可以仅仅使用 LoRa 进行最基本的通信,通信的应用层协议则有我们自己定义。当然,我们的通信只能和我们自己定义的应用层协议的设备通信。Semtech 出了好几款 LoRa 收发器芯片供我们选择。当然也可以按照 LoRaWAN 的要求来实现系统中的通信,这个就要复杂好多了,完整的 LoRaWAN 网络架构中包含了终端、网关、NS(网络服务器)、应用服务器这四个部分。

  当前有好多公司都出了各种各样的 LoRa 模块以及 LoRa 网关模块。我的环境是自己画的 LoRa 模块,使用了的芯片时 SX1276。我这里也不需要 LoRaWAN。

驱动

  首先,我们需要知道 Semtech 的 LORA 芯片支持 LORA 模式和 FSK 模式,所以驱动中是包含对这两种模式的处理的。目前,Semtech 官网有两款驱动,一款是旧的驱动,驱动内部只实现了对于 LoRa 芯片的基本操作,另一个款是最新的包含对 LoRa 芯片的基本操作和 LoRaWAN 定义的实现。老版驱动 Semtech 已经停止更新了,也不建议用在新的生成环境中。两种驱动对比如下图: 在这里插入图片描述 这里我们重点来介绍一下旧版的驱动。下面来具体说说移植!

驱动架构

驱动的架构并不复杂,如下图所示: 在这里插入图片描述 在初始化阶段,驱动内部首先将全部寄存器的值读取到 uint8_t SX1276Regs[0x70]; 中,而后所有接口的操作都是按照上面的图,先修改 uint8_t SX1276Regs[0x70]; 中的寄存器,然后在通过 SPI 将 uint8_t SX1276Regs[0x70]; 中的数据写入到芯片中。我们以 sx1276 为例来说明一下:

sx1276.h/c:该文件主要是以上两种模式(LORA、FSK)的统一的对外接口。通过 radio.h 中宏 LORA 是否为 1 区分以上两种模式。此外该文件中还定义了一个与芯片中寄存器一一对应的全局变量 uint8_t SX1276Regs[0x70];。sx1276-LoRaMisc.c/h:该文件主要是提供一些 LORA 参数的设置接口sx1276-LoRa.c/h:该文件定义了 LORA 寄存器以及各种寄存器的具体数值、LORA 的初始化及配置,LORA 处理状态机。

下面是对各文件(夹)的一个简单的介绍:

* src * │ main.c 这其中有个给出了使用方法(初始化、收发数据等),作为参考在自己的项目中使用。!!!知道如何测试后删除即可!!! * ├─platform * │ │ platform.h 在此文件中对驱动进行配置。!!!这个必须要保留!!! * │ ├─bleeper 以下这些平台自己在移植时其实我们就需要其中的某个文件即可。所以所谓的平台对我自己的项目来说根本无用。 * │ ├─stm32libs 其他代码文件都是一些针对测试开发版的文件,我们不需要。 * │ ├─sx1200dvk 因为,我们自己的项目中必然有自己的实现。 * │ ├─sx1243ska 其实,最终我们就需要其中一个文件:xxx-Hal.c(根据自己的芯片类型) * │ └─sx12xxEiger Process() 以处理驱动库的状态机 在这里插入图片描述收发数据 Radio->GetRxPacket( const void *buffer, uint16_t size ); 和 Radio->SetTxPacket( const void *buffer, uint16_t size ); 注意 只有 LORA 参数都一致的情况下,两者才能通信!默然情况下,LORA 驱动内部是开启了低速率优化的。 在这里插入图片描述 参考


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有