天天看點

晶片啟動調試一般方法

  在晶片樣片流片回來之後,所有的人最關心的就是新的功能是否正常、舊版本發現的問題是否解決,這就需要把樣片替代驗證系統裡老晶片,重新把系統跑起來進行驗證。在樣片階段,可能由于封裝比較簡陋、成品率很低等方面原因導緻出現各種奇怪的問題。 由于晶片的驗證系統涵蓋了晶片驗證闆卡、新晶片、啟動固件(BIOS)、作業系統等,是以可以按照從硬體到軟體、從最底層到最上層的層次進行逐一排查。

檢查主機闆靜态設定

這裡所說的主機闆靜态設定是指驗證系統在上電前後一些不再變化的跳線帽、撥碼開關,這些設定通常用來設定系統通路頻率、取指模式等,具體的說明如下:

是否上電成功:并不是所有的情況下AC cord連接配接到了驗證闆卡上,就能保證系統一定能夠上電。考慮下面的三種情況:AC停電了,電源故障導緻無法輸出期望的DC,或者DC處于power off狀态,或者PSU固件問題。這些情況,都需要考慮到。

CPU倍頻系數:CPU倍頻系數,是指CPU實際運作的頻率相對于CPU基準時鐘頻率的倍數。任何晶片都有最高的設計頻率和最低頻率,頻率過高或者過低都會導緻CPU取指、運作異常。

記憶體倍頻系數:是指記憶體運作的頻率相對于記憶體基準時鐘頻率的倍數。如果頻率超過設計頻率,就會出現内初始化失敗或者系統跑飛的問題。

總線倍頻系數:是指外部總線(HT、PCIE)總線實際運作頻率相對于基準時鐘的倍數。如果設定不對可能出現總線初始化失敗的問題。

取指模式:SPI/LPC

CPU剛開始執行的時候,最早的一部分指令都是從Flash中取指執行的。為了提高取指執行的速度,目前很多CPU最早都是從SPI Flash中去取指令,但還有早期的部分CPU仍然從LPC Flash取指。有的主機闆上,這些是通過一個跳線設定的,是以調試時候需要主意:如果是從SPI/LPC Flash中區指,需要保證對應型号的FLash晶片放置在正确的Flash位置,否則會導緻無法取指執行。

BIOS晶片:

BIOS晶片可能由于燒寫失敗,或者放置位置錯誤、固件二進制錯誤等導緻系統上電後無法正常引導。

如果上面的對主機闆的靜态檢查沒有問題,但是BIOS或者系統還是不能正常啟動,那麼還需要進行下面的動态檢查:

檢查主機闆動上電狀态:可以通過萬用表測量CPU核心電壓、IO電壓等是否在額定範圍之内,如果CPU核心電壓為0,自然會導緻系統無法正常取指,這時需要排查AC2DC電源是否正常、主機闆有無故障。

檢查取指時序是否正确:

CPU最早階段不管是從LPC Flash還是SPI Flash取指,實際都是按照LPC、SPI協定規範約定的時序去執行。為了排除時序的問題,可以通過示波器抓取相應的時鐘信号、控制信号分析波形是否符号時序要求。

觀察CPU、記憶體、總線基準時鐘的晶振是否起振:

作為基準時鐘的晶振是整個系統的實體心跳。如果晶振和主機闆接觸不良或者不在主機闆上,或者晶振不能産生額定頻率的方波,都會導緻系統啟動異常。

檢查能否取指

如果上述檢查都通過,但還是無法執行,需要檢查驗證闆卡上CPU和對應的插槽是否接觸緊密,也需要排除碰到殘次CPU的可能。

    一旦前面所有的檢查都沒有問題,理論上CPU應該可以取指執行。為了更好地跟蹤啟動的過程,及時定位并分析啟動失敗的現象和原因,需要讓BIOS裡盡早初始化好序列槽、七段數位管或者GPIO/LED燈等,并且在BIOS裡每個重要的啟動步驟列印輸出,或者點LED燈和往7段數位管裡顯示約定的輸出。當然,如果系統上有BMC的話,還可以通過BMC來讀取目前的啟動代碼。

    此外,如果系統支援EJTAG工具,還可以連接配接上EJTAG線纜工具,跟蹤啟動階段PC運作的軌迹。比如在MIPS系統上,下面的不同PC代碼代表着不同的啟動階段:

BFCxxxxxxx: 剛從Flash開始取指uncache執行的階段

9FCxxxxxxxx:從Flash開始取指使能cache執行的階段

8002xxxxxxx: 從記憶體取指以cache方式執行的PMON階段

802xxxxxxxx:從記憶體取指cache執行的kernel核心态 階段

    總而言之,晶片調試過程中,需要結合CPU、BIOS、多種總線協定的知識,利用對主機闆硬體上電、時序的了解,盡可能充分使用序列槽、萬用表、示波器、EJTAG等工具,加快調試過程。

本文轉自存儲之廚51CTO部落格,原文連結:http://blog.51cto.com/xiamachao/1773737 ,如需轉載請自行聯系原作者

繼續閱讀