MTK Android Driver:UART測試
阿新 • • 發佈:2019-02-19
轉載請註明出處:http://blog.csdn.net/cbk861110/article/details/42583469
1.uart口配置: 將uart log和meta配置埠配置為其他埠,空出來的uart1專門用作此功能通訊除錯。備註:硬體主機板上只有uart1口能夠飛線出來除錯。修改方法: 參考:[FAQ07420]如何設定吐uart log的uart口 JB5.MP之前的版本: alps/medaitek/custom/[$project]/preloader/inc/cust_bldr.h #define CFG_UART_LOG (UART4) //(UART1) #define CFG_UART_META (UART4) //(UART1)
JB5.MP之後的版本:
alps\mediatek\custom\$project\preloader\cust_bldr.mak
CFG_UART_LOG :=UART4 #UART1
CFG_UART_META :=UART4 #UART1
2.提升UART port的permission,同樣以UART1為例
alps/medaitek/config/[$project]/init.project.rc中,新增:
chmod 0666 /dev/ttyMT0
chown system system /dev/ttyMT0
uart物理埠與系統裝置名稱對應關係:
uart1--/dev/ttyMT0
uart2--/dev/ttyMT1
uart3--/dev/ttyMT2
uart4--/dev/ttyMT3
3.平臺相關serialport api程式碼:
上層api:
alps\frameworks\base\core\java\android\hardware\SerialPort.java
JNI定義:
alps\frameworks\base\core\jni\android_hardware_SerialPort.cpp
系統demo apk:
alps\frameworks\base\tests\SerialChat
備註1:此api目前驗證還不ok,還在持續確認中;
備註2:驗證可以除錯ok的api機制可以參考:android_serialport_api,這個框架被託管在:
https://code.google.com/p/android-serialport-api/ 谷歌的程式碼庫,無奈國內無法下載
4.測試方法:
1.)確認串列埠號,波特率,校驗方式,停止位等所需的設定是否正確
1.uart口配置: 將uart log和meta配置埠配置為其他埠,空出來的uart1專門用作此功能通訊除錯。備註:硬體主機板上只有uart1口能夠飛線出來除錯。修改方法: 參考:[FAQ07420]如何設定吐uart log的uart口 JB5.MP之前的版本: alps/medaitek/custom/[$project]/preloader/inc/cust_bldr.h #define CFG_UART_LOG (UART4) //(UART1) #define CFG_UART_META (UART4) //(UART1)
2.)短接TX和RX看是否可以進行自發自收
3.)如果是連線電腦通過串列埠除錯工具/超級終端除錯,請確認串列埠線是否可以正常接收,傳送資料。可以短接,看能不能自發自收。
5.硬體焊線 硬體焊出TX RX GND三根線連線外圍通訊裝置,用以通訊除錯。 6.串列埠log列印方法: 1)插入UART線後,電腦會自動安裝對應驅動,我的電腦-右鍵-裝置管理器-埠:USB-to-Serial Comm Port(COM14),在此可以查詢到UART對應的電腦埠號; 2) 串列埠列印工具 a. 電腦自帶的超級終端:使用方法: "開始"選單-所有程式-附件-通訊-超級終端-彈出框中填寫 名稱&埠號,可以自動生成應用彈出介面,可以用來顯示列印UART串列埠資訊; b)“串列埠工具”:網上下載 c) SecureCRT:網上下載,使用方法: connet->右鍵->properties 設定屬性: 設定通訊型別為串列埠:Protocol:Serial 設定埠配置:Serial:(下列配置資料僅為參考) Port:COM14 波特率:9600 校驗:none 停止位:1 資料位:8 流控制:NULL 7.andori uart log eng版本也無法吐出的分析 ENG版本在開機到 Launcher之後自動關閉UART Log,從而使幾乎大部分的測試在eng版本和user版本上得到一致的測試結果。 有兩種種方法可以在eng版本上臨時開啟UART log(重啟之後失效): 在超級終端視窗按下鍵盤的任何一個按鍵就可以讓UART log繼續吐。此種方式需 要UART的TX和RX都要連線好。 通過修改proc引數的方式: adb shell echo 1 > /proc/mtprintk 還有一種方法可以在eng版本上面永久性開啟UART Log (重啟之後繼續有效): 通過修改Property的方式:adb shell setprop persist.uartconsole.enable 1 (通過getprop persist.uartconsole.enable可查詢屬性值) 參考: [FAQ11402]JB9/KK1版本開機動畫完之後UART log停止輸出問題 [FAQ10087]為什麼進入Launcher介面之後UART Log就不吐了 8.andori uart log user版本如何開啟 參考: [FAQ02495]如何在Android user 版本下開啟UART log [FAQ03891]如何在User版本開啟串列埠(Uart),抓取 上層Log,開啟輸入控制檯 9.android 串列埠通訊型別: 上圖中用與Android與串列埠裝置通訊的方案有四種: 第一種是直接用SDK的BluetoothSocket類來進行藍芽通訊,外部裝置再用藍芽轉串列埠進行控制。這種方式有較高延時,藍芽模組需要供電,低頻寬。 第二種是使用USB轉RS232方式(使用核心驅動和使用Android驅動兩種方式),這種方式不需要硬體改動,不需要另外的供電,延時很小且有較高頻寬。但是Android裝置需要硬體上支援USB Host介面(一般Android平板支援,Android手機一般是沒有的),另外可能需要root以改變/dev/ttyUSB0檔案許可權來載入一個核心模組。開發需要使用android_serialport_api。 第三種是最容易的方案,直接使用串列埠進行連線,但是這種方式相容性不好,只有少數裝置支援,而且串列埠不支援流控制(由Android提供的USB Host API決定的)。使用時也用android_serialport_api。 第四種是將Android作為USB從機,外部裝置作為USB主機與之通訊,這種方式幾乎與所有Android裝置相容(一般都有USB從口),無需root,低延遲,高頻寬。