增加持续 Wi-Fi 连接而不影响电池续航时间

作者:Stephen Evanczuk

投稿人:DigiKey 北美编辑

由于 Wi-Fi 带宽高且普遍存在,因此仍是许多物联网 (IoT) 设备的主要连接方式。但是,对于可穿戴设备和其他电池供电的物联网设备来说,传统 Wi-Fi 解决方案的电源要求会让持续 Wi-Fi 连接变得不切实际,通常要求开发人员在设备功能、性能或电池续航时间方面做出一些取舍。

对于某些团队而言,虽然可以选择设计定制的 Wi-Fi 解决方案来实现低功耗优化,但这可能是一项昂贵且耗时的工作,尤其是在缺乏合格射频设计人员的情况下。这时就需要一个更完整的解决方案,能够让低功耗物联网设备实现持续 Wi-Fi 连接。

本文将说明开发人员如何使用 Dialog Semiconductor 的无线片上系统 (SoC) 器件内置的低功耗功能实现持续 Wi-Fi 连接。

移动设备支持 Wi-Fi 连接所面临的挑战

对于围绕个人移动产品、智能家居设备和楼宇自动化系统等构建的各种物联网应用,Wi-Fi 具备这些应用所需的普遍存在性和性能特征。但是,以往 Wi-Fi 子系统的电流消耗相对较高,迫使开发人员牺牲电池供电型物联网设备的电池续航时间或信号强度。

传统 Wi-Fi 解决方案的高功率要求给物联网开发人员带来了更多挑战。例如,要同时实现 Wi-Fi 连接性和更长的电池续航时间,就需要容纳更大的电池,这可能会增加设计尺寸和复杂性。对于可能无法使用较大电池的可穿戴设备或许多物联网设备,尝试通过降低 Wi-Fi 信号强度(及相关功耗)来延长电池续航时间可能也不行。

除了这些问题,物联网开发人员还面临着典型 Wi-Fi 信号环境的实际限制,因为多路干扰和其他射频 (RF) 信号特性可能导致信号强度发生显著变化。在诸如笔记本电脑之类的应用中,消费者只需将笔记本电脑移动到 Wi-Fi 信号更好的位置就能解决问题。相比之下,智能锁或家用电器无论安装在何处,都需要保持可靠的连接性和稳定性能。

为了实现更长的电池续航时间和稳定的 Wi-Fi 信号强度,开发人员通常会充分利用大多数高级处理器、无线电和其他复杂硬件元器件中提供的低功耗休眠模式。开发人员可以这样进行设计实现,即最大限度延长高耗电设备各自处于低功耗模式的时间,进而延长系统设计的电池续航时间,这样通常对系统功能的影响很小。在这些设计中,低功耗计时器会周期性地短暂唤醒系统,以读取并无线传输传感器数据,然后再返回休眠模式。

但是,对于某些物联网应用,物联网设备需要保持与 Wi-Fi 网络的持续连接,以确保快速响应通过移动应用、台式机软件或其他设备发出的用户命令。例如,智能家居中的智能锁、电灯和开关需要保持连接状态,以对用户命令做出即时响应。对于用户而言,迟迟等待基于计时器的器件最终唤醒,检测命令并最终打开门锁或电灯是完全无法接受的。

Dialog Semiconductor 的 DA16200 SoC 和相关模块提供了有效的低功耗解决方案,能够满足持续 Wi-Fi 连接和延长电池续航时间的要求。

使用无线 SoC 实现 Wi-Fi 连接

DA16200 SoC 专为电池供电的物联网设计打造,将 Arm® Cortex®-M4F 和运行完整网络堆栈的完整 Wi-Fi 无线电子系统结合在一起,无需外部网络处理器或主机处理器即可提供堆栈功能。除了无线电子系统,该器件还集成了物联网设计中通常需要的全套功能块和接口(图 1)。

Dialog Semiconductor 的 DA16200 SoC 示意图图 1:Dialog Semiconductor 的 DA16200 SoC 提供了完整的 Wi-Fi 解决方案,能够提供持续 Wi-Fi 连接,同时消耗最小的电流。(图片来源:Dialog Semiconductor)

除了多个标准接口,该器件还包括一个 4 通道 12 位逐次逼近寄存器 (SAR) 模数转换器 (ADC),以支持模拟信号采集。

为了执行应用,DA16200 包含多个内部存储器,包括:

  • 用于引导加载程序、系统内核、网络堆栈和驱动程序的只读内存。
  • 用于程序数据的静态随机存取存储器 (SRAM)。程序代码在通过设备的外部串行闪存接口访问的串行闪存上进行芯片内执行 (XIP)。
  • 用于存储设备信息以及加密密钥和安全引导加载程序的一次性可编程 (OTP) 存储器。由于 OTP 数据只能通过 OTP 控制器访问,而对通过系统总线进行的常规数据访问将保持不可见,因而 OTP 数据保持安全。

