wiminet的個(gè)人空間 http://selenalain.com/space-uid-174231.html [收藏] [復制] [RSS]

博客

低功耗休眠喚醒之三級環(huán)形架構

已有 550 次閱讀2024-4-29 12:43 |個(gè)人分類(lèi):無(wú)線(xiàn)低功耗技術(shù)

前言

無(wú)線(xiàn)通信技術(shù)相關(guān)應用中,用戶(hù)體驗一直是用戶(hù)關(guān)系的重點(diǎn)。無(wú)線(xiàn)通訊距離近一點(diǎn),通訊速度慢一點(diǎn),這都不是致命的問(wèn)題,在某些場(chǎng)合下是完全可以接受的,甚至 本身就是項目的技術(shù)需求;但是有一些設計缺陷卻會(huì )嚴重影響用戶(hù)體驗的,一旦大面積的出現,基本上可以判定為產(chǎn)品失敗了;總結起來(lái),大家都無(wú)法忍受的問(wèn)題主要是下述兩個(gè) 


1)通訊失敗或者數據傳輸錯誤


2)電池消耗快,很快沒(méi)電

 

01

業(yè)內問(wèn)題

 

在絕大部分用戶(hù)的心目中,無(wú)線(xiàn)通訊本身就不如有線(xiàn)通訊技術(shù)穩定,如果一款產(chǎn)品還經(jīng)常傳輸失敗,試問(wèn)用戶(hù)會(huì )對這款產(chǎn)品有信心嗎?

 

無(wú)線(xiàn)產(chǎn)品配合上電池供電,才能充分發(fā)揮無(wú)線(xiàn)技術(shù)可以隨意移動(dòng)的優(yōu)勢,因此很多的無(wú)線(xiàn)產(chǎn)品經(jīng)常和低功耗或電池供電有非常緊密的聯(lián)系;一旦這個(gè)產(chǎn)品電池消耗很快,那么必然將是其便攜性,移動(dòng)性大打折扣。

 

當然,在理論設計上產(chǎn)品的電池壽命肯定是非常長(cháng)的,但是真正實(shí)現起來(lái)卻比較困難,很多的產(chǎn)品設計電池壽命有 5 年之久,但是現場(chǎng)運行不到一年,甚至幾個(gè)月就完全沒(méi)電了,這種問(wèn)題的發(fā)作經(jīng)常沒(méi)有任何規律,測試時(shí)間上又以年/月為單位,且呈現出偶發(fā)特性,定位起來(lái)極其困難,困擾了不少的無(wú)線(xiàn)通訊技術(shù)工程師,被認為是業(yè)界的重要難題之一。

 

02

技術(shù)難點(diǎn)

 

其實(shí)電池快速耗電和通訊不穩定說(shuō)到底都是軟件設計,特別是軟件架構方面的設計問(wèn)題;軟件架構上的不完整或混亂,導致射頻芯片的控制不準確甚至部分狀態(tài)失去控制才是問(wèn)題的源頭。既然大家都認為功耗的管理是一個(gè)難題,那么到底難在哪些環(huán)節呢?

 

1 產(chǎn)品的低功耗休眠喚醒設計,存在系統業(yè)務(wù)和應用層業(yè)務(wù)兩種:在系統層面講,主要有OTA無(wú)線(xiàn)升級、遠程診斷、遠程控制(無(wú)線(xiàn)I/O)等;在應用層中則是回調機制、關(guān)閉端口上拉、檢測用戶(hù)按鍵、關(guān)閉工作指示燈等。系統層內容屬于整個(gè)產(chǎn)品的軀干和骨架,通常需要交給經(jīng)驗豐富的工程師負責,因為涉及精密的規則和龐大的算法問(wèn)題,需要較為強大的抽象能力和全面的視角。而應用層則是面向用戶(hù)的,體現在軟件部分則相對比較簡(jiǎn)單。

 

2 系統存在多種喚醒源:UART、GPIO、RTC、Timer等,這些喚醒源中斷方式和清除規則略有不同,但是進(jìn)入和退出休眠需要遵循相同的路徑,因此其控制邏輯需要做一定的抽象化設計,具有一定的挑戰。

 

