作者: Qoitech
雖然 USB 已經(jīng)成為大多數(shù)外設(shè)的通用接口,但是 UART 仍然在使用,甚至在嵌入式系統(tǒng)中仍起著關(guān)鍵作用——用于從 GPS 模塊到 Raspberry Pi 和 Arduino 等板卡的調(diào)試。
但是當(dāng)我們推進(jìn)到超低功耗設(shè)計(jì)的極限時(shí),開(kāi)發(fā)人員經(jīng)常會(huì)有疑問(wèn):UART 會(huì)是無(wú)聲的電池殺手嗎?簡(jiǎn)而答之:否也,不必如此。像所有好的工具一樣,關(guān)鍵在于如何實(shí)現(xiàn)。期間緣由讓我們細(xì)細(xì)道來(lái)。
盯緊 TX/RX 漏電電流
防止非必要漏電的簡(jiǎn)單之法就是[從 TX 和 RX 信道解決任何漏電問(wèn)題]。盡管高泄漏并不很常見(jiàn),但通常最好提前檢查并解決潛在問(wèn)題,以免后面出現(xiàn)意外漏電。
以低功耗思維編寫(xiě)并運(yùn)行代碼
將 UART 看一把鋒利的瑞士軍刀,開(kāi)發(fā)時(shí)用起來(lái)很就手,但攜帶時(shí)并不需要所有時(shí)間都將其打開(kāi)。在代碼中使用 #define,調(diào)試時(shí)將 UART 打開(kāi),設(shè)備生產(chǎn)操作時(shí)將其關(guān)閉,才是明智之舉。這是一個(gè)小訣竅,但能讓你在實(shí)際工作中免于噩夢(mèng)纏身。
試想一下:你和你的團(tuán)隊(duì)精力都放在最大限度降低功耗上,正在運(yùn)行連續(xù)的電流檢測(cè),看看有沒(méi)有取得進(jìn)展。開(kāi)發(fā)時(shí),你將 [UART 設(shè)置成調(diào)試時(shí)才打開(kāi)],接受臨時(shí)電源中斷。但是隨后突然有人將該代碼合并到主分支中,此時(shí)因?yàn)?UART 仍在啟用中,就會(huì)將該設(shè)置通過(guò)空中下載更新到成千上萬(wàn)的設(shè)備中。你曾經(jīng)高效的設(shè)計(jì)(如街機(jī))突然之間耗盡電池,此時(shí)你就要面對(duì)成千上萬(wàn)怒氣沖沖的客戶了。
怎么辦?給[連續(xù)集成系統(tǒng)]設(shè)置電流消耗基準(zhǔn)。通過(guò)這個(gè)方式,你可以在發(fā)生災(zāi)難性錯(cuò)誤前發(fā)現(xiàn)這樣的問(wèn)題??梢詫⑵淇闯梢粋€(gè)自動(dòng)化的安全網(wǎng),在代碼到達(dá)生產(chǎn)端前時(shí)刻檢查有無(wú)過(guò)大電流。
確保關(guān)閉一切
啟用 UART 會(huì)激活軟件多個(gè)部分,包括各種 MCU 阻斷和時(shí)鐘。MCU 通常設(shè)計(jì)成默認(rèn)所有功能都是打開(kāi)的以方便進(jìn)行開(kāi)發(fā)。但在 MCU 進(jìn)入休眠模式前禁用非必要組件很重要。如果 UART 時(shí)鐘仍被啟用,則可能會(huì)阻止 MCU 進(jìn)入其最深的休眠狀態(tài),造成功耗過(guò)高。檢查你的時(shí)鐘樹(shù)并確保所有鏈接到 UART 的組件均在不需要時(shí)被恰當(dāng)?shù)仃P(guān)閉。
Otii 實(shí)驗(yàn)操作
讓我們比較一下在來(lái)自 [Seeed Technology]的 [Seeed Studio XIAO nRF52840] 上運(yùn)行兩個(gè)固件版本。我們準(zhǔn)備了一個(gè)示例腳本,用于初始化模塊、設(shè)置閃存、運(yùn)行一個(gè)簡(jiǎn)短的 LED 閃爍序列,然后將該模塊置于最低功率模式。一個(gè)版本在運(yùn)行時(shí)啟用 UART,另一個(gè)在運(yùn)行時(shí)不啟用 UART。用 [Qoitech]的 [Otii Ace Pro],我們測(cè)量了電流消耗以對(duì)兩個(gè)版本在不同電壓水平下的功耗進(jìn)行分析和比較。
在圖 1 中,我們看到設(shè)備主動(dòng)發(fā)送 UART 消息,而圖 2 則顯示 MCU 處于休眠模式。藍(lán)線表示 UART 啟用,而黃線表示禁用。差異顯示了 UART 對(duì)功耗的影響。
圖 1:活動(dòng)模式 SeeedStudio XIAO nRF52840 設(shè)備的 UART 通信 | 啟用(藍(lán)色圖) | 禁用(橙色圖)。(圖片來(lái)源:Qoitech)
圖 2:低功耗模式 XIAO nRF52840 設(shè)備(圖中選定部分)的UART 通信 | 啟用(藍(lán)色圖) | 禁用(橙色圖)。(圖片來(lái)源:Qoitech)
在活動(dòng)模式時(shí),平均電流消耗從 460 μA 增加到 1.34 mA(如圖 1 所示)。在休眠模式時(shí),電流消耗從 2.27 μA 變到 2.19 μA(圖 2)。盡管這看起來(lái)差異不大,但物聯(lián)網(wǎng)設(shè)備典型都是長(zhǎng)休眠期,會(huì)對(duì)電池壽命造成明顯差異。很明顯,此固件針對(duì) UART 禁用進(jìn)行了優(yōu)化。
使用 Otii 估算電池壽命
為展示對(duì)電池壽命的影響,我們使用了 [Otii Desktop App] 的 [Battery Life Estimator](電池壽命估算器)。我們假定每個(gè)小時(shí)有一個(gè)活動(dòng)期間,當(dāng)設(shè)備喚醒時(shí),運(yùn)行閃爍序列,然后休眠近 3600 秒。
在圖 3 中,UART 處于禁用狀態(tài),而在圖 4 中,UART 處于啟用狀態(tài)。從中我們看出是否使用 UART 對(duì)電池壽命有著明顯影響。
圖 3:禁用 UART 通信時(shí)的電池壽命估算。(圖片來(lái)源:Qoitech)
圖 4:?jiǎn)⒂?UART 通信時(shí)的電池壽命估算。(圖片來(lái)源:Qoitech)
差距相當(dāng)大!當(dāng)啟用 UART 時(shí),預(yù)計(jì)電池壽命將從 5.9 年縮短至 11.6 天。
關(guān)鍵之處是確保在 MCU 進(jìn)入休眠模式之前關(guān)閉與 UART 相關(guān)的所有功能。使用 [Otii 產(chǎn)品套件] 將這一設(shè)置集成到持續(xù)集成流程中,將有助于防止啟用 UART 后的意外發(fā)布,因?yàn)檫@可能會(huì)大大縮短設(shè)備的電池壽命。
審核編輯 黃宇
-
mcu
+關(guān)注
關(guān)注
146文章
17961瀏覽量
366166 -
uart
+關(guān)注
關(guān)注
22文章
1275瀏覽量
103830 -
電池
+關(guān)注
關(guān)注
84文章
11070瀏覽量
134892
發(fā)布評(píng)論請(qǐng)先 登錄
嵌入式UART串口調(diào)試與嵌入式串口調(diào)試連接概述:調(diào)試接口與pc的交互程序的開(kāi)發(fā)
嵌入式設(shè)備的發(fā)展:解決復(fù)雜的設(shè)計(jì)挑戰(zhàn)
嵌入式外圍設(shè)備有哪些?
所有現(xiàn)代設(shè)備中都存在物理嵌入式系統(tǒng)是為什么?
基于μCOS-II嵌入式系統(tǒng)的低功耗開(kāi)發(fā)

嵌入式移動(dòng)終端內(nèi)置WIFI的低功耗設(shè)計(jì)

嵌入式系統(tǒng)設(shè)計(jì)中的低功耗技術(shù)
嵌入式實(shí)時(shí)操作系統(tǒng)原理與最佳實(shí)踐
基于嵌入式Linux演示I2C設(shè)備調(diào)試
嵌入式Linux的低功耗策略

用于嵌入式設(shè)備的JavaScript

嵌入式產(chǎn)品的低功耗調(diào)試實(shí)用技巧

評(píng)論