【android】全志T3 android6.0串列埠6不能正常使用的問題
今天移植全志提供的android6.0sdk到我們自己的平臺上,在驗證相關功能時發現串列埠6無法正常進行收發,排除本身測試程式碼問題後,排查sdk,發現其提供的sdk中對於串列埠6的配置有坑,記錄下解決方法,希望幫助到其他人。
1、問題描述
sys_config.fex中配置了串列埠6,init.rc中增加其對應的讀寫許可權,然後編寫測試程式對串列埠進行,讀寫,發現無法收到測試程式寫入的資料,接收估計可以但是沒有繼續驗證,後面使用示波器測量發現串列埠6的tx上有一個持續的方波訊號!頻率大概32K,推測這個就是導致無法正常寫資料的原因。
2、排查過程
(1)、首先確認sys_config.fex中配置是否衝突;這部分主要時確認其他驅動或程式碼是否也用了這個IO口。我這一步正常,不存在IO衝突;
(2)、確認IO的複用功能是否配置正確;這部分主要是因為有的IO口一般存在多種複用功能,比如我使用的串列埠6的tx管腳(GPIOI12),本身支援IO口(又包含輸入和輸出兩種方式)、SPI0_MOSI、Uart6_Tx、CLK_OUT_A、EINT24等多種模式,這個可以從spec中查到,如果手上沒有spec,可以從sdk的kernel相關pin原始碼中查到複用配置(可以查閱如下部落格:http://blog.csdn.net/smilefyx/article/details/78860261)。我的這部分配置如下:
[uart6]
uart6_used = 1
uart6_port = 6
uart6_type = 2
uart6_tx = port:PI12<3><1><default><default>
uart6_rx = port:PI13<3><1><default><default>
[uart6_suspend]
uart6_tx = port:PA12<7><1><default><default>
uart6_rx = port:PA13<7><1><default><default>
從配置上這部分也沒有問題。但是從示波器輸出32K時鐘訊號,然後這個IO剛好有個CLK_OUT_A的複用,似乎可以找到關係,極有可能在某些地方這個IO口被作為時鐘輸出了;
(3)、查詢裝置樹中的是否有使用該IO作為預設配置;一般裝置樹會存放在核心原始碼的arch/arm/boot/dts/目錄下,一般以.dts為後最,這裡面存有一些通用或私有的配置,這寫配置可以被驅動或sys_config.fex中的配置覆蓋重寫,但是如果其沒有重寫的話就會用裝置樹中的預設資訊,這裡我找了T3平臺相關的幾個檔案,在sun8iw11p1-soc.dts中感覺發現了罪魁禍首,其內容如下:
/*
* Allwinner Technology CO., Ltd. sun8iw11p1 soc board.
*
*/
/dts-v1/;
#include "sun8iw11p1.dtsi"
/{
soc@01c00000 {
};
wlan:wlan {
compatible = "allwinner,sunxi-wlan";
clocks = <&clk_outa>;
wlan_busnum = <1>;
wlan_clk_gpio = <&pio PI 12 4 0 0 0>;
status = "okay";
};
bt:bt {
compatible = "allwinner,sunxi-bt";
status = "okay";
};
btlpm:btlpm {
compatible = "allwinner,sunxi-btlpm";
status = "okay";
};
gps:gps {
compatible = "allwinner,sunxi-gps";
clocks = <&clk_outb>;
status = "disabled";
};
};
看到wlan的配置了嗎?其中wlan_clk_gpio使用了PI12,複用模式為4,回顧上面的程式碼或複用說明,4即作為CLK_OUT_A輸出,所以wlan中使用了這個IO口用於輸出一個時鐘提供給wifi模組使用。
(4)、進一步驗證;上面感覺發現了罪魁禍首,但是還需要進一步確認,確認方式多種多樣,有幾種方案:A、禁用wifi看是否ok;B、.dts裝置樹中去掉這個配置或者改用其他IO口;C、sys_config.fex中wlan配置中配置wlan_clk_gpio為其他IO口。我驗證了A、B兩種方案都可以的,C理論上也沒問題,不過沒繼續驗證了;
3、解決方案
其實第2步中已經得到了這個問題的解決方案,我最終時直接去掉了裝置樹中的wlan_clk_gpio的配置,因為在這裡太容易被大多數人忽略了,我更能接受把它在sys_config.fex中去配置,或者沒有配置時直接列印錯誤資訊,修改後上述檔案內容如下:
/*
* Allwinner Technology CO., Ltd. sun8iw11p1 soc board.
*
*/
/dts-v1/;
#include "sun8iw11p1.dtsi"
/{
soc@01c00000 {
};
wlan:wlan {
compatible = "allwinner,sunxi-wlan";
clocks = <&clk_outa>;
wlan_busnum = <1>;
status = "okay";
};
bt:bt {
compatible = "allwinner,sunxi-bt";
status = "okay";
};
btlpm:btlpm {
compatible = "allwinner,sunxi-btlpm";
status = "okay";
};
gps:gps {
compatible = "allwinner,sunxi-gps";
clocks = <&clk_outb>;
status = "disabled";
};
};
相關文章
- 串列埠使用Pipeline時詭異的ReadOnlySequence問題串列埠
- 串列埠無法正常通訊串列埠
- Android 串列埠通訊Android串列埠
- 修復swagger不能正常載入介面的問題Swagger
- 解決關於IIS gzip不能正常啟用的問題
- Android之串列埠程式設計Android串列埠程式設計
- STM32L031 使用外部時鐘卡死的問題,不能正常啟動的原因
- 樹莓派3 B+ 的串列埠(USART)使用問題 (也是用C寫的)樹莓派串列埠
- ros系統下更新串列埠包失敗的問題ROS串列埠
- 谷歌 hackbar 不能使用的問題谷歌
- Android6.0~9.0適配Android
- laravel 500頁面不能正常訪問Laravel
- 沒有真實串列埠裝置時使用"虛擬串列埠驅動"除錯你的串列埠程式碼串列埠除錯
- qt6 QtOpcUa無法正常啟動問題QT
- Java反射全解析(使用、原理、問題、在Android中的應用)Java反射Android
- 全志A40i/T3如何透過SPI轉CAN
- Android開發教程 - 使用Data Binding Android Studio不能正常生成相關類/方法的解決辦法Android
- [20190221]使用nmap掃描埠的問題.txt
- 安卓串列埠通訊疑問安卓串列埠
- MSM8953 Android 9.0 開啟uart串列埠Android串列埠
- J-link虛擬串列埠波特率異常問題串列埠
- BitComet位元彗星解決埠阻塞問題/黃燈問題,如何使用IPv6實現公網訪問
- 全志RV1108常見問題操作解答
- 【Thinkphp6】api介面使用apipost等工具可以正常訪問,專案中訪問報跨域問題PHPAPI跨域
- ios下引用MUI後input不能輸入,Android端正常iOSUIAndroid
- 串列埠blog串列埠
- 串列埠UART串列埠
- Laravel 6 Redis 使用問題LaravelRedis
- Android6.0許可權的動態適配Android
- QT實現串列埠助手中串列埠名的實時更新QT串列埠
- 全志T3核心板在輸電線路影像檢測中的應用
- 不能建立pfile的問題
- 帶內串列埠 在串列埠中輸入命令串列埠
- 有的服務不能在nvidia-docker中正常呼叫顯示卡問題排查Docker
- Vue的api埠號問題VueAPI
- RT-Thread 使用env修改Finsh 串列埠thread串列埠
- 串列埠資料抓取及串列埠通訊模擬串列埠
- 你真的瞭解串列埠嗎(示波器串列埠波形分析)串列埠
- TCPUDP 共用埠問題TCPUDP