最近要更換平板電腦中wifi的firmware,所以老是在和wifi串連後的電流打交道,現在總結一下。 wifi串連後,當平板電腦滅屏以後,根據Settings中配置的休眠策略,wifi可能會中斷連線。 當在Settings中配置休眠策略為“始終串連”時,wifi在平板滅屏後,不會中斷連線,這樣可能會有app在後台進行通訊, 導致平板無法休眠,電流就比較高。 當在Settings中配置的休眠策略為“中斷連線”時,wifi會在平板滅屏17分鐘後中斷連線,這17分鐘是這麼定下來的,在 第15分鐘的時候,wifi service會判斷當前是不是“緊急電話模式”(電話會有),如果是,就立即中斷連線;如果不是, 則在2分鐘後中斷連線。但是是否能夠中斷連線還需要看當前是否有app會拿著wifi wake lock,如果有app持有這個鎖, 當前也無法中斷連線。這樣也會導致電流比較高。 在滅屏與中斷連線之間的十幾分鐘內,如果是正常情況下,當平板的cpu休眠後,平均電流應該只比不開啟wifi的情況高 1ma(這個值是wifi晶片休眠電流);但是經常在這種情況下測量的平均電流值會比1ma要高,這就需要我們分析原因了。 在此記錄下與此時電流有關的一些點,可能還不完全,以後如果再發現了,再進行補充。 1.wifi firmware wifi firmware 是與wifi休眠時候電流高關係最大的一個,而且由於我們無法知道裡面的邏輯,所以只能請求廠家 進行支援。 2.dtim值 dtim值會影響wifi firmware起來接收beacon報文的行為,它代表wifi晶片會每隔幾個beacon的時間間隔醒來接收 一次beacon報文,一般設定為3。如果dtim值設定較小,比如為1,wifi晶片就會醒來比較頻繁,導致電流比預計的要高; 如果dtim值設定較大,比如5,可能會導致當wifi休眠後丟包比較嚴重,比如你去ping平板,可能會有ping不通的現象。 3.SDIO引腳 wifi晶片的SDIO引腳配置錯誤也會導致在休眠後電流較高,所以需要檢查SDIO是否配置正確,當休眠的時候, 引腳是不是錯誤的被拉高或者拉低。(這一項我也不太明白,需要以後再學習一下) 4.gsf gsf是google的服務架構,它在wifi串連和未串連兩種情況下的行為是不一樣的。如果wifi串連,它會每隔一段時 間就喚醒一次cpu,嘗試去串連google的伺服器,也會導致平均電流較高。 5.其他app 如果有app持有rtc_wakeup的定時器,此app也會喚醒cpu進行操作,導致平均電流較高。