3 基于RTC定時(shí)器的后臺背景活動(dòng): 某些延遲操作,比如開(kāi)啟一個(gè) LED 指示燈,十秒之后關(guān)閉,此時(shí)如果處理器全速運行就為了運行這一功能,是不太經(jīng)濟的;通常是設置一個(gè)狀態(tài)標志,然后啟動(dòng)RTC定時(shí)器,并將處理器切入休眠狀態(tài),計時(shí)的時(shí)間到了之后會(huì )產(chǎn)生一個(gè)RTC中斷,處理器可以在這種中斷到達的時(shí)候關(guān)閉這個(gè)LED 指示燈。類(lèi)似這些延遲操作,往往還會(huì )和其他的業(yè)務(wù)狀態(tài)交織在一起,控制邏輯需要精確設計,稍有不慎就會(huì )失去控制。

 

4 被未知的電磁波干擾,吵醒 , 誤喚醒等假喚醒行為:無(wú)線(xiàn)電波由于空間開(kāi)放的特性,其喚醒動(dòng)作往往伴隨著(zhù)少量的模擬特性,偶爾會(huì )被一些未知的信號給誤觸發(fā),處理器被喚醒之后, 需要對喚醒后的實(shí)時(shí)參數做一些分析計算,對喚醒源進(jìn)行甄別篩選,如果不是有效的喚醒,需要提前終止業(yè)務(wù)邏輯。

 

5 存在多種不同模式的睡眠深度的低功耗模式:處理器通常支持多種不同的睡眠 深度, 對應不同的功耗等級。不同睡眠模式下,處理器可以激活的外設不一樣的,在喚醒之后,有些外設需要再次初始化之后才可以重新投入工作,只有深入了解處理器的工作特性,才能控制好處理器不同睡眠模式 切換工作。

 

6 雙芯片模式(獨立的無(wú)線(xiàn)通訊模塊)模式和單芯片模式(協(xié)議棧和應用層業(yè)務(wù)運行在一個(gè)芯片上),需要統一的編程接口。 如果維持兩套不同的編程接口,代碼分支龐大不說(shuō),還很容易產(chǎn)生歧義,為后續的產(chǎn)品維護和架構升級帶來(lái)困難。


綜合以上難點(diǎn),需要解決如此復雜的功耗控制要求,必須分而治之,采用分層的控制策略;行之有效的解決方案就是如下的內--外,三級環(huán)形架構。

 

03

三級環(huán)形架構

