使用 LoRaWAN 系统级封装加快远距离无线连接设计

作者:Stephen Evanczuk

投稿人:DigiKey 北美编辑

在需要低成本、远距离、低功耗无线连接的远距离检测应用中,LoRa 技术比蓝牙和 Wi-Fi 等可供选择的技术更受青睐。尽管如此,开发人员仍在努力解决射频设计存在的细微差别,以便在不影响典型物联网系统可用的有限功率预算的情况下,有效、快速地实现 LoRa 设计,最大限度提高检测范围和数据速率。

为了加快基于 LoRa 的设计,芯片供应商开发了完整的系统级封装 (SiP) 模块及相关的 LoRaWAN 软件堆栈,可作为远距离连接的近乎直接替代的解决方案。

本文首先会简要讨论 LoRa 方法,然后介绍合适的硬件和软件解决方案,最后说明设计人员如何使用这些解决方案来快速启动和运行设计。

远距离物联网网络

LoRa(远距离的英文 long-range 的缩写)定义了一种超高效、低成本、低功耗的专有扩频无线电。由于 LoRa 能够支持电池供电的传感器和其他低功耗应用,因此特别适合工作距离大于 Wi-Fi 或蓝牙范围的物联网应用。基于 LoRa 的设计只需一个小型电池就能运行多年,同时还能为延伸数公里的较大型网络提供安全可靠的连接。

LoRaWAN 是一个位于 LoRa 无线电接口顶部的介质访问控制 (MAC) 层,用于定义网络的运行方式并设置数据速率(通常高达 50 Kb/s)(参见 LoRaWAN 第 1 部分:如何让物联网实现 15 公里的无线连接范围和 10 年的电池寿命)。LoRaWAN 广域网架构采用星型网络拓扑,使用网关来中继多个终端设备(如物联网传感器和主机服务器)之间的消息(图 1)。LoRa 无线电可以单独使用,带有一个 LoRaWAN 替代 MAC 层,但该接口将不兼容 LoRaWAN 规范。

LoRaWAN 规范示意图

图 1:LoRaWAN 规范规定了终端设备与网络服务器之间经过身份验证的加密通信,使用网关与终端设备建立远距离连接,以及与云中或专用环境中的网络主机建立广域连接。(图片来源:LoRa 联盟)

在此架构中,终端设备和主机服务器通过网关设备进行通信,而网关设备可配置为仅当做通信桥。为了与主机服务器通信,网关使用传统的连接方式,如 Wi-Fi、以太网或蜂窝网络。为了与终端设备通信,网关依靠 Semtech 专有的 LoRa 物理 (PHY) 层能力,使用千兆赫 (GHz) 以下的频带实现可靠的远距离连接。两种情况下,LoRaWAN 均通过使用网络会话或应用会话密钥以 AES 加密方式保护端到端通信,这些密钥可在生产或调试期间生成,或通过无线 (OTA) 激活方式生成。

在 LoRaWAN 网络中,所有与终端设备的通信都是双向通信,不过,LoRaWAN 协议规范规定了三种不同的终端设备类别,使开发人员基本上能够在功耗与响应延迟之间取得平衡。A 类终端设备只能在每次传输之后的两个短下行链路接收窗口期间接收数据。因为能够限制接收器的活动周期,所以 A 类设备非常适合功率受限的设备,如物联网传感器。B 类设备在 A 类设备基础上增加了更多接收窗口。因此,此类设备适合需要以更短的延迟响应主机请求的物联网驱动装置,甚至不惜以增加接收器功耗为代价。最后,C 类设备提供几乎连续的开放接收窗口,非常适合在 LoRaWAN 网关中使用。

在寻求优化 LoRaWAN 的安全性、功率缩减和远距离连接时,开发人员可能会发现,他们的工作进度因配置硬件平台和软件系统所需的无数细节而被延误。不过,Microchip Technology 的硬件和软件简化了 LoRaWAN 网络的实现,为部署 LoRa 技术提供了近乎直接替代的解决方案。

低功耗集成解决方案

Microchip 的 SAM R34/35 系统级封装 (SiP) 模块集成了低功耗 Arm® Cortex®-M0+、Semtech SX1276 收发器、闪存、RAM、专用低功耗 (LP) RAM 以及传感器系统通常需要的各种外设(图 2)。除了定制的可配置逻辑模块外,SAM 34/35 还包括多通道 12 位模数转换器 (ADC)、模拟比较器和多个串行通信模块,这些模块经过编程,以支持 I2C、SPI 和其他串行接口。SAM R34 SiP 和 R35 SiP 唯一不同的地方在于:R35 未配备 R34 所附带的 USB 接口。除此之外,这些 6 x 6 毫米 (mm) SAM R34/35 模块均相同,只是采用了三种不同的存储器配置:

Microchip Technology 的 SAM R34/R35 系统级封装模块示意图

图 2:Microchip Technology 的 SAM R34/R35 系统级封装模块集成了低功耗 Arm Cortex-M0 + 处理器内核、Semtech SX1276 收发器、存储器和多个外设(SAM R35 不包括 USB)。(图片来源:Microchip Technology)

