Mbed OS 文档翻译 之 参考(技术(蜂窝))

蜂窝

Mbed OS 蜂窝为您的物联网应用提供对全球运营商维护的蜂窝网络(IP 和非 IP)的访问,如图 1 所示。Mbed OS 蜂窝实现基于国际 3GPP 和 OMA 标准,并且已经被验证可以与所有蜂窝网络一起工作,例如 NB-IoT,CAT-M1,4G LTE,3G WCDMA 和 GPRS。

                          Mbed OS 文档翻译 之 参考(技术(蜂窝))_第1张图片

                                                                            图 1. Mbed OS 蜂窝概述

如果您还不熟悉,请阅读有关 Mbed OS 连接技术的信息。

主要特征

Mbed OS 蜂窝 API 的主要功能包括:

  • 兼容 3GPP TS 27.007 和 27.005。
  • 实现 OMA 轻量级 M2M 客户端的核心功能。
  • 在 Mbed Enabled 板上托管蜂窝模块。

3GPP TS 27.007 和 27.005 是用于在蜂窝设备的 AT 命令接口上提供一致的蜂窝网络数据连接和 SMS 的标准,而不管底层蜂窝网络如何。

OMA 轻量级 M2M 是开放移动联盟用于物联网设备管理的协议。Mbed OS 蜂窝 API 提供了实现 LWM2M 客户端的核心功能。 有关更多信息,请参阅 OMA 规范中的 OMA LightweightM2M 和 OMA LWM2M 对象连接管理。

Mbed OS 已经支持多个带有板载蜂窝托管模块的 Mbed Enabled 板。由于 Mbed OS 是一个开源平台,开发人员可以通过我们的适配框架支持新的蜂窝板。有关更多信息,请参阅我们的移植接口指南。

快速开始

一般来说,Mbed OS 连接有两个阶段:

  1. 连接到网络。
  2. 打开套接字以发送或接收数据。

使用蜂窝网络,通过蜂窝网络将应用程序连接到互联网的最简单方法是使用 CellularConnectionFSM 类。它封装了连接到蜂窝网络的大部分复杂性,并且还报告了连接状态对应用程序的任何变化。当连接到蜂窝网络时,您可以照常使用 Mbed OS 网络套接字,如图 2 所示。

                        Mbed OS 文档翻译 之 参考(技术(蜂窝))_第2张图片

                                                          图 2. 连接到蜂窝网络并打开套接字

如果您想查看代码,可以转到我们的蜂窝示例。

蜂窝托管模块

如果您使用的是具有受支持的板载(已安装)蜂窝托管模块的 Mbed OS 目标,则蜂窝框架会在编译时决定正确的蜂窝托管模块。您可以运行 mbedls 来查找当前的 Mbed OS 目标,然后将其与 CellularTargets.h 文件中支持的目标进行匹配,其中 CELLULAR_DEVICE 宏是基于 Mbed OS 目标定义定义的,并且可以用作 C++ 类类型实例化一个驱动程序类(继承自CellularDevice.h)。

您可以浏览 CellularTargets.h 文件以查明您使用的托管模块是否已受支持。如果尚不支持托管模块,您可以根据需要调整一些现有驱动程序。

一些 Mbed OS 目标板可能具有几种不同类型的蜂窝托管模块。在这种情况下,蜂窝托管模块驱动程序在运行时检测当前安装的实际托管模块,并在运行时期间适应该特定蜂窝托管模块。

如果您通过串行线路(UART)使用 Mbed OS 目标和单独的蜂窝托管模块,则需要在 mbed_app.json 配置文件中配置要使用的蜂窝托管模块以及在 Mbed OS 目标板之间连接的 UART 引脚和蜂窝托管模块:

{
    "macros":
    [
        "CELLULAR_DEVICE=",
        "MDMRXD=",
        "MDMTXD="
    ]
}    

