作者:Stephen Evanczuk/Digi-Key
由于 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)。
图 1:Dialog Semiconductor 的 DA16200 SoC 提供了完整的 Wi-Fi 解决方案,能够提供持续 Wi-Fi 连接,同时消耗最小的电流。(图片来源:Dialog Semiconductor)
除了多个标准接口,该器件还包括一个 4 通道 12 位逐次逼近寄存器 (SAR) 模数转换器 (ADC),以支持模拟信号采集。为了执行应用,DA16200 包含多个内部存储器,包括:
- 用于引导加载程序、系统内核、网络堆栈和驱动程序的只读内存。
- 用于程序数据的静态随机存取存储器 (SRAM)。程序代码在通过设备的外部串行闪存接口访问的串行闪存上进行芯片内执行 (XIP)。
- 用于存储设备信息以及加密密钥和安全引导加载程序的一次性可编程 (OTP) 存储器。由于 OTP 数据只能通过 OTP 控制器访问,而对通过系统总线进行的常规数据访问将保持不可见,因而 OTP 数据保持安全。
借助全面的射频模块,该器件简化了 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)。
图 2:DA16200 SoC 的电源管理单元控制该器件的集成电源元器件,向其单独的电源域供电。(图片来源:Dialog Semiconductor)
DA16200 SoC 的电源管理单元在管理器件的三种低功耗(休眠)模式时,负责控制这些独立电源域的电源:- 休眠 1 模式提供 0.2 微安 (μA) 的最低运行功耗:在此模式下,器件大多数时间会关闭电源,但会在外部触发信号传递给 SoC 的两个唤醒引脚或多个数字 I/O 之一,或者当模拟输入信号超过预定义的阈值后的 150 毫秒 (ms) 内唤醒以做出响应。
- 休眠 2 模式仅消耗 1.8 μA 的电流,同时保留 RTC 功能:在此模式下,SoC 会在发生外部唤醒事件或编程的内部定时器完成定时后的不到 100 ms 内唤醒以做出响应。
- 休眠 3 模式提供了独特的持续连接 Wi-Fi 模式,该模式可以消耗最小的电流,并在检测到传入的 Wi-Fi 数据包后的不到 2 ms 内唤醒:如下所述,将休眠模式 3 与常规 TCP 保持活动功能结合使用为实现持续 Wi-Fi 连接功能提供了基础,可实现小于 50 μA 的平均电流消耗。
这些低功耗休眠模式的基础是 Dialog Semiconductor 专有的动态电源管理 (DPM) 技术,该技术可以关闭未使用的片上微元件,从而在设备不发送或接收数据时将功耗降至最低。在 Wi-Fi 操作期间,DPM 使用高级算法在需要时唤醒所需的微元件,从而将发射和接收无线电操作期间的功耗降至最低。
Dialog Semiconductor 的 DA16200 软件开发套件 (SDK) 通过其 DPM Manager 应用程序编程接口 (API) 来抽象化电源管理和 DPM 操作的细节。对于定制软件开发,SDK 提供对应用程序和系统服务的 DA16200 软件堆栈的访问(图 3)。
图 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 从休眠 3 模式唤醒的能力取决于对嵌入在 802.11 管理帧中的标准流量指示图 (TIM) 或传送流量指示图 (DTIM) 信息元素的检测,并通知网络站点(例如,基于 DA16200 的系统)可用的网络流量。当 DA16200 处于休眠 3 模式时,DA16200 的 DPM 技术可确保无线电子系统在寻找 TIM/DTIM 元素时使用最小的功率。当 DA16200 无线电子系统检测到 TIM/DTIM 元素时,将唤醒 SoC 以开始处理正常的 Wi-Fi 流量,该过程与其他网络站点一样。
通过 DA16200 DPM Manager API,开发人员只需进行几次直观的调用即可实现此功能。在定义了所需的 DPM 配置(包括参数和回调)之后,开发人员将使用 DPM Manager API 函数调用来执行调用或与 DPM Manager 进行交互。DA16200 DPM 的技术清晰地处理了休眠 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 ;}<code id="0">
- </code>
如前所述,整个序列(包括标准 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 Electronics 的 W25Q16JVSNIQ 16 Mb NOR 存储器 IC 和仅几个附加元器件),开发人员可以实施支持 Wi-Fi 的安全物联网设计(图 4)。
图 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 连接的优势,同时满足其对延长电池续航时间的需求。