電路板板回板后,如果串口能夠正常打印,則我們很多調(diào)試手段都可以運(yùn)用,能夠運(yùn)用串口打印,或者調(diào)試工具能夠快速的進(jìn)行問題定位。
最痛苦的就是嵌入式系統(tǒng),我們的知識體系比較單一,團(tuán)隊中缺少軟硬兼修的人。如果回板的電路板雖然不冒煙,但是無法明確是軟件問題,還是硬件問題的時候,就需要我們通過一系列操作進(jìn)行問題定位,然后逐步殲滅問題,最終達(dá)到串口能夠正常打印的地步。
早期在X86系統(tǒng)中,為了幫助定位問題,會選擇這樣的80卡,用一個PCI外設(shè)來顯示故障部件的位置,縮短調(diào)試的時間和過程。
但是最痛苦的事情是,80卡也不亮。
所以我們需要逐步排除硬件問題,捋清楚硬件啟動的過程:
1、時鐘問題。
一般表現(xiàn)在時鐘配置異常,晶振的選型頻率范圍有問題,超出芯片主頻工作范圍。
還有晶體不起振,我們碰過有同事歸一化電容,把晶振的負(fù)載電容容量選型選的容值過于大了。
也碰過晶振的走線太長,導(dǎo)致處理器接收端的信號質(zhì)量不好,導(dǎo)致無法正常啟動。
2、電源問題。
電源完整性的質(zhì)量差,紋波過大,尤其開關(guān)電源供電時;或者供電輸出不穩(wěn)定;或者系統(tǒng)供電能力不足而引起電源波動等。例如有一些設(shè)計錯誤,電壓錯誤、電流能力不足、電源之間的相互干擾等等。我們需要仔細(xì)排查電源本身的問題。
3、上電時序的問題
電源之間的先后關(guān)系,我們設(shè)計電路板的時候,需要捋清楚每個電源上電的先后時序要求,很多芯片都會有相關(guān)的要求:處理器、FPGA、DSP等等一般都會有時序要求。
容易忽略的一個點(diǎn)是:不光是電源時序有要求,有些芯片的時鐘穩(wěn)定、電源穩(wěn)定、復(fù)位信號之間有先后關(guān)系,或者還有時間間隔的要求。
我們需要全方位排查時鐘、電源、復(fù)位信號之間的時序要求。特別是一些共用電源的芯片,很可能由于時序要求,我們要分別供電,或者需要通過MOSFET控制上電時機(jī)。
4、BOOT腳配置問題。
對于ARM芯片往往都有些BOOT配置腳。經(jīng)常遇到有人因為BOOT腳的焊接或接觸不良導(dǎo)致各類奇怪問題。這種情況多表現(xiàn)在芯片功能時好時壞,或者部分芯片正常,部分芯片異常。
我們不管是ARM也好、X86也好、DSP也好,以及MIPS、現(xiàn)在RISC-V都存在啟動路徑的問題。有TF啟動、U盤啟動、硬盤啟動、光盤啟動等等。
我們需要知道要么像X86那樣,有BIOS來配置啟動路徑,或者像有的ARM通過上下拉電阻來配置啟動路徑。
最近在玩英偉達(dá)的Jetson,最不爽的一件事就是:不同的啟動路徑,使用的系統(tǒng)鏡像不同。如果我們忽略,會導(dǎo)致系統(tǒng)無法啟動。
5、啟動文件問題。
經(jīng)常因為選錯了啟動文件,導(dǎo)致程序無法正常運(yùn)行,或者說調(diào)試時好好的,脫機(jī)運(yùn)行就不行。這點(diǎn)在做不同系列芯片間移植時最容易碰到。
有些處理器的啟動配置文件很復(fù)雜,沒問題的時候容易被大家忽略,一些處理器的基礎(chǔ)配置在配置文件里面。如果配置文件錯誤,會導(dǎo)致處理器啟動異常。
6、地址空間錯誤
我們從軟件的視角,有時候很容易忽略啟動地址。地址空間有時經(jīng)常會把軟件人繞暈。硬件的人想搞清楚,也費(fèi)盡。
對于X86系統(tǒng)的地址空間更復(fù)雜,內(nèi)存空間分四個模式,還有IO地址空間。
案例:某一個多核PowerPC的處理器串口沒有打印
1、現(xiàn)象、問題描述
單板回板后,單板啟動失敗,串口沒有打印。這是一個典型的單板調(diào)試過程。故記錄作為回板調(diào)試參考。
2、關(guān)鍵過程、根本原因分析
單板回板后,串口沒有打印。處理器為多核PPC,小系統(tǒng)通過CPLD對Local Bus進(jìn)行解復(fù)位。下圖為P4080小系統(tǒng)框圖, P4080小系統(tǒng)P4080, DDR3 SDRAM,CPLD,F(xiàn)lash構(gòu)成。P4080通過SRIO接口實現(xiàn)對DSP的加載和控制,通過SGMII接口和FPGA交互媒體控制報文。
問題一:單板啟動到什么程度。
分析一:配置字沒讀完,剛讀32bit,處理器就掛住了,沒有繼續(xù)讀取RCW(配置字)。
結(jié)論一:在讀取RCW的階段就掛死了。
措施一:查看和核對RCW。
問題二:RCW有什么錯誤,它的錯誤為什么會導(dǎo)致處理器掛死。
分析二:單板的RCW與DEMO板的RCW,除了內(nèi)容不同(硬件環(huán)境,設(shè)計需求不同),同時RCW的長度也不同。
Demo板的RCW
aa55 aa55 010e 01004c50 0000 0000 0000
5050 5050 0000 cccc 58400000 c03c2000
fe80 0000 0100 0000 0000 0000 0000 0000
0000 0000 00df 07fd a000 0000 0000 0000
0000 0000 0000 0000 0813 8040 ff3041a4
我們單板燒入的RCW沒有紅色的字。
結(jié)論二:RCW不單單是根據(jù)硬件設(shè)計,對各個數(shù)據(jù)進(jìn)行填寫,同時,CPU有校驗功能,在RCW的頭和尾都有校驗數(shù)據(jù)。這些配置字的生成,供應(yīng)商提供了一個工具,按照處理器的的設(shè)計,直接進(jìn)行選擇,然后可以直接生成完整的RCW。而我們之前的RCW校驗失敗,所以啟動失敗。
我們的設(shè)計方法直接借鑒公司大規(guī)模使用的單核PowerPC 8321的設(shè)計方法:1、閱讀器件資料,理解配置字的含義;2、列出配置字的內(nèi)容;3、整理成16進(jìn)制發(fā)給軟件工程師。
由于多核PPC的RCW變得復(fù)雜,且有校驗碼,所以P4080等多核PowerPC的RCW可以通過工具生成,工具如下:
措施二:利用工具生成RCW,燒入Flash。
問題三:RCW的數(shù)據(jù)正確了之后,仍然沒有打印。
分析三:配置字已經(jīng)跑過了,又掛在Bootrom。
看了一下波形,配置字跑完,又跑了40字節(jié)。
先懷疑配置字問題,我覺得沒有問題,依據(jù)是原來跑步起來,現(xiàn)在跑起來了。
我跟陳陸安又核對了一次配置字。并且發(fā)現(xiàn),處理器版本選擇V1.0、V2.0對于我們的單板來說,生成的配置字是一樣的。
BOOTROM的啟動掛死的比較前端,估計應(yīng)該沒有讀到BOOTROM。查看Flash燒片文件,第一條指令與RCW之間預(yù)留了若干位,其中填0,軟件多填了一行0.
發(fā)現(xiàn)軟件的起始地址不對。
下圖為我們需要的數(shù)據(jù)存儲在Flash的位置,RCW的存放位置為MPI Flash能夠讀取的最低地址。而BOOTROM的啟動地址是FFFF,FFFC。配置字的啟動地址:CS0的最低地址。
如下圖所示:
但是實際上我們是下面這樣弄的:
結(jié)論三:由于BootRom和RCW沒有存儲到CPU默認(rèn)讀取的地址,所以導(dǎo)致Bootrom沒有被讀到,所以啟動失敗。
措施四:于是我們考慮在Flash里面加載現(xiàn)有代碼兩個地方,
通過設(shè)置JTAG的起始地址,實現(xiàn)加載。
JTAG加載起始地址:127Mbytes,但是Flash的位寬為16bit,所以JTAG加載的起始地址:
127M = 127* 1024 *1024 = 0x7F00000。
0x7F00000 /2 =3F80000
最終的交付版本,是通過CPLD地址重定向?qū)崿F(xiàn)的RCW和BootRom存儲在連續(xù)地址。
問題四:串口可以打印,但是BOOTROM下的打印正常,但是進(jìn)入VxWorks之后,打印亂碼。
分析四:雖然打印了一堆亂碼,但是鍵盤可以輸入。根據(jù)判斷,單板已經(jīng)正常工作了,但是當(dāng)時懷疑是內(nèi)存問題導(dǎo)致的數(shù)據(jù)錯誤,導(dǎo)致打印亂碼。
分析四:通過仿真器,對內(nèi)存進(jìn)行批量讀寫操作,說明內(nèi)存的數(shù)據(jù)是正確的,排除了內(nèi)存的問題。
底軟的開發(fā)人員懷疑的VxWorks下的中斷錯誤,導(dǎo)致串口亂碼。當(dāng)時給出三條否定意見的依據(jù):
中斷服務(wù)程序很大不可能插入到前4k中,所以無法實現(xiàn)
為什么Demo可用,而我們單板不可用?
中斷問題,只會造成發(fā)送速率慢,而不會造成亂碼
通過查代碼發(fā)現(xiàn):
Demo板通過CS3讀取了數(shù)據(jù),用于配置處理器的大量寄存器。
Demo板的所有CS都是連接到FPGA的
Demo板子上面,F(xiàn)PGA的CS3如同我們CPLD寄存器。
里面有大量單板硬件信息。例如:
FLASH的映射方式
單板CPU主頻。
后續(xù),我們重點(diǎn)關(guān)注了這個:“單板CPU主頻。”
啟動時,BootRom是直接操作UART的,對UART初始化一次。進(jìn)入Vxworks之后,又對UART初始化一次。所以有可能把UART寄存器改了。
通過CS3讀出的處理器主頻,直接寫定。SYStemCLK是從CS3中讀取的,波特率是通過SYSTEMCLK分頻得出的。
1、 示波器測試UART的波特率:上電時為115200,后來亂碼之后為8k左右。
修改了SYSTEMCLK之后(由于我們的單板沒有CS3,所以原先從CS讀取SYSTEMCLK,導(dǎo)致了錯誤),出現(xiàn)VxWorks界面。串口打印正常。
結(jié)論四:通過固定處理器的SYSTEMCLK,實現(xiàn)VxWorks下的正常打印。
3、結(jié)論、解決方案及效果
單板在回板后,有大量的問題:
配置字校驗數(shù)據(jù)缺失;
BootRom的存儲地址問題;
VxWorks加載過程中修改了處理器主頻,導(dǎo)致串口亂碼。
4、經(jīng)驗總結(jié)、預(yù)防措施和規(guī)范建議
這不是一個什么高級的案例,但是每個使用新處理器的單板返還,都會有一段曲折的路走。
單板在返還后,如何不走這段彎路?
a、 每一個操作,都需要有依據(jù),例如BootRom的存儲位置等,這些不明確的話,肯定會引入問題。
b、 不要直接套用已有的經(jīng)驗,例如RCW在單核PowerPC和多核PowerPC的開發(fā)模式發(fā)生了變化,需要與供應(yīng)商充分溝通。
c、 硬件,軟件不要劃分界限,要相互滲透,在串口還沒有打印前的問題,需要所有開發(fā)人員都非常清楚,而不是相互推諉,相互依賴。
d、 問題定位,下一步的猜想,需要心思縝密,不是每個猜想都要去驗證。為了更好的項目進(jìn)度進(jìn)展,需要經(jīng)過邏輯判斷,否定一些錯誤的猜測和假象。但是這需要嚴(yán)密的邏輯思維,否則適得其反。
審核編輯:湯梓紅
-
處理器
+關(guān)注
關(guān)注
68文章
19313瀏覽量
230047 -
嵌入式
+關(guān)注
關(guān)注
5085文章
19138瀏覽量
305722 -
電路板
+關(guān)注
關(guān)注
140文章
4963瀏覽量
98031 -
Boot
+關(guān)注
關(guān)注
0文章
150瀏覽量
35846
原文標(biāo)題:回板后,處理器不啟動,怎么辦?
文章出處:【微信號:Hardware_10W,微信公眾號:硬件十萬個為什么】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論