[Android6.0][RK3399] 開機前幾秒串口打印異常問題

Platform: RK3399
OS: Android 6.0
Kernel: Linux4.4
Version: v2017.03

問題現象

開機 0-3 s 串口打印異常,log 大致如下:

 CPLWC�+lH�ؐL)�������ꁳ�ݵ��}�ɽ��������������r���͑�����j郵���rŽ��Ց����͕͕͑͑́ 
с���ɕ��́�Â��j���r�ʺ���¢��oꁵ������j�������������:�UŠ���r��:¥�jR� 
[ 1.973752] resource: 0x000c00000 -- 0x001c00000 (16 MB)
[ 1.973761] kernel: 0x001c00000 -- 0x002c00000 (16 MB)
[ 1.973769] boot: 0x002c00000 -- 0x004c00000 (32 MB)
[ 1.973777] recovery: 0x004c00000 -- 0x006c00000 (32 MB)

調試步驟

抓取串口波形

在 0-3s 串口波形異常。

檢查上電

APIO4 = 3.0V
PMUIO2 = 3.0V

參考 rk 文檔
kernel/Documentation/devicetree/bindings/power/rockchip-io-domain.txt
設置方法如下:

Possible supplies for rk3399:
- bt656-supply:  The supply connected to APIO2_VDD.
- audio-supply:  The supply connected to APIO5_VDD.
- sdmmc-supply:  The supply connected to SDMMC0_VDD.
- gpio1830       The supply connected to APIO4_VDD.

Possible supplies for rk3399 pmu-domains:
- pmu1830-supply:The supply connected to PMUIO2_VDD.

檢查 dts 中的設置爲

&io_domains {
    status = "okay";

    bt656-supply = <&vcc_3v0>;      /* bt656_gpio2ab_ms */
    audio-supply = <&vcca1v8_codec>;    /* audio_gpio3d4a_ms */
    sdmmc-supply = <&vcc_sd>;       /* sdmmc_gpio4b_ms */
    gpio1830-supply = <&vcc_3v0>;       /* gpio1833_gpio4cd_ms */
};


&pmu_io_domains {
    status = "okay";
    pmu1830-supply = <&vcc_3v0>;
};

正確無誤。

獲取 kernel 起來後實際配置的 pmu io 電壓

root@rk3399_mid:/ # io -4 -r 0xFF320180
ff320180:  00000100

所以實際起作用是 3v,沒問題。

獲取開機階段實際配置的 pmu io 電壓

獲取 uboot 階段中寄存器的配置可以這樣做,在如下地方添加打印

void  __iomem *base_addr;
unsigned long p_addr = 0x????????;
unsigned long size = 0x??;


base_addr = ioremap(p_addr , size );
printk("lml#####: gpio0_A0's direction = 0x%x", readl(base_addr));
iounmap(base_addr);

但是我們串口有問題啊!
添加了打印也看不到任何信息。

沒轍!

檢查 PMUIO2 power domain 部分驅動強度是否正確

既然爲 3.0V 需要上拉電阻來進行驅動強度選擇。

所以這個 R90029 應該貼了才行。
但是實際沒貼。

貼上後串口打印正常。問題解決。

發佈了129 篇原創文章 · 獲贊 166 · 訪問量 49萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章