增添連續 Wi-Fi 連線能力而不犧牲電池續航力

作者:Stephen Evanczuk

資料提供者:DigiKey 北美編輯群

Wi-Fi 具有高頻寬和高普及性,因此,仍是許多物聯網 (IoT) 元件主要的連網條件。但是,對於穿戴式裝置和其他電池供電的 IoT 裝置,傳統 Wi-Fi 解決方案的電力要求,使得連續 Wi-Fi 連線完全行不通,開發人員通常需犧牲某方面的元件功能、效能或電池續航力。

某些團隊也許能選擇設計客製化的 Wi-Fi 解決方案,針對低功耗進行最佳化,不過這種作法可能既昂貴又耗時,特別是如果缺乏合格的 RF 設計人員時。解決方案需要更加完整,並為低功耗 IoT 裝置實現連續 Wi-Fi 連線能力。

本文將說明開發人員能如何使用 Dialog Semiconductor 無線系統單晶片 (SoC) 元件內建的低功耗功能,進行連續 Wi-Fi 連線實作。

支援行動裝置 Wi-Fi 連線的挑戰

對於各種根據個人行動產品、智慧家庭裝置、大樓自動化系統及其他許多裝置所打造的 IoT 應用,Wi-Fi 通常兼具這些應用中所需要的普及性和效能特性。然而,Wi-Fi 子系統以往的電流消耗量相對較高,使得電池供電型 IoT 裝置的開發人員,不得不犧牲這種元件的電池續航力或訊號強度。

傳統 Wi-Fi 解決方案的高功率要求,使 IoT 開發人員面臨更多挑戰。舉例來說,當既要求 Wi-Fi 連線性,又要求更長電池續航力時,可能會增加設計的大小和複雜度,以便容納較大的電池。對於可能無法選擇較大電池的穿戴式裝置或許多 IoT 裝置,嘗試藉由降低 Wi-Fi 訊號強度及相關的功耗,來增加電池續航力可能並不可行。

除了這些顧慮之外,在典型的 Wi-Fi 訊號環境中,因為多重路徑干擾和其他無線射頻 (RF) 訊號特性,訊號強度可能會有很大的差異,IoT 開發人員也面臨這種環境的實際限制。在筆記型電腦等應用中,消費者只要將筆記型電腦,移到另一個 Wi-Fi 訊號更好的位置即可。相較之下,智慧鎖或家電元件無論安裝在何處,都需要維持可靠的連線能力和穩健的效能。

為了支援更長的電池續航力和穩定的 Wi-Fi 訊號強度,開發人員通常會充分利用多數進階處理器、無線電和其他複雜硬體元件中提供的低功耗睡眠模式。藉由儘量延長耗電元件處於低功耗模式下的時間,開發人員可以實作出延長系統設計電池續航力、對系統功能的影響通常很小的設計。在這些設計中,低功耗計時器可能會定期短暫喚醒系統,以在返回睡眠模式之前讀取感測器並無線傳輸感測器資料。

不過,對於某些 IoT 應用,IoT 裝置需要持續連線至 Wi-Fi 網路,確保快速回應使用者透過行動應用程式、桌面軟體甚至其他元件所發出的命令。例如,智慧家庭中的智慧鎖、燈和開關需要持續連線,才能即時回應使用者的命令。遲遲等待計時器型元件被喚醒、偵測命令,最後將門解鎖或開燈,這是使用者無法接受的事。

Dialog Semiconductor 的 DA16200 SoC 及相關模組,提供有效的低功耗解決方案,能支援對連續 Wi-Fi 連線和更長電池續航力的要求。

使用無線 SoC 實作 Wi-Fi 連線

DA16200 SoC 專為電池供電型 IoT 設計打造,結合 Arm® Cortex®-M4F 和一個執行全網路堆疊的完整 Wi-Fi 無線電子系統,因此不需要外接網路處理器或主機處理器,即能提供堆疊功能。除了無線電子系統,此元件還整合了 IoT 設計中通常需具備的完整功能區塊和介面組,請見圖 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 控制器來存取,透過系統匯流排進行一般資料存取時都不會顯示此資料。

為了協助開發人員滿足不斷成長的連線元件安全需求,DA16200 SoC 整合多種安全機制,包括用於先進加密標準 (AES)、安全雜湊演算法 (SHA) 及其他密碼的加密引擎,並支援傳輸層安全性 (TLS) 通訊協定。此元件中還包含 Arm TrustZone CryptoCell-312 (CC312) 安全性智慧財產 (IP)。CC312 專為低功耗元件設計,支援安全啟動並能針對安全應用提供信任根。

此元件採用全方位 RF 區塊,因此可簡化 Wi-Fi 連線。除了內建 802.11 媒體存取控制器 (MAC) 和 802.11b/g/n 實體 (PHY) 層,無線電子系統中還包含一個晶片上收發器,此收發器內建功率放大器 (PA) 和低雜訊放大器 (LNA),因此不需要外部主動元件。操作時,DA16200 的 Arm Cortex-M4F 處理器會執行嵌入式傳輸控制通訊協定/網際網路通訊協定 (TCP/IP) 堆疊,卸除系統主機處理器的連線操作負載。