您需要根据您的 Mbed 目标将上面的引脚名称更改为实际引脚,例如 D0 和 D1。如果在 UART 上连接了 RTS/CTS,则可能还需要定义 MDMRTS 和 MDMCTS 引脚。

蜂窝 API

作为应用程序开发人员,您应该使用并仅引用位于 API 文件夹下的类。所有其他类都有实现细节,预计会经常更改。

蜂窝 API 基于主要功能构建:

  • CellularNetwork 用于蜂窝网络功能,例如首选运营商和 APN。
  • CellularPower 用于蜂窝托管模块电源控制,例如启用省电功能。
  • CellularInformation 读取蜂窝托管模块类型和固件版本。
  • CellularSIM 输入 PIN 码和其他 SIM 管理功能。
  • CellularSMS 用于读取和写入 SMS 消息。

CellularDevice 类包含了蜂窝 API。因此,要使用任何蜂窝 API,您需要先获得 CellularDevice。然后,您可以使用 CellularDevice 打开和关闭蜂窝 API,如图 3 所示。

                          Mbed OS 文档翻译 之 参考(技术(蜂窝))_第3张图片

                                                                    图 3. 使用 CellularDevice 打开蜂窝 API

当应用程序打开了蜂窝 API 时,您可以使用它来请求 API 方法。例如:

CellularNetwork *network  = cellularDevice->get_network();
if (network) {
    printf("Local IP address is %s", network->get_ip_address());
}

UDP 和 TCP 套接字

如果要使用 UDP 或 TCP 套接字,则需要 IP 栈。Mbed OS 蜂窝有一个选项可以使用 LWIP 栈,它是 Mbed OS 的一部分,或者使用蜂窝托管模块上的 IP 栈。图 4 说明了 IP 栈部署。

                                             Mbed OS 文档翻译 之 参考(技术(蜂窝))_第4张图片

                                                      图 4. IP 栈可用于 PPP 或 AT 模式

在 Mbed OS 上使用 LWIP 栈的 PPP 模式

                  Mbed OS 文档翻译 之 参考(技术(蜂窝))_第5张图片

在 PPP(点对点协议)模式下,LWIP 栈作为 Mbed OS 应用程序的一部分进行链接。由于 LWIP 栈实现套接字,因此套接字功能与硬件无关。

您可以启用 PPP 模式并在应用程序配置文件中配置 LWIP 功能:

"lwip.ppp-enabled": true
"lwip.ipv4-enabled": true
"lwip.ipv6-enabled": true
"lwip.tcp-enabled": true

AT 模式与调制解调器上的 IP 栈

                Mbed OS 文档翻译 之 参考(技术(蜂窝))_第6张图片

在 AT 模式下,调制解调器的内部 IP 栈通过 AT 链路使用。套接字是 IP 栈的一部分,因此 AT 命令用于控制套接字。套接字 AT 命令是调制解调器特定的,需要在 Mbed OS 端实现。您可以在 cellular/targets 文件夹下浏览 CellularStack,以了解您的硬件如何支持 AT 套接字。

未启用 PPP 模式时启用 AT 模式:

"lwip.ppp-enabled": false

你应该使用 PPP 还是 AT 模式?

选择 PPP 或 AT 模式时,请考虑以下几点:

  • 您的蜂窝托管模块可能仅支持 AT 或 PPP 模式。
  • PPP 模式支持 UDP 和 TCP 套接字。
  • 连接到数据模式后,PPP 模式不允许 AT 命令。
  • PPP 模式使用 LWIP 栈,该栈使用来自 Mbed OS 应用程序的内存。
  • AT 模式通常仅支持 UDP 套接字。
  • AT 模式可能更好地针对功耗进行优化。

优化功耗

CellularPower 类具有优化节能的方法。set_powerl_level() 提供灵活性来控制接收和传输功率等级。此外,3GPP 还指定了对蜂窝物联网设备有用的高级功率优化:省电模式(PSM)和扩展不连续接收(eDRX)。

PSM - 省电模式