(圖1

上圖是一個(gè)電子價(jià)簽的主程序框架?梢钥闯鲈摮绦蛑饕譃槿齻(gè)主線(xiàn)程,分別是協(xié)議棧的主線(xiàn)程;低功耗休眠與喚醒的主線(xiàn)程與墨水屏應用業(yè)務(wù)的主線(xiàn)程。這三個(gè)主線(xiàn)程在同一個(gè)層級平行運行,具有相同的調度優(yōu)先級。

 

局放圖

(圖2

我們將低功耗休眠與喚醒的主線(xiàn)程做局部放大,如上所示。

圖中的三級環(huán)架構是休眠喚醒管理模塊的核心,是整個(gè)休眠喚醒功能的局部放大。如圖所示,由內環(huán)、中環(huán)、外環(huán),三部分構成。因為考慮到在無(wú)線(xiàn)通信中,各種事件的復雜程度及其處理方式,分為以上三環(huán)。最內部一環(huán)主管電磁波喚醒,中層環(huán)主管GPIO喚醒、RTC喚醒、UART喚醒,最外層環(huán)則啟動(dòng)了整個(gè)協(xié)議棧以及業(yè)務(wù)層,面向用戶(hù)進(jìn)行交互。

三級環(huán)的目的突出的是分層做事原則。在內環(huán)中只進(jìn)行電磁波喚醒的工作,這里主要有三部分,查詢(xún)中斷、分析中斷狀態(tài)、無(wú)線(xiàn)電波處理。當信號到達這一環(huán),會(huì )根據信號類(lèi)型分析是否進(jìn)行無(wú)線(xiàn)電波的喚醒處理。

如果不是無(wú)線(xiàn)電波喚醒,則跳出該層,進(jìn)入中環(huán)處理。這里的信號類(lèi)型分析和處理是根據不同事件、不同時(shí)刻產(chǎn)生的耦合性而定的。

在中環(huán),GPIO 喚醒是特定產(chǎn)品的喚醒模式;RTC 喚醒通常用于一些低優(yōu)先級的后臺任務(wù),比如檢測是否漏電或者執行一些延遲 I/O 操作;UART   串口喚醒 則是針對用戶(hù)處理器。

外環(huán)則是面向用戶(hù)的層級,如需要啟動(dòng)主程序固件升級或者業(yè)務(wù)邏輯,比如墨水屏的刷新屏幕顯示內容等,則程序會(huì )被全面喚醒,此時(shí)就在外環(huán)中進(jìn)行。

 

04

環(huán)形架構的優(yōu)勢


由外環(huán)、中環(huán)到內環(huán),視覺(jué)效果方面是越來(lái)越小的,越來(lái)越縮放的。自然在功能性方面也是越來(lái)越小,越來(lái)越簡(jiǎn)潔的過(guò)程。三級環(huán)從外到內,能做的    就越來(lái)越少,體現在軟件代碼方面就是,代碼更少,功能性更加單一,邏輯更加清晰,運行更穩定。從而更加節省功耗。


為什么功耗更加節約?將電磁波喚醒獨立拆分,做成了獨立的單元結構,是出于這樣的考慮的。當信號指令到達三級環(huán),內環(huán)首先進(jìn)行判定,是否需要電磁波喚醒,判定是,就進(jìn)行電磁波喚醒;判定不是,則跳入中環(huán)選擇喚醒類(lèi)別,內環(huán)進(jìn)入休眠。


考慮到事件的復雜性、多樣性,需要從不同屬性、不同時(shí)間等多角度考量休眠喚醒的執行,通俗點(diǎn)說(shuō)就是“跟我相關(guān)起來(lái)干活,跟我無(wú)關(guān)繼續睡覺(jué)”,這樣的三級環(huán)設計針對性很強,在需要單一模式喚醒時(shí),只需要調動(dòng)少數軟件資源和內部耗能就可以完成,完成相關(guān)作業(yè)后繼續休眠,等待下一輪指令喚醒。從而這樣的三級環(huán)設計是一款更加節約功耗的方案。

 

05

回調函數


// *****************************************************************************
// Design Notes:  
// -----------------------------------------------------------------------------
char OnHostWakeup_Request( unsigned char iStatus, char iCause, char iReqAck )
{      
   unsigned char iRetVal;
   
   // The callback status
   switch ( iStatus )
   {
   
 case  WIMINET_SLEEP_CALL_INIT:
      {
         OnWakeupRequest_Init( iCause, iReqAck );
      }
      
 break ;
      
   
 case  WIMINET_SLEEP_CALL_OPEN:
      {
         OnWakeupRequest_Open( iCause, iReqAck );
      }
      
 break ;

   
 case  WIMINET_SLEEP_CALL_WORK:
      {
         OnWakeupRequest_Work( iCause, iReqAck );
      }
      
 break ;

   
 case  WIMINET_SLEEP_CALL_STOP:
      {
         OnWakeupRequest_Stop( iCause, iReqAck );         
      }
      
 break ;

   default:
      {
         iRetVal = 0X00;
      }
      
 break ;      
   } 
   
   // The 
 return  status
   
 return  iRetVal;


以上是一個(gè) SoC 產(chǎn)品方案,回調函數的標準樣本,通常需要實(shí)現“系統剛剛喚醒”,“已經(jīng)完成初始化”,“執行用戶(hù)任務(wù)”,“即將進(jìn)入休眠”等幾個(gè)重要的通知時(shí)刻:

系統剛剛喚醒  系統運行在三級環(huán)的內環(huán),處理器剛剛被中斷喚醒,需要啟用系統層級別的外設,比如 SPI 總線(xiàn)等;

已經(jīng)完成初始化: 系統已經(jīng)切換至三級環(huán)的外環(huán),控制權準備釋放給用戶(hù)程序,通常在此時(shí)初始化用戶(hù)任務(wù);

執行用戶(hù)任務(wù)  系統運行在三級環(huán)的外環(huán),此時(shí)協(xié)議棧程序也在同層級平行運作,用戶(hù)程序執行完了之后,需要釋放控制權給系統,通知系統進(jìn)入睡眠模式

即將進(jìn)入休眠  系統運行在三級環(huán)的中環(huán),所有的數據都已經(jīng)發(fā)送完畢或者超時(shí)終止,即將重新進(jìn)入睡眠模式,通知用戶(hù)關(guān)閉外設,執行任務(wù)的清理或者重置工作。

對于不太復雜的系統,通常僅僅需要實(shí)現上述四個(gè)通知的回調函數即可,其余的通知可以不做處理器;對于更加復雜的系統,可以根據需要實(shí)現其他更多的回調通知。  

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
返回頂部
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页