为了帮助开发人员满足对互联设备安全性不断增长的需求,DA16200 SoC 集成了广泛的安全性机制,包括用于高级加密标准 (AES)、安全散列算法 (SHA) 和其他加密法的加密引擎,以及对传输层安全 (TLS) 协议的支持。该器件还包括 Arm TrustZone CryptoCell-312 (CC312) 安全知识产权 (IP)。CC312 专为低功耗设备而设计,支持安全引导并为安全应用提供信任根。

借助一个综合射频模块,该器件简化了 Wi-Fi 连接。除了内置的 802.11 媒体访问控制 (MAC) 和 802.11b/g/n 物理 (PHY) 层,无线子系统还包括一个片上收发器,该收发器集成了功率放大器 (PA) 和低噪声放大器 (LNA),消除了对外部有源元器件的需求。在运行中,DA16200 的 Arm Cortex-M4F 处理器执行嵌入式传输控制协议/互联网协议 (TCP/IP) 堆栈,以卸载系统主机处理器的连接性操作。

DA16200 SoC 集成了 DC-DC 转换器、低压差 (LDO) 稳压器和电源开关,以便为包括射频模块在内的各种模块供电。在器件的实时时钟 (RTC) 模块的管理下,转换器和 LDO 从单个 VBAT 电池电源生成所有所需的电源轨。DC-DC 转换器从 VBAT 为射频模块和数字 LDO 产生 1.4 V 电压,I/O LDO 为外部闪存和器件的通用 I/O (GPIO) 生成其所需的 1.8 V 电压(图 2)。

Dialog Semiconductor 的 DA16200 SoC 电源管理单元示意图图 2:DA16200 SoC 的电源管理单元控制着该器件的集成电源组件,向其独立功率域供电。(图片来源:Dialog Semiconductor)

DA16200 SoC 的电源管理单元通过管理器件的三种低功耗(休眠)模式,来控制这些独立电源域的电源:

  • Sleep 1 模式提供 0.2 微安 (μA) 的最低运行功耗:在此模式下,器件大多数时间会关闭电源,但会在 150 毫秒 (ms) 内唤醒,以便在外部触发信号传递给 SoC 的两个唤醒引脚或多个数字 I/O 之一时,或者当模拟输入信号超过预定义的阈值时做出响应。
  • Sleep 2 模式仅消耗 1.8 μA 的电流,同时保留 RTC 功能:在此模式下,SoC 会在不到 100 ms 内唤醒,以便在发生外部唤醒事件时或编程的内部定时器完成定时后做出响应。
  • Sleep 3 模式提供了独特的持续连接 Wi-Fi 模式,该模式可以消耗最小的电流,并在检测到传入 Wi-Fi 数据包后的不到 2 ms 内唤醒:如下所述,将休眠模式 3 与常规 TCP 保持活动功能结合使用,为实现平均电流消耗小于 50 μA 的持续 Wi-Fi 连接功能提供了基础。

动态电源管理技术可实现持续的 Wi-Fi 连接

这些低功耗休眠模式的基础是 Dialog Semiconductor 专有的动态电源管理 (DPM) 技术,该技术可以关闭未使用的片上微元件,从而在设备不传输或接收数据时将功耗降至最低。在 Wi-Fi 操作期间,DPM 使用高级算法在需要时唤醒所需的微元件,从而将传输和接收无线电操作期间的功耗降至最低。

Dialog Semiconductor 的 DA16200 软件开发套件 (SDK) 通过其 DPM Manager 应用程序编程接口 (API) 来抽象化电源管理和 DPM 操作的细节。对于定制软件开发,SDK 允许访问 DA16200 应用程序和系统服务的软件堆栈(图 3)。

Dialog Semiconductor 的 DA16200 SoC 软件架构图片图 3:DA16200 SoC 的软件架构提供了支持物联网设备中标准 Wi-Fi 连接所需的全套系统和应用程序服务。(图片来源:Dialog Semiconductor)

结合使用 DPM Manager 和 NetX Duo TCP/IP 库实现持续 Wi-Fi 连接。NetX Duo 库提供 TCP 保持活动 (keepalive) 功能,该功能将不含数据的 TCP 数据包发送到 Wi-Fi 路由器,从而确保路由器保持 Wi-Fi 连接处于活动状态。开发人员只需将当前的 TCP 套接字选项 keepalive_enabled 设置为 true 即可调用此功能,并提供保持活动数据包之间的秒数 keepalive_timeout。NetX Duo 会根据需要自动传输保持活动帧。