这些 SiP 模块专为低功耗应用而设计,提供多个软件可选选项,以降低功能活动较少期间的功耗。开发人员可将 SAM R34/R35 设置为以两个不同的性能级别运行。在较高性能级别 (PL2),器件内核在最高电压下工作,从而使器件能够以高时钟速度运行。在较低性能级别 (PL0),内核的电压水平可随工作频率的下降而调整,从而降低整体功耗。

在给定的性能级别,开发人员还可通过编程方式,将器件切换到以不同的功耗模式运行。在空闲模式下,模块仅消耗 4.5 毫安 (mA) 电流,短期峰值需求在 Tx 时达到 28 mA,在 Rx 时达到 10.3 mA。通过将模块置于待机模式,开发人员可将模块的功耗降至 1.4 微安 (µA),这样会关闭除专门设定为保持活动状态外的所有时钟和功能。此外,这些模块还支持 SleepWalking 操作,此模式允许选定的外设独立于处理器响应事件,执行外设操作,并且仅在需要时唤醒处理器。为降低长时间非活动期间的功耗,开发人员可将模块置于休眠模式,在该模式下仅消耗 790 纳安 (nA) 电流。Microchip 建议不要将器件置于关闭状态,因为内部 SPI 总线上的高阻抗会引起亚稳态情况的发生。

设计实现

得益于模块的集成功能,硬件接口要求非常简单。除了 SAM R34/R35 SiP 的去耦电容外,开发人员只需添加一个信号开关(例如 Skyworks SolutionsSKY13373)以及完成发射和接收射频信号路径所需的无源元件便可(图 3)。

Microchip Technology 的 SAM R34/R35 模块示意图(点击放大)

图 3:使用 Microchip Technology 的 R34/R35 模块时,除射频信号路径所需的元件以及相关的射频开关(如 Skyworks Solutions 的 SKY13373)外,开发人员只需额外添加少量元件即可。(图片来源:Microchip Technology)

通过使用 Microchip Technology 的 DM320111 SAM R34 Xplained Pro 评估套件,开发人员甚至可以避免这些简单的额外硬件要求。开发人员可使用该套件即刻评估 SAM R34,或扩展硬件参考设计来定制自己的器件。

Microchip 还可通过结合使用 SAM R34/R35 模块固件和随 Atmel Studio 7 集成开发环境提供的示例软件,帮助加快软件开发。SAM R34/R35 SiP 基于集成的 Semtech SX1276 LoRa 收发器和 PHY 而构建,通过其内置的 Microchip LoRaWAN 堆栈 (MLS)(图 4)提供了一个认证型 LoRaWAN 实现。

Microchip LoRaWAN 堆栈 (MLS) 示意图

图 4:Microchip LoRaWAN 堆栈 (MLS) 通过一组应用编程接口 (API),为开发人员提供用于 MAC、PHY、永久存储、电源管理等方面的固件服务。(图片来源:Microchip Technology)

MLS 固件基于 Microchip 针对设备驱动程序和核心模块的高级软件框架 (ASF),为每项服务都提供了应用编程接口 (API),具体包括:

  • LoRaWAN MAC,提供 LoRaWAN MAC 层功能
  • LoRaWAN 无线电层 (TAL),提供对 LoRa 收发器的访问
  • 永久数据服务器 (PDS),为闪存提供服务层,从而减少检索 MLS 参数的访问时间和访问周期
  • 电源管理器模块 (PMM),在非活动期间将处理器置于休眠模式
  • 硬件抽象层 (HAL),保护代码不受硬件特性的影响
  • 定时器库
  • 调度程序,将处理器资源分配给不同的模块

使用 API 函数,开发人员可以对模块功能的各个方面进行精细控制。例如,要将模块置于休眠模式,开发人员可调用 PMM API 函数 PMM_Sleep()。该函数采用一种包含休眠时间、休眠模式(空闲、待机、休眠或关闭)以及完成回调函数的休眠请求结构(清单 1)。在应用中,开发人员通常在每个任务之后调用此函数。例如,Microchip 的 ASF 发行版包括一个终端设备应用示例,该示例在无限循环中使用此方法(清单 2)。每个 MLS API 都提供了与 MLS 固件服务相似的入口点。

副本 /* Structure of sleep request */ typedef struct _PMM_SleepReq_t {        /* Sleep time requested to PMM.Unit is milliseconds */        uint32_t sleepTimeMs;     /*  Sleep Modes */        HAL_SleepMode_t sleep_mode;        /* Callback from sleep request */        void (*pmmWakeupCallback)(uint32_t sleptDuration); } PMM_Sleep 

清单 1:Microchip 高级软件框架 (ASF) 发行版提供的示例软件展示了关键设计模式和数据结构,例如此例中将 Microchip Technology SAM R34/R35 模块置于休眠状态所用的结构。(代码来源:Microchip Technology)

