1. 程式人生 > >休眠狀態下UART通訊服務異常

休眠狀態下UART通訊服務異常

有專案要求手機接收到串列埠TX資料指令點亮或關閉螢幕.
接收串列埠指令關閉螢幕沒有問題,而在黑屏休眠狀態下接收TX指令有問題,螢幕無法點亮,有時需要迴圈傳送多次TX指令才有響應。
連線USB除錯的時候,手機黑屏狀態下可以正常接收串列埠的TX端指令,螢幕可以正常亮。(USB除錯時CPU不休眠)

接收TX指令後的亮屏和滅屏方法:
PowerManager pm = (PowerManager) sContext.getSystemService(Context.POWER_SERVICE);
pm.wakeUp(SystemClock.uptimeMillis());//亮屏

pm.goToSleep(SystemClock.uptimeMillis());//滅屏  

而後與MTK溝通之後得知Uart喚醒目前不支援,建議外部喚醒用EINT pin。

涉及電路修改,一籌莫展之際突然來了想法,實現黑屏不進休眠狀態就可以了啊!
於是修改kernel/kernel/power/autosleep.c 在try_to_suspend 函式開始的時候直接return,測試後成功。

附:開機動畫完之後UARTlog停止輸出
UART LOG:
ADB Shell:adb shell setprop persist.uartconsole.enable 1
1. 在超級終端視窗按下鍵盤的任何一個按鍵就可以讓UART log繼續吐。此種方式需要UART的TX和RX都要連線好。
2. 通過修改proc引數的方式: adb shell echo 1 > /proc/mtprintk