当保持活动数据包维持与路由器或其他主机之间的网络连接时,DA16200 从 Sleep 3 模式唤醒的能力依赖于检测 802.11 管理帧中嵌入的标准流量指示图 (TIM) 或传送流量指示图 (DTIM) 信息元素,并用于通知网络站点(例如,基于 DA16200 的系统)有可用的网络流量。当 DA16200 处于 Sleep 3 模式时,DA16200 的 DPM 技术可确保无线电子系统在寻找 TIM/DTIM 元素时使用最小的功率。当 DA16200 无线电子系统检测到 TIM/DTIM 元素时,将唤醒 SoC 以开始处理正常的 Wi-Fi 流量,该过程与其他网络站点一样。

通过 DA16200 DPM Manager API,开发人员只需进行几次直观的调用即可实现此功能。在定义了所需的 DPM 配置(包括参数和回调)之后,开发人员将使用 DPM Manager API 函数调用来执行调用或与 DPM Manager 进行交互。DA16200 DPM 的技术以透明化的方式处理 Sleep 3 模式的进入和退出操作。

SDK 中包含的示例应用程序说明了实现此操作序列所需的基本设计模式(清单 1)。

副本
#define TCP_CLIENT_KA_DPM_SAMPLE_DEF_KEEPALIVE_TIMEOUT            55
[lines deleted]
void tcp_client_ka_dpm_sample_wakeup_callback()
{
    PRINTF(GREEN_COLOR " [%s] DPM Wakeup\n" CLEAR_COLOR, __func__);
 
    dpm_mng_job_done(); //Done operation
}
[lines deleted]
void tcp_client_ka_dpm_sample_recv_callback(void *sock, UCHAR *rx_buf, UINT rx_len,
                                            ULONG rx_ip, ULONG rx_port)
{
    int status = NX_SUCCESS;
 
    //Display received packet
    PRINTF(" =====> Received Packet(%ld) \n", rx_len);
 
    tcp_client_ka_dpm_sample_hex_dump("Received Packet", rx_buf, rx_len);
[lines deleted]
    dpm_mng_job_done(); //Done operation
}
[lines deleted]
void tcp_client_ka_dpm_sample_init_user_config(dpm_user_config_t *user_config)
{
[lines deleted]
    //Set DPM wakeup init callback
    user_config->wakeupInitCallback = tcp_client_ka_dpm_sample_wakeup_callback;
[lines deleted]
    //Set Recv callback
    user_config->sessionConfig[session_idx].session_recvCallback =
        tcp_client_ka_dpm_sample_recv_callback;
[lines deleted]
    //Set KeepAlive timeout
    user_config->sessionConfig[session_idx].session_ka_interval =
        TCP_CLIENT_KA_DPM_SAMPLE_DEF_KEEPALIVE_TIMEOUT;
[lines deleted]
}
[lines deleted]
void tcp_client_ka_dpm_sample(ULONG arg)
{
[lines deleted]
    //Register user configuration
    dpm_mng_regist_config_cb(tcp_client_ka_dpm_sample_init_user_config);
 
    //Start TCP Client Sample
    dpm_mng_start();
 
    return ;
}

清单 1:通过 DA16200 SoC,开发人员可以使用配置和一些 DPM API 函数调用来实现持续 Wi-Fi 连接。(代码来源:Dialog Semiconductor)

如清单 1 所示,开发人员主要使用初始化函数 (tcp_client_ka_dpm_sample_init_user_config()) 来实现此功能,该函数可设置各种配置参数,包括保持活动间隔 (TCP_CLIENT_KA_DPM_SAMPLE_DEF_KEEPALIVE_TIMEOUT),并提供各种回调,包括用于 DMP 唤醒的回调 (tcp_client_ka_dpm_sample_wakeup_callback()) 和用于处理传入数据包的回调 (tcp_client_ka_dpm_sample_recv_callback())。要开始 TCP 保持活动和 DPM 唤醒序列,只需一个单独的函数 (tcp_client_ka_dpm_sample()) 即可调用配置例程 (dpm_mng_regist_config_cb(tcp_client_ka_dpm_sample_init_user_config)) 和 DMP Manager (dpm_mng_start())。

如前所述,整个序列(包括标准 TCP 保持活动数据包和 DA16200 启用 DPM 的 Wi-Fi 监控)将实现平均电流消耗通常小于 50 μA 的持续 Wi-Fi 连接能力。

可以使用相同的设计模式将 SoC 从其休眠模式唤醒,以处理其他操作。例如,示例应用程序显示了如何使用 DA16200 的 RTC 唤醒 SoC 来处理数据(清单 2)。

副本
#define    SAMPLE_FOR_DPM_SLEEP_3        // Sleep Mode 3
 