opt_power_save_mode(int periodic_time, int active_time)

实施规范版本 13 及更高版本的新 4G 调制解调器包括 PSM。PSM 允许应用程序告诉调制解调器和网络它不期望在给定时间间隔内的任何数据,即 periodic_time。调制解调器和网络可以基于该信息优化睡眠状态和网络资源预留。在 PSM 时间内,没有任何东西可以从网络侧联系设备。应用程序仍然可以随时发送。PSM 时间可以是几小时,几天或几周。

active_time 表示设备在发送数据后等待接收消息的秒数,或者周期时间已经过去的时间。如果设备向管理系统发送报告,则设备在监听状态下等待配置的时间量。收听会使收音机保持在调制解调器中,因此它比空闲状态消耗更多电量。

此功能可定期报告设备,从而节省大量电力。在报告之间,设备处于 PSM 状态,调制解调器处于深度睡眠状态。联系设备的延迟是 PSM 期间。

PSM 配置与网络协商,并且网络已接受的实际 PSM 时间可能与请求的不同。

eDRX - 延长不连续接收

opt_receive_period(int mode, EDRXAccessTechnology act_type, uint8_t edrx_value)

eDRX 表示设备在连续连接中休眠的时间。设备需要能够接收数据,但它可以告诉网络它检查传入的消息,例如每 200 秒。它只能在给定时间接收消息,以便节省电池睡眠时间。与普通 4G 数据传输相比,这些时间值大大延长 - 因此得名。

此功能可为需要较小延迟的设备提供服务。连接始终保持打开状态,但调制解调器在接收时间之间达到睡眠状态。如果使用 IPv4,则数据连接可能需要定期保持活动消息以保持网络地址转换映射有效。

应用程序为调制解调器提供 eDRX 配置,该调制解调器与网络协商。网络接受的时间可能与请求的时间不同。此优化的可用性取决于蜂窝网络。

UDP,TCP 和非 IP 使用的注意事项

使用哪种网络协议取决于多种因素。服务器通信模型,功耗,可靠性需求和运营商支持是最大的因素。

TCP 是一种可靠的传输协议。对于长期存在的会话,需要定期保持活动消息传递,这对主电源提出了要求。对于长期 TCP 连接,服务器应用程序可以联系设备。连接仍然可能具有较长的延迟,因为设备使用 eDRX 功率优化会影响其侦听传入数据包的时间。Mbed TLS 支持 TCP 上的 TLS 传输安全性。但是,由于设备部署和网络规划考虑,运营商可能会阻止在 NB-IoT 上使用 TCP。

UDP 是不可靠的,这会给应用程序带来重传机制负担。UDP 没有会话;因此,服务器应用程序只能在收到来自设备的 UDP 消息后短时间内联系设备。

Mbed TLS 支持 UDP 上的 DTLS 传输安全性。

非 IP 是通过 NB-IoT 进行通信的新选择。设备将消息发送到运营商消息服务。服务器应用程序使用 Web API 与消息传递服务进行通信。消息传递服务允许设备和服务器应用程序进行通信,而不管其活动窗口如何。蜂窝网络安全服务在蜂窝网络内提供安全性,从消息中心到使用 HTTPS 的 Web 应用程序。由于非 IP 的网络支持可能会有所不同,因此应用程序取决于用例。对于更广泛的操作,它需要在过渡期内同时支持非 IP 和 IP。

对于 DTLS 和 TLS 传输安全性,即使设备在省电期间保持其自己的 IP 地址,也可能由于网络地址转换(NAT)而在网络中更改地址。NAT 是一种在更多用户之间共享少量 IPv4 地址的机制。NAT 地址更改需要重新协商(D)TLS 安全会话。TLS 和 DTLS 协议支持会话 ID 和会话票证机制以优化重新协商。设备和(D)TLS 服务器都必须支持使用的机制。

要阅读有关安全性的更多信息,请参 Arm Mbed TLS。

你可能感兴趣的:(Mbed,OS)