為了替各種不同的區塊供電,包括 RF 區塊,DA16200 SoC 將 DC-DC 轉換器、低壓降 (LDO) 穩壓器和電源開關整合在一起。此轉換器和低壓降穩壓器,由該元件的即時時脈 (RTC) 區塊所管理,會從單一 VBAT 電池電源產生全部所需的電軌。DC-DC 轉換器從 VBAT 產生用於 RF 區塊和數位低壓降穩壓器的 1.4 V 電壓,I/O 低壓降穩壓器則產生出外接快閃記憶體和元件通用 I/O (GPIO) 所需要的 1.8 V 電壓,請見圖 2。

Dialog Semiconductor 的 DA16200 SoC 電源管理單元示意圖圖 2:DA16200 SoC 的電源管理單元,控制著此 SoC 的整合式電源元件,這些電源元件為 SoC 獨立的電源域提供電壓。(圖片來源:Dialog Semiconductor)

DA16200 SoC 的電源管理單元控制著這些獨立電源域的供電,作為管理元件中三種低功耗 (睡眠) 模式的一部分:

  • 睡眠模式 1 以 0.2 μA 提供最低功率的運作型態:在此模式中,此元件電源主要為關閉,但會在 150 ms 內喚醒,以在外部觸發訊號傳送至 SoC 的兩個喚醒引腳或幾個數位 I/O 的其中一個時,回應外部觸發訊號,或者在類比輸入訊號超過預先定義的閾值時喚醒。
  • 睡眠模式 2 僅消耗 1.8 μA,同時保留 RTC 功能:在此模式下,SoC 會在不到 100 ms 的時間內喚醒,藉此回應外部喚醒事件,或在編程的內部計時器完成時喚醒。
  • 睡眠模式 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 的軟體架構提供一套完整的系統和應用程式服務,以支援 IoT 裝置中的標準 Wi-Fi 連線能力。(圖片來源:Dialog Semiconductor)

連續 Wi-Fi 連線是結合使用 DPM Manager 和 NetX Duo TCP/IP 資料庫實作而成。NetX Duo 資料庫提供 TCP 保持連線功能,此功能會將不含任何數據的 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 或與 DPM Manager 互動。睡眠模式 3 的進入和退出,採用 DA16200 DPM 的技術進行透明化處理。

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 監測在內,這整個序列能實現連續 Wi-Fi 連線能力,而且平均消耗電流一般少於 50 μA。

將 SoC 從睡眠模式喚醒以處理其他操作時,可以使用這個設計模式。例如,清單 2 應用範例顯示了使用 DA16200 RTC 喚醒 SoC 以處理資料的情形。

複製
#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:開發人員可使用幾個 DPM API 函數調用請求,透過 DA16200 來實作低功耗計時器型功能,確保在 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 Mbit NOR 記憶體 IC,及僅僅幾個額外元件,開發人員即可實作出 Wi-Fi 型安全 IoT 設計,請見圖 4。

Dialog Semiconductor DA16200 SoC 示意圖 (按此放大)圖 4:Dialog Semiconductor DA16200 SoC 具有廣泛的整合式功能,只需一個外接序列快閃記憶體及最少的額外元件,就能實作出完整的 Wi-Fi 系統。(圖片來源:Dialog Semiconductor)

如果開發人員使用 DA16200 SoC 進行設計並希望加快開發速度,可以改用 Dialog Semiconductor 模組,屆時將不需要實作 SoC 的硬體介面。除了 DA16200 SoC,這種模組還包含 4 MB 的快閃記憶體、RF 元件,並可選用板載晶片天線 (DA16200MOD-AAC4WA32) 或用於外接天線的 u.FL 連接器 (DA16200MOD-AAE4WA32)。這種模組完整通過 FCC、IC、CE 和其他法規機構的認證,尺寸為 13.8 x 22.1 x 3.3 mm,為實作低功耗連續 Wi-Fi 連線提供立即可用的硬體解決方案。

開發人員如想探索連續 Wi-Fi 連線能力,及採用 DA16200 SoC 快速開發 IoT 設計的原型,現在就能利用 Dialog Semiconductor DA16200MOD-DEVKT 開發套件。此套件結合 DA16200MOD 模組和 USB 介面、按鍵及連線,可加快 DA16200 型設計的開發和除錯。

結論

維持連續 Wi-Fi 連線的能力,是筆記型電腦和其他連線產品固有的特點。但是,對於穿戴式裝置和其他電池供電的 IoT 裝置,傳統 Wi-Fi 解決方案的電力要求,使得連續 Wi-Fi 連線完全行不通,開發人員通常需犧牲某方面的元件功能、效能或電池續航力。

Dialog Semiconductor 的 SoC 提供完整的 Wi-Fi 解決方案,能以最少消耗電流提供連續 Wi-Fi 連線能力。如本文所示,使用此 SoC 及其相關模組,開發人員能快速實作安全的電池供電型元件,為使用者提供連續 Wi-Fi 連線的優點,同時滿足使用者對更長電池續航力的期望。

DigiKey logo

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。

關於作者

Image of Stephen Evanczuk

Stephen Evanczuk

Stephen Evanczuk 撰寫電子產業的相關資訊已有超過二十年的經驗,涉及的主題多元,涵蓋硬體、軟體、系統以及包含 IoT 在內的應用。他以神經元網路為研究主題,取得神經科學博士學位,並且在航太產業,針對廣泛運用的安全系統和演算法加速方法進行研究。目前,在撰寫科技和工程文章之餘,他投入辨識和推薦系統的深度學習應用。

關於出版者

DigiKey 北美編輯群