#define    MICROSEC_FOR_ONE_SEC        1000000
#define    RTC_TIMER_WAKEUP_ONCE        5    // seconds
#define    RTC_TIMER_WAKEUP_PERIOD        10    // seconds
static void rtc_timer_dpm_once_cb(char *timer_name)
{
[lines deleted]
static void rtc_timer_dpm_periodic_cb(char *timer_name)
{
    /*
     *Caution : Don't spend a lot of time in the calback function called by timer.
     */
    dpm_app_sleep_ready_clear(SAMPLE_RTC_TIMER);
 
    PRINTF("\nWakeup due to Periodic RTC timer!!!\n");
    tx_thread_sleep(10);
 
    dpm_app_sleep_ready_set(SAMPLE_RTC_TIMER);
}
[lines deleted]
void rtc_timer_sample(ULONG arg)
{
[lines deleted]
        /* Periodic timer */
        status = dpm_timer_create(SAMPLE_RTC_TIMER,
                                  "timer2",
                                  rtc_timer_dpm_periodic_cb,
                                  RTC_TIMER_WAKEUP_PERIOD,
                                  RTC_TIMER_WAKEUP_PERIOD);
[lines deleted]
        dpm_app_sleep_ready_set(SAMPLE_RTC_TIMER);
[lines deleted]
    }
 
    while (1)
    {
        /* Nothing to do... */
        tx_thread_sleep(100);
    }
}

清单 2:开发人员可以使用 DA16200 通过几个 DPM API 函数调用实现基于定时器的低功耗功能,以确保 DA16200 休眠期间的功耗最小。(代码来源:Dialog Semiconductor)

如清单 2 所示,开发人员调用 DPM Manager API 函数 (dpm_timer_create()) 创建定时器 (SAMPLE_RTC_TIMER),并调用另一个 DPM Manager API 函数 (dpm_app_sleep_ready_set()) 来指示系统已准备好进入休眠状态。然后,DPM 引擎将根据当前的活动确定系统可以多快返回低功耗休眠模式。稍后,当定时器完成定时后,系统将执行开发人员的回调函数 rtc_timer_dpm_periodic_cb(),该函数将执行所需的操作。在本例中,只是将通知打印到控制台。操作完成后,相同的回调函数将执行 dpm_app_sleep_ready_set() 来通知 DPM 引擎系统已准备好进入休眠状态。和之前一样,DPM 引擎会在适当的时候完成到休眠模式的转换。

插入式模块简化了 Wi-Fi 设计

DA16200 SDK 简化了软件设计,而该器件广泛的片上功能让硬件接口设计变得相对简单。结合使用 DA16200 SoC 和外部闪存设备(例如 Winbond ElectronicsW25Q16JVSNIQ 16 Mb NOR 存储器 IC)以及仅仅几个附加元器件,开发人员就可以实现支持 Wi-Fi 的安全物联网设计(图 4)。

Dialog Semiconductor 的 DA16200 SoC 示意图(点击放大)图 4:Dialog Semiconductor 的 DA16200 SoC 具有广泛的集成功能,只需要一个外部串行闪存和极少的附加元器件即可实现一个完整的 Wi-Fi 系统。(图片来源:Dialog Semiconductor)

对于基于 DA16200 SoC 进行设计的开发人员,可以转而使用 Dialog Semiconductor 模块加速开发,因为无需再针对 SoC 硬件接口进行设计。除了 DA16200 SoC,这些模块还包括 4 MB 闪存、射频组件以及可选的板载芯片天线 (DA16200MOD-AAC4WA32) 或用于外部天线 (DA16200MOD-AAE4WA32) 的 u.FL 连接器。这些尺寸仅为 13.8 x 22.1 x 3.3 毫米 (mm) 的模块已通过 FCC、IC、CE 和其他监管机构的全面认证,为实现低功率持续 Wi-Fi 连接提供了插入式硬件解决方案。

希望探索持续 Wi-Fi 连接并快速完成基于 DA16200 SoC 的物联网原型设计的开发人员可以立即利用 Dialog Semiconductor DA16200MOD-DEVKT 开发套件的优势。该套件将 DA16200MOD 模块与 USB 接口、按键和连接相结合,有助于加快基于 DA16200 的设计开发和调试。

总结

保持持续 Wi-Fi 连接是笔记本电脑和其他互联产品的常规功能。但是对于可穿戴设备和其他电池供电型物联网设备来说,传统 Wi-Fi 解决方案的电源要求会让持续 Wi-Fi 连接变得不切实际,通常要求开发人员在设备功能、性能或电池续航时间方面做出一些取舍。

Dialog Semiconductor 的 SoC 提供了一个完整的 Wi-Fi 解决方案,能够在消耗最小电流的同时提供持续的 Wi-Fi 连接。如上所示,使用该 SoC 或其相关模块,开发人员可以快速实现安全的电池供电型设备,为用户带来持续 Wi-Fi 连接的优势,同时满足其对延长电池续航时间的需求。

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

关于此作者

Stephen Evanczuk

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

关于此出版商

DigiKey 北美编辑