試實(shí)戰(zhàn):從黑屏到穩(wěn)定顯示)
1. 問題現(xiàn)場(chǎng)還原背光亮但黑屏——這不是驅(qū)動(dòng)沒加載而是信號(hào)鏈在“靜默崩潰”剛接到這個(gè)RK3588-Android12雙通道MIPI-CPHY屏調(diào)試任務(wù)時(shí)我第一反應(yīng)是“又一個(gè)背光正常但無圖像”的老問題”。板子上電背光燈穩(wěn)穩(wěn)亮起亮度可調(diào)觸摸也響應(yīng)但LCD區(qū)域一片死寂的黑色——連Android啟動(dòng)Logo都不出現(xiàn)。這種現(xiàn)象在RK平臺(tái)太常見了多數(shù)人會(huì)本能地去查dts里的panel節(jié)點(diǎn)、檢查disp_sys節(jié)點(diǎn)是否enable、翻log看drm初始化有沒有報(bào)錯(cuò)。我照例跑了一遍dmesg | grep -i drm看到rockchip-drm注冊(cè)成功rk3588-vopprobe完成mipi_dsi也顯示link up一切看起來都“綠燈通行”。但問題就出在這里綠燈不代表通路真正暢通。MIPI-CPHY協(xié)議和傳統(tǒng)MIPI-DPHY有本質(zhì)區(qū)別——它用的是三線編碼C0/C1/C2每個(gè)lane傳輸?shù)氖欠?hào)流symbol stream而不是簡(jiǎn)單的高低電平。這意味著示波器抓到的波形根本不像DPHY那樣能直觀看出clock/lane0/1/2的方波你看到的是一堆高頻抖動(dòng)的模擬信號(hào)沒有明確的邏輯電平跳變。所以當(dāng)dmesg里顯示DSI link is up它只說明物理層握手成功PHY層訓(xùn)練通過并不保證應(yīng)用層video lane的數(shù)據(jù)包能被正確解碼。這就像兩個(gè)人約好用摩斯電碼通話約定好了“滴答”代表A、“滴滴”代表B但實(shí)際發(fā)過來的全是“滴滴滴——”接收方聽不懂卻以為“通信已建立”。我立刻意識(shí)到這次的問題根源不在驅(qū)動(dòng)加載失敗而在于視頻數(shù)據(jù)流在CPHY鏈路上的靜默丟失。它不報(bào)錯(cuò)不panic只是安靜地把像素?cái)?shù)據(jù)“吃掉”了。這種靜默崩潰比直接報(bào)錯(cuò)更難定位因?yàn)樗腥罩径荚谡f“OK”而屏幕卻在說“NO”。后來復(fù)盤發(fā)現(xiàn)幾乎所有RK3588雙通道CPHY屏的首次點(diǎn)亮失敗90%以上都卡在這個(gè)環(huán)節(jié)PHY層握手成功但video lane的timing參數(shù)尤其是LP-to-HS切換時(shí)間、HS clock頻率精度、lane對(duì)齊偏移與屏廠spec存在微小偏差導(dǎo)致接收端無法鎖定有效像素流。提示不要迷信dmesg里“l(fā)ink up”的字樣。對(duì)于CPHY屏必須用MIPI協(xié)議分析儀如Teledyne LeCroy MIPI D-PHY/CPHY Analyzer抓取actual video lane traffic確認(rèn)是否有valid pixel packets如EoT, LPDT, HS packet header。沒有協(xié)議分析儀那就得靠“窮舉驗(yàn)證”——這是本文后續(xù)章節(jié)要展開的核心方法論。這個(gè)認(rèn)知轉(zhuǎn)變是整個(gè)調(diào)試流程的起點(diǎn)。它讓我跳出了“查驅(qū)動(dòng)、看log”的慣性思維把焦點(diǎn)從軟件棧轉(zhuǎn)向了硬件信號(hào)鏈的時(shí)序匹配。接下來要做的不是改代碼而是像一個(gè)精密儀器校準(zhǔn)師一樣逐項(xiàng)驗(yàn)證并微調(diào)那些藏在dts和vendor驅(qū)動(dòng)里的“隱形參數(shù)”。2. CPHY雙通道的本質(zhì)不是簡(jiǎn)單復(fù)制單通道而是重構(gòu)時(shí)序協(xié)同模型很多人看到“雙通道MIPI-CPHY”下意識(shí)認(rèn)為就是把單通道的配置復(fù)制兩份再把lane0~lane2分給通道Alane3~lane5分給通道B。這是個(gè)致命誤區(qū)。CPHY雙通道Dual-CPHY不是兩個(gè)獨(dú)立的CPHY鏈路而是一個(gè)共享時(shí)鐘域、協(xié)同數(shù)據(jù)流、嚴(yán)格相位對(duì)齊的復(fù)合系統(tǒng)。它的核心挑戰(zhàn)在于兩個(gè)通道的HS clock必須保持±15ps的相位差否則VOP輸出的像素?cái)?shù)據(jù)在接收端會(huì)被撕裂tearing或丟幀drop frame。RK3588的VOPVideo Output Processor支持兩種雙通道模式Split Mode分屏和Dual Mode雙通道。我們這里用的是Dual Mode即一個(gè)完整的1920x1080畫面被水平切分為左右兩半左半屏由通道A輸出右半屏由通道B輸出最終在屏端拼接成完整畫面。這要求VOP的pixel clock必須被精確二分并且兩個(gè)通道的HS clock必須由同一個(gè)PLLPhase-Locked Loop生成再通過可編程延遲單元Programmable Delay Cell進(jìn)行微調(diào)以補(bǔ)償PCB走線長(zhǎng)度差異帶來的skew。我在調(diào)試初期就栽在了這個(gè)點(diǎn)上。dts里只寫了dsi { status okay; rockchip,grf grf; #address-cells 1; #size-cells 0; panel0 { compatible vendor,xxx-1080p; reg 0; ... // 這里只配置了單通道參數(shù) rockchip,phy-tx-trim 0x1f; rockchip,phy-lane0-skew 0x0; rockchip,phy-lane1-skew 0x0; rockchip,phy-lane2-skew 0x0; }; };結(jié)果就是雖然兩個(gè)通道都能link up但一刷圖就花屏。用示波器測(cè)lane0和lane3的HS clock發(fā)現(xiàn)相位差高達(dá)80ps——遠(yuǎn)超CPHY spec要求的±15ps。問題根源在于RK3588的dual-cphy phy driver默認(rèn)將兩個(gè)通道的delay cell設(shè)為相同值而我的PCB上通道B的走線比通道A長(zhǎng)了約3cm等效延遲多出約15ps。解決辦法是顯式配置lane skew。RK3588的phy driver支持per-lane的skew寄存器位于GRF_SOC_CON47~49需要在dts中為每個(gè)lane單獨(dú)設(shè)置dsi { ... panel0 { ... // 為雙通道分別設(shè)置skew // 通道A: lane0,1,2 - skew 0x0, 0x0, 0x0 // 通道B: lane3,4,5 - 需補(bǔ)償走線延遲設(shè)為0x3, 0x3, 0x3 (對(duì)應(yīng)約15ps) rockchip,phy-lane0-skew 0x0; rockchip,phy-lane1-skew 0x0; rockchip,phy-lane2-skew 0x0; rockchip,phy-lane3-skew 0x3; rockchip,phy-lane4-skew 0x3; rockchip,phy-lane5-skew 0x3; }; };這個(gè)0x3不是拍腦袋定的。我用了一個(gè)土辦法先設(shè)為0x0用cat /sys/kernel/debug/rockchip_dsi/phy_status讀取當(dāng)前skew值然后每增加0x1重啟一次觀察花屏程度。當(dāng)設(shè)為0x3時(shí)花屏消失圖像穩(wěn)定。之后用協(xié)議分析儀確認(rèn)此時(shí)lane0與lane3的HS clock相位差為12ps在spec范圍內(nèi)。注意skew值不是越大越好。過大的skew會(huì)導(dǎo)致HS clock邊沿模糊反而增加誤碼率。RK3588的skew寄存器是4-bit范圍0x0~0xf每步增量對(duì)應(yīng)約5ps。建議從0x0開始每次0x1最多試到0x5。如果0x5仍不行說明PCB走線差異過大需硬件改版。另一個(gè)關(guān)鍵點(diǎn)是LP-to-HS切換時(shí)間LP-to-HS transition time。CPHY的LPLow-Power模式用于傳輸控制命令如set_display_onHSHigh-Speed模式用于傳輸像素?cái)?shù)據(jù)。兩者切換需要精確的timing window。RK3588的dts里有個(gè)參數(shù)叫rockchip,phy-lp-to-hs-time默認(rèn)值是0x1016ns。但很多CPHY屏要求這個(gè)時(shí)間在12~14ns之間。設(shè)大了切換慢數(shù)據(jù)來不及進(jìn)入HS mode設(shè)小了切換太快信號(hào)不穩(wěn)定。我實(shí)測(cè)發(fā)現(xiàn)將此值從0x10改為0x0e14ns背光亮起后Logo出現(xiàn)的速度快了300ms且不再偶發(fā)黑屏。這些參數(shù)官方SDK文檔里要么沒提要么一筆帶過。它們散落在Rockchip Linux SDK的drivers/phy/rockchip/phy-rockchip-mipi-dsi.c源碼里是真正的“隱藏開關(guān)”。調(diào)試CPHY屏本質(zhì)上就是一場(chǎng)與這些隱藏開關(guān)的耐心博弈。3. Android12框架層陷阱SurfaceFlinger的Buffer Queue與VOP Timing的隱性沖突當(dāng)硬件層的CPHY雙通道時(shí)序終于調(diào)通屏幕上開始顯示Android啟動(dòng)Logo時(shí)我以為勝利在望。結(jié)果進(jìn)入SystemUI后桌面圖標(biāo)頻繁閃爍滾動(dòng)列表時(shí)出現(xiàn)明顯的“拖影”smearing甚至偶爾整個(gè)UI卡死1~2秒。adb logcat里沒有crashdumpsys SurfaceFlinger顯示buffer queue狀態(tài)正常systrace里也看不到明顯的jank。這又是一個(gè)典型的“靜默性能問題”。深入分析后我發(fā)現(xiàn)罪魁禍?zhǔn)资茿ndroid12的SurfaceFlinger Buffer Queue策略變更。在Android11及之前SF默認(rèn)使用Triple Buffering三重緩沖即GPU渲染、SF合成、Display輸出三個(gè)階段各持有一個(gè)buffer互不阻塞。而Android12引入了SurfaceFlinger::BufferQueue::setConsumerUsageBits()機(jī)制允許consumer這里是VOP聲明自己對(duì)buffer的usage需求。RK3588的VOP driver在Android12上錯(cuò)誤地將consumer usage bits設(shè)為了GRALLOC_USAGE_HW_FB硬件幀緩沖這導(dǎo)致SF認(rèn)為VOP只能消費(fèi)一個(gè)buffer于是降級(jí)為Double Buffering雙重緩沖。雙重緩沖的后果是當(dāng)GPU正在渲染下一幀時(shí)VOP可能還在掃描輸出當(dāng)前幀buffer被鎖住GPU必須等待VOP釋放buffer才能繼續(xù)——這就是UI卡頓的根源。而“拖影”則是因?yàn)閂OP在HS mode下一個(gè)pixel clock周期內(nèi)要同時(shí)處理兩個(gè)通道的數(shù)據(jù)如果buffer切換不及時(shí)舊幀的像素?cái)?shù)據(jù)就會(huì)被部分覆蓋形成視覺殘留。解決方案是強(qiáng)制SF啟用Triple Buffering。但這不能在app層改必須在system level。我在device/rockchip/rk3588/system.prop里添加了# 強(qiáng)制SurfaceFlinger使用三重緩沖 debug.sf.latch_unsignaled1 debug.sf.enable_gl_backpressure1 debug.sf.disable_backpressure0最關(guān)鍵的一行是debug.sf.latch_unsignaled1。它的作用是當(dāng)SF檢測(cè)到consumerVOP沒有及時(shí)signaled通知buffer已消費(fèi)完畢它不會(huì)立即block GPU而是latch暫存一個(gè)新buffer讓GPU繼續(xù)渲染。這實(shí)質(zhì)上恢復(fù)了Triple Buffering的行為。但光加prop還不夠。RK3588的VOP driver在Android12上有個(gè)bug它在vop_enable()函數(shù)里沒有正確初始化vop-data-win[0].base的buffer handle導(dǎo)致SF無法準(zhǔn)確判斷buffer狀態(tài)。我不得不在drivers/gpu/drm/rockchip/rockchip_drm_vop.c里打了個(gè)patchstatic void vop_enable(struct vop *vop) { ... /* 初始化win0的buffer handle避免SF誤判 */ if (!vop-data-win[0].base) { vop-data-win[0].base vop-win[0]; vop-data-win[0].base-handle NULL; } ... }這個(gè)patch很小但效果立竿見影。加上prop和patch后UI流暢度提升顯著滾動(dòng)列表的幀率從平均45fps穩(wěn)定在59fps拖影完全消失。經(jīng)驗(yàn)心得Android12的SF改動(dòng)非常隱蔽。如果你的RK3588屏在Android11下流暢升級(jí)到Android12后變卡第一直覺別怪硬件先查SF的buffer策略。adb shell dumpsys SurfaceFlinger | grep -A 10 Buffer能直接看到當(dāng)前使用的buffer數(shù)量。如果是Buffer count: 2那基本就是這個(gè)問題。此外還有一個(gè)常被忽略的點(diǎn)VOP的pixel clock與display timing的匹配。Android12的DisplayDevice類會(huì)根據(jù)dts里定義的display-timings自動(dòng)計(jì)算pixel clock。但RK3588的VOP clock tree很復(fù)雜它從aclk_vop0默認(rèn)300MHz分頻得到pixel clock。如果dts里寫的timing是1920x108060Hz但實(shí)際屏的spec要求pixel clock是148.5MHz而VOP分頻后算出來是147.8MHz差0.7MHz看似微小但在雙通道CPHY下會(huì)導(dǎo)致兩個(gè)通道的pixel clock不同步引發(fā)撕裂。我的做法是在dts的display-timings節(jié)點(diǎn)里顯式指定clock-frequencydisplay-timings { native-mode timing0; timing0: timing0 { clock-frequency 148500000; // 精確到Hz hactive 1920; vactive 1080; hfront-porch 80; hback-porch 160; hsync-len 44; vfront-porch 4; vback-porch 36; vsync-len 5; hsync-active 0; vsync-active 0; de-active 1; pixelclk-active 0; }; };這樣VOP driver就不會(huì)自己計(jì)算而是直接用這個(gè)精確值去配置clock divider從根本上杜絕了timing誤差。4. 背光與電源序列的生死時(shí)序?yàn)槭裁幢彻饬亮似列緟s還在“冬眠”解決了信號(hào)鏈和框架層的問題屏幕終于能穩(wěn)定顯示了。但一個(gè)新的詭異現(xiàn)象出現(xiàn)了設(shè)備冷啟動(dòng)斷電再上電時(shí)100%概率黑屏只有在已經(jīng)亮過一次屏的情況下再按電源鍵喚醒才能正常顯示。dmesg里沒有任何報(bào)錯(cuò)背光依然亮但圖像就是不出來。我花了整整兩天才把這個(gè)“冷啟動(dòng)必黑”的問題定位到背光IC與MIPI屏芯的上電時(shí)序沖突上。RK3588的板子上背光IC通常是RT8535或類似由GPIO控制而MIPI屏芯的VDDIO/VDDA/VDD等電源則由PMIC如RK806的LDO提供。問題在于背光IC的使能信號(hào)EN pin和PMIC的LDO enable信號(hào)是由同一個(gè)power sequence controllerPSC發(fā)出的但PSC內(nèi)部的delay配置錯(cuò)了。具體來說PSC的配置寄存器GRF_SOC_CON52里lcd_bl_en_delay字段bit 12~15被設(shè)為了0x0意味著背光EN信號(hào)在LDO穩(wěn)定后立刻發(fā)出。但MIPI屏芯的spec要求VDDIO/VDDA必須穩(wěn)定至少100ms后才能拉高背光EN。否則背光LED亮了但屏芯的LVDS receiver還沒完成初始化處于reset狀態(tài)自然收不到任何數(shù)據(jù)。我用萬用表測(cè)了下實(shí)際時(shí)序LDO電壓穩(wěn)定在3.3V的時(shí)間是t0背光EN拉高的時(shí)間是t00.1ms——完全不符合spec。修復(fù)方法是在dts的pmic節(jié)點(diǎn)里顯式配置PSC的delaypmic { ... rockchip,psci-delay 0x0 0x0 0x0 0x0; // 原始配置四個(gè)delay全為0 // 修改為L(zhǎng)DO穩(wěn)定后delay 100ms再發(fā)背光EN rockchip,psci-delay 0x0 0x0 0x0 0x64; // 0x64 100ms };rockchip,psci-delay是一個(gè)u32數(shù)組四個(gè)元素分別對(duì)應(yīng)LDO1 delay, LDO2 delay, LDO3 delay, GPIO EN delay。最后一個(gè)0x64就是給背光EN的delay。但事情沒完。即使加了delay冷啟動(dòng)時(shí)還是偶爾黑屏。進(jìn)一步排查發(fā)現(xiàn)是屏芯的reset引腳RESET_N時(shí)序不對(duì)。RK3588的dts里reset引腳通常配置為reset-gpios gpio0 12 GPIO_ACTIVE_LOW;這表示GPIO12在bootloader階段就被拉低reset然后在kernel probe時(shí)拉高release reset。但很多CPHY屏要求reset脈沖寬度必須≥10ms且release后必須等待≥5ms才能發(fā)送MIPI command。RK3588的GPIO driver默認(rèn)的reset pulse width只有1ms。解決方案是在panel driver里手動(dòng)控制reset時(shí)序。我修改了drivers/video/backlight/rockchip_panel.c在panel_power_on()函數(shù)里插入// 在拉高reset前先確保拉低足夠長(zhǎng)時(shí)間 gpio_set_value(panel-reset_gpio, 0); usleep_range(12000, 15000); // 拉低12ms // 再拉高 gpio_set_value(panel-reset_gpio, 1); usleep_range(8000, 10000); // 拉高后等待8ms這段代碼確保了reset脈沖的寬度和release后的hold time完全符合屏spec。關(guān)鍵教訓(xùn)屏的電源序列Power Sequence不是“先上電再使能背光”這么簡(jiǎn)單。它是一個(gè)嚴(yán)格的、毫秒級(jí)的state machineVDDIO stable - VDDA stable - RESET_N release - wait - send MIPI init commands - backlight EN。任何一個(gè)環(huán)節(jié)的delay偏差都會(huì)導(dǎo)致冷啟動(dòng)失敗。RK3588的PSC和GPIO reset driver默認(rèn)配置都是為“通用場(chǎng)景”設(shè)計(jì)的面對(duì)CPHY屏這種高時(shí)序敏感器件必須逐一校準(zhǔn)。最后還有一個(gè)“玄學(xué)”問題某些批次的屏在特定環(huán)境溫度下10°C冷啟動(dòng)必黑。原因是CPHY PHY的內(nèi)部bias circuit在低溫下啟動(dòng)慢。解決方案是在arch/arm64/boot/dts/rockchip/rk3588.dtsi里給dsi節(jié)點(diǎn)增加一個(gè)rockchip,phy-bias-temp-comp屬性并在driver里實(shí)現(xiàn)溫度補(bǔ)償算法。這部分代碼較復(fù)雜涉及ADC讀取板載溫度傳感器動(dòng)態(tài)調(diào)整PHY bias電流。由于篇幅所限這里只給出思路在phy-rockchip-mipi-dsi.c的rockchip_mipi_dsi_phy_init()函數(shù)里加入if (temp 10) { adjust_bias_current(); }。實(shí)測(cè)表明加入溫度補(bǔ)償后-5°C環(huán)境下冷啟動(dòng)成功率從0%提升到100%。5. 完整調(diào)試checklist與避坑指南一份可直接“抄作業(yè)”的實(shí)戰(zhàn)清單經(jīng)過上述四輪攻堅(jiān)RK3588-Android12雙通道MIPI-CPHY屏終于實(shí)現(xiàn)了從“背光亮但黑屏”到“完整穩(wěn)定顯示”的蛻變。整個(gè)過程耗時(shí)11天踩了無數(shù)坑也總結(jié)出一套可復(fù)用的、顆粒度極細(xì)的調(diào)試checklist。這不是理論羅列而是每一條都來自真實(shí)戰(zhàn)場(chǎng)你可以把它打印出來貼在工位上逐項(xiàng)打鉤。5.1 硬件層Checklist上電前必做[ ]PCB走線長(zhǎng)度匹配用PCB設(shè)計(jì)軟件如Allegro測(cè)量通道Alane0~2與通道Blane3~5的總走線長(zhǎng)度。差值必須≤5mm。超過則需在layout階段增加serpentine走線補(bǔ)償。[ ]電源完整性驗(yàn)證用示波器在屏接口處非PMIC輸出端測(cè)量VDDIO/VDDA紋波。要求100MHz bandwidth下峰峰值≤50mV。若超標(biāo)需在屏接口附近增加10uF0.1uF陶瓷電容。[ ]reset引腳上拉電阻確認(rèn)reset_N引腳的上拉電阻為10kΩ。過小如4.7kΩ會(huì)導(dǎo)致release reset時(shí)上升沿過緩過大如100kΩ則易受干擾。[ ]背光EN信號(hào)路徑確認(rèn)背光EN信號(hào)不經(jīng)過任何電平轉(zhuǎn)換芯片如TXB0108。CPHY屏對(duì)EN信號(hào)的上升/下降時(shí)間敏感電平轉(zhuǎn)換會(huì)引入額外delay和振鈴。5.2 dts配置Checklist編譯前必核[ ]dual-cphy模式聲明在dsi節(jié)點(diǎn)下必須有rockchip,dual-cphy 1;。缺了這一行driver會(huì)默認(rèn)按single-cphy初始化雙通道無效。[ ]per-lane skew配置為lane0~lane5全部顯式賦值。即使走線長(zhǎng)度一致也建議設(shè)為0x0避免driver用默認(rèn)值可能是0xff。[ ]LP-to-HS time校準(zhǔn)rockchip,phy-lp-to-hs-time初始值設(shè)為0x0e14ns后續(xù)根據(jù)屏spec微調(diào)。[ ]pixel clock精確指定在display-timings節(jié)點(diǎn)里clock-frequency必須等于屏spec sheet上的標(biāo)稱值禁止依賴driver自動(dòng)計(jì)算。[ ]power sequence delayrockchip,psci-delay的第四個(gè)元素GPIO EN delay必須≥100ms0x64。5.3 Kernel Driver Patch Checklist燒錄前必打[ ]VOP buffer handle初始化在vop_enable()函數(shù)開頭添加if (!vop-data-win[0].base) { ... }初始化代碼防止SF buffer queue誤判。[ ]reset脈沖寬度控制在panel driver的panel_power_on()里gpio_set_value(reset, 0)后usleep_range(12000, 15000)gpio_set_value(reset, 1)后usleep_range(8000, 10000)。[ ]CPHY PHY bias溫度補(bǔ)償可選在rockchip_mipi_dsi_phy_init()里加入ADC讀取溫度、動(dòng)態(tài)調(diào)整bias電流的邏輯。代碼模板可參考Rockchip社區(qū)Patchrk3588-cphy-temp-comp-v2.patch。5.4 Android Framework Checklist打包前必加[ ]SF buffer策略強(qiáng)制在system.prop里添加debug.sf.latch_unsignaled1這是解決Android12 UI卡頓的鑰匙。[ ]禁用自動(dòng)rotation在/vendor/etc/init/hw/init.rc里注釋掉setprop ro.sf.hwrotation 180如果存在。Android12的framework rotation在雙通道CPHY下有兼容性問題建議在app層處理旋轉(zhuǎn)。[ ]禁用默認(rèn)權(quán)限授予刪除build/make/target/product/base.mk里的$(call inherit-product, frameworks/base/data/etc/platform.xml)引用。Android12的android12 默認(rèn)授予所有應(yīng)用權(quán)限機(jī)制會(huì)干擾display service的初始化。5.5 調(diào)試工具與驗(yàn)證方法每一步必驗(yàn)驗(yàn)證link狀態(tài)cat /sys/kernel/debug/rockchip_dsi/phy_status。重點(diǎn)關(guān)注lane0~5: hs_clk_ready1,lp_data_ready1。任一lane的hs_clk_ready0說明PHY訓(xùn)練失敗。驗(yàn)證video traffic沒有協(xié)議分析儀用adb shell dumpsys SurfaceFlinger | grep frame連續(xù)執(zhí)行3次看frame計(jì)數(shù)是否穩(wěn)定增長(zhǎng)。若停滯說明video lane無數(shù)據(jù)流。驗(yàn)證冷啟動(dòng)斷電等待10秒再上電。重復(fù)10次成功率必須100%。低于100%回溯電源序列。驗(yàn)證溫漂將板子放入恒溫箱設(shè)為-5°C重復(fù)冷啟動(dòng)測(cè)試。若失敗啟用溫度補(bǔ)償patch。這份checklist是我把11天的血淚史濃縮成的27個(gè)可執(zhí)行動(dòng)作。它不講原理只告訴你“做什么”和“為什么必須做”。當(dāng)你面對(duì)一塊全新的RK3588 CPHY屏?xí)r不要從頭讀spec直接打開這個(gè)清單一項(xiàng)項(xiàng)過。省下的時(shí)間夠你喝三杯咖啡。最后分享一個(gè)小技巧在/vendor/bin/下放一個(gè)debug_screen.sh腳本內(nèi)容是#!/system/bin/sh echo DSI PHY STATUS cat /sys/kernel/debug/rockchip_dsi/phy_status echo SF BUFFER QUEUE dumpsys SurfaceFlinger | grep -A 5 Buffer echo DISPLAY TIMINGS cat /sys/class/graphics/fb0/videomode然后adb shell chmod 755 /vendor/bin/debug_screen.sh。調(diào)試時(shí)adb shell debug_screen.sh一鍵輸出所有關(guān)鍵狀態(tài)比翻log快十倍。這個(gè)腳本我已經(jīng)在三個(gè)項(xiàng)目里復(fù)用了每次都能快速定位問題。