在嵌入式Linux產(chǎn)品開發(fā)中,U-Boot SPL啟動(dòng)崩潰、主板不上電、啟動(dòng)卡死在初始化階段是最讓人頭疼的硬故障之一。日志亂碼、CPU異常復(fù)位、看不到完整啟動(dòng)流程,往往讓軟件工程師誤以為是代碼BUG,硬件工程師無從下手。
本文結(jié)合真實(shí)量產(chǎn)故障案例,通過兩段串聯(lián)的啟動(dòng)日志,從SPL異常崩潰,到底層DDR自檢報(bào)錯(cuò),一步步抽絲剝繭,鎖定終極根因,給出可直接落地的排查方案,堪稱RK平臺(tái)啟動(dòng)故障的“教科書級(jí)排障”。

一、故障現(xiàn)場(chǎng):主板啟動(dòng)失敗,兩段詭異日志
本次故障主板為瑞芯微RK系列平臺(tái),現(xiàn)象為:上電后無法啟動(dòng),串口不停打印異常信息,反復(fù)自動(dòng)復(fù)位,完全無法進(jìn)入U-Boot與系統(tǒng)。
我們抓取到兩段關(guān)鍵日志,也是本次排障的核心依據(jù)。
日志1:U-Boot SPL崩潰,CPU異常復(fù)位
主板上電初期,U-Boot SPL 2017.09運(yùn)行至板級(jí)初始化后,直接觸發(fā)CPU硬件異常,打印大量無效寄存器、棧信息,隨后強(qiáng)制提示復(fù)位。
U-Boot SPL2017.09U-Boot SPL boardinitSynchronous abort handler......Call trace:......ERROR: Please RESET the board
初步表象:SPL跑飛、數(shù)據(jù)中止異常、棧無效、CPU訪問非法地址,多數(shù)開發(fā)者第一反應(yīng)會(huì)懷疑:U-Boot配置錯(cuò)誤、編譯問題、鏡像燒錄異常、軟件棧配置錯(cuò)誤。
但僅憑這段日志,只能確定內(nèi)存訪問非法,無法定位是軟件還是硬件問題。
日志2:DDR底層自檢報(bào)錯(cuò),暴露致命硬件問題
在開啟芯片底層DDR自檢模式后,出現(xiàn)了更關(guān)鍵、更直白的報(bào)錯(cuò),這也是解開整個(gè)故障的鑰匙:
DDRdfs8434ice typ24/09/86-09:51:11,fwver v1.18unknowndeviceIfno 'may be ch* soldering abnormality' is printed, it may be ch0 soldering abnormalitypd/nu vdd ddrunknowndeviceERROR
這段日志來自RK平臺(tái)最底層的DDR PHY自檢程序,優(yōu)先級(jí)高于U-Boot SPL,它的報(bào)錯(cuò),直接宣判了故障性質(zhì)。
二、逐句拆解:DDR自檢日志,每一句都是硬件結(jié)論
很多工程師看到這段自檢日志,只知道“報(bào)錯(cuò)了”,卻讀不懂背后的硬件含義,我們逐行翻譯:
1.dfs8434ice:瑞芯微平臺(tái)專用DDR控制器與PHY標(biāo)識(shí),說明系統(tǒng)已經(jīng)運(yùn)行到DDR硬件初始化訓(xùn)練階段,還未進(jìn)入U-Boot主邏輯。
2.unknown device:DDR控制器完全讀取不到DDR顆粒的ID、型號(hào)、寄存器信息,DDR芯片與主控之間通信徹底中斷,芯片處于“不在線”狀態(tài)。
3.ch0 soldering abnormality:日志明確提示,未檢測(cè)到其他通道故障時(shí),默認(rèn)判定為DDR通道0(CH0)焊接/硬件通路異常。
4.pd/nu vdd ddr:核心致命報(bào)錯(cuò)!pd = power down(掉電),nu = not up(未上電),翻譯為:DDR核心供電VDD_DDR無電壓、供電失效、電源未啟動(dòng)。
5.最終ERROR:DDR識(shí)別失敗、供電異常、通路故障,自檢不通過,啟動(dòng)終止。
三、雙日志聯(lián)動(dòng):因果閉環(huán),根因100%鎖定
把兩段日志結(jié)合,故障的完整因果鏈瞬間清晰,不再有任何歧義:
完整故障流程
1.主板上電,CPU啟動(dòng),運(yùn)行最底層DDR自檢;
2.DDR核心供電VDD_DDR失效/ DDR CH0虛焊/斷線,導(dǎo)致DDR顆粒完全不工作;
3.自檢程序識(shí)別不到DDR,拋出unknown device與pd/nu vdd ddr錯(cuò)誤;
4.系統(tǒng)繼續(xù)運(yùn)行U-Boot SPL,SPL默認(rèn)將棧、運(yùn)行內(nèi)存指向外部DDR;
5.CPU訪問未初始化、無供電、無硬件響應(yīng)的非法DDR地址,觸發(fā)數(shù)據(jù)中止異常;
6.SPL崩潰、跑飛、打印無效棧與寄存器,最終強(qiáng)制復(fù)位,循環(huán)卡死。
終極結(jié)論
先有DDR硬件致命故障,后有SPL軟件崩潰。
?SPL的異常日志,是故障結(jié)果;
?DDR自檢的報(bào)錯(cuò)日志,是故障根源。
本次故障與U-Boot配置、編譯、鏡像燒錄、軟件參數(shù)無關(guān),純硬件電路問題,也是RK平臺(tái)量產(chǎn)階段最高發(fā)的故障類型。
四、優(yōu)先級(jí)排查方案:從最高概率到最低,一步定位
結(jié)合瑞芯微平臺(tái)量產(chǎn)經(jīng)驗(yàn),此類故障按以下順序排查,95%的問題在前兩步即可解決。
第一步:測(cè)量DDR供電(第一優(yōu)先級(jí),概率60%+)
日志直接打印pd/nu vdd ddr,說明供電是首要懷疑對(duì)象。
使用萬用表實(shí)測(cè)DDR三大關(guān)鍵電源:
?VDD_DDR(核心供電):標(biāo)準(zhǔn)1.1V/1.2V,出現(xiàn)0V、電壓偏低、紋波過大,直接判定電源故障;
?VDDQ_DDR(IO供電):標(biāo)準(zhǔn)1.8V(LPDDR為低電壓),IO斷電會(huì)直接導(dǎo)致總線通信失效;
?PMIC/DC-DC電源芯片:檢查是否發(fā)燙、使能腳無電平、電感虛焊、濾波電容短路。
只要供電異常,修復(fù)電源后故障立即消失,無需排查其他。
第二步:檢查DDR CH0焊接與硬件通路(概率35%)
日志明確指向ch0 soldering abnormality,BGA封裝的DDR顆粒虛焊、冷焊、連錫是量產(chǎn)重災(zāi)區(qū):
1.目視檢查DDR顆粒是否鼓包、掉件、周邊阻容脫落;
2.熱風(fēng)槍重焊DDR,優(yōu)先重新植球處理;
3.萬用表打值CH0通道DQ/CA/時(shí)鐘線,排查短路、斷線;
4.替換同型號(hào)完好DDR顆粒,排除芯片本身?yè)p壞。
第三步:軟件參數(shù)兜底(概率<5%,僅硬件完好后驗(yàn)證)
只有硬件完全正常,才需要檢查軟件配置:
1.確認(rèn)DDR型號(hào)(DDR3/DDR4/LPDDR4X)與設(shè)備樹、SPL配置匹配;
2.使用瑞芯微官方工具重新生成DDR參數(shù)(ddrbin);
3.恢復(fù)原廠默認(rèn)U-Boot配置,不做自定義時(shí)序修改。
五、實(shí)戰(zhàn)總結(jié):嵌入式啟動(dòng)故障的3條鐵律
通過本次排障,我們可以總結(jié)出適用于全平臺(tái)的嵌入式啟動(dòng)故障判斷原則,尤其適合RK/全志/STM32等ARM平臺(tái):
1.只要SPL崩潰、棧無效、數(shù)據(jù)中止,優(yōu)先懷疑DDR,而非軟件
U-Boot SPL的核心工作就是初始化DDR,絕大多數(shù)崩潰都來自內(nèi)存訪問非法,軟件BUG概率遠(yuǎn)低于硬件。
2.底層硬件自檢日志> U-Boot日志,優(yōu)先級(jí)更高、更可信
DDR PHY、時(shí)鐘、電源自檢程序,運(yùn)行優(yōu)先級(jí)遠(yuǎn)高于U-Boot,它的報(bào)錯(cuò)是硬件底層直讀結(jié)果,比系統(tǒng)日志更準(zhǔn)確。
3.“unknown device +供電報(bào)錯(cuò)+通道異常”,直接判定硬件死穴
只要出現(xiàn)DDR無法識(shí)別、供電掉電、通道焊接提示,100%是硬件問題,不要再浪費(fèi)時(shí)間調(diào)試軟件、重新編譯、反復(fù)燒錄鏡像。
嵌入式開發(fā)中,80%的啟動(dòng)卡死,都源于最基礎(chǔ)的電源與焊接問題。很多時(shí)候,復(fù)雜的異常日志背后,往往是最簡(jiǎn)單的硬件故障。
讀懂底層日志,理清因果邏輯,先硬件后軟件,先供電后信號(hào),才能少走彎路,高效排障。
如果你也在做RK平臺(tái)開發(fā),遇到U-Boot崩潰、DDR訓(xùn)練失敗、啟動(dòng)不上電,不妨對(duì)照本文的日志與排查思路,快速定位你的硬件問題。
-
嵌入式
+關(guān)注
關(guān)注
5198文章
20435瀏覽量
333902 -
DDR
+關(guān)注
關(guān)注
11文章
753瀏覽量
69088 -
Linux
+關(guān)注
關(guān)注
88文章
11756瀏覽量
218997
發(fā)布評(píng)論請(qǐng)先 登錄
分布式日志追蹤ID實(shí)戰(zhàn)
深度解析SPL階段A/B分區(qū)啟動(dòng):spl_ab.c代碼全拆解
ucgui listbox顯示不全 只有兩行
HarmonyOS 崩潰服務(wù)能力全新上線!幫你高效解決崩潰問題
如何跳過SPL中的ddr訓(xùn)練?
iMotions為生物識(shí)別平臺(tái)啟動(dòng)新型在線用戶數(shù)據(jù)收集方案
兩行代碼中的樹莓派電源開關(guān)
VoIP?網(wǎng)絡(luò)排障新思路:從日志到 IOTA?分析
遠(yuǎn)程日志errDump調(diào)試功能實(shí)戰(zhàn)教程:案例驅(qū)動(dòng)的故障排查!
RK?平臺(tái)?DDR?測(cè)試終極指南:標(biāo)準(zhǔn)化步驟?+?全場(chǎng)景適配方案
Linux內(nèi)核日志玩明白了嗎?printk調(diào)試神器全解析
RK3588 PCIe?壓測(cè):從崩潰到排障的全流程解析
實(shí)戰(zhàn)排障|RK平臺(tái)啟動(dòng)卡死、SPL崩潰,兩行日志直接定位DDR硬件死穴!
評(píng)論