副本   ...while (1)     {               serial_data_handler();         SYSTEM_RunTasks(); #ifdef CONF_PMM_ENABLE         if (false == certAppEnabled)         {             if(bandSelected == true)             {                 PMM_SleepReq_t sleepReq;                 /* Put the application to sleep */                 sleepReq.sleepTimeMs = DEMO_CONF_DEFAULT_APP_SLEEP_TIME_MS;                 sleepReq.pmmWakeupCallback = appWakeup;                 sleepReq.sleep_mode = CONF_PMM_SLEEPMODE_WHEN_IDLE;                 if (CONF_PMM_SLEEPMODE_WHEN_IDLE == SLEEP_MODE_STANDBY)                 {                     deviceResetsForWakeup = false;                 }                 if (true == LORAWAN_ReadyToSleep(deviceResetsForWakeup))                 {                     app_resources_uninit();                     if (PMM_SLEEP_REQ_DENIED == PMM_Sleep(&sleepReq))                     {                         HAL_Radio_resources_init();                         sio2host_init();                         /*printf("\r\nsleep_not_ok\r\n");*/                     }                 }             }         } #endif     }   ... 

清单 2:Microchip 示例软件说明了开发人员如何在非活动期间使用若干 API 调用,将 Microchip Technology 的 SAM R34/R35 模块恢复至低功耗状态。(代码来源:Microchip Technology)

通过 Studio 7 或单独通过 ASF 发行版提供的示例代码,全面展示了在实现 LoRaWAN 应用时使用 MLS API 调用的情况。终端设备实现的演示说明了重要的高级操作,包括通过从 PDS 永久数据服务器服务检索以前存储的 MLS 属性和参数来对设备进行初始化(清单 3)。另一示例软件提供了一套测试例程,允许开发人员检查详细的 LoRaWAN 性能特征,以及用于提取这些值的 MLS API 调用。通过将 Microchip 的示例软件与 SAM R34 Xplained Pro 评估套件结合起来使用,开发人员可以快速获得总体 LoRaWAN 操作经验,特别是 Microchip 固件服务经验。

副本 /*********************************************************************//** \brief    Initialization the Demo application *************************************************************************/ void mote_demo_init(void) {     bool status = false;     /* Initialize the resources */     resource_init();        /* Read DEV EUI from EDBG */        dev_eui_read();        startReceiving = false;     /* Initialize the LORAWAN Stack */     LORAWAN_Init(demo_appdata_callback, demo_joindata_callback);     printf("\n\n\r*******************************************************\n\r");     printf("\n\rMicrochip LoRaWAN Stack %s\r\n",STACK_VER);     printf("\r\nInit - Successful\r\n");       status = PDS_IsRestorable();     if(status)     {         static uint8_t prevBand = 0xFF;         uint8_t prevChoice = 0xFF;         PDS_RestoreAll();         LORAWAN_GetAttr(ISMBAND,NULL,&prevBand);         for (uint32_t i = 0; i < sizeof(bandTable) -1; i++)         {             if(bandTable[i] == prevBand)             {                 prevChoice = i;                 break;             }         }         memset(rxchar,0,sizeof(rxchar));         sio2host_rx(rxchar,10);         printf ("Last configured Regional band %s\r\n",bandStrings[prevChoice]);         printf("Press any key to change band\r\n Continuing in %s in ", bandStrings[prevChoice]);           SwTimerStart(demoTimerId,MS_TO_US(1000),SW_TIMEOUT_RELATIVE,(void *)demoTimerCb,NULL);     }     else     {               appTaskState = DEMO_CERT_APP_STATE;         appPostTask(DISPLAY_TASK_HANDLER);     } } 

清单 3:此代码片段取自 Microchip 的终端设备示例应用,展示了与初始化设备相关的基本设计模式,包括从 PDS 永久数据服务器还原可用的 LoRaWAN 属性 (PDS_IsRestorable())。(代码来源:Microchip Technology)

总结

LoRa 技术特别适合解决电池供电的物联网传感器对远距离连接的新兴需求。但在过去,开发人员需要从事大量的硬件和软件子系统开发。Microchip 的 SAM R34/R35 SiP 模块凭借集成的硬件和固件,有效地消除了与早期方法相关的许多详细设计要求。通过将 Microchip 基于 LoRaWAN 的硬件与软件结合起来使用,开发人员可快速实现电池供电的物联网设备和低功耗网关,从而能够与云中或专用环境中的主机服务器完成安全的远距离通信。

免责声明:各个作者和/或论坛参与者在本网站发表的观点、看法和意见不代表 DigiKey 的观点、看法和意见,也不代表 DigiKey 官方政策。

关于此作者

Stephen Evanczuk

Stephen Evanczuk 拥有 20 多年的电子行业编辑经验,主题涉猎广泛,涵盖硬件、软件、系统以及包括物联网在内的各种应用。他拥有神经网络领域的神经科学博士学位,曾经从事航空航天领域大规模分布式安全系统和算法加速方法方面的工作。目前,他不是在撰写技术和工程文章,就是在研究深度学习在识别和推荐系统方面的应用。

关于此出版商

DigiKey 北美编辑