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