首頁 >快訊 >

全球快報:【視頻版】基于飛騰芯片的設(shè)計與調(diào)試入門指導(dǎo)

飛騰愛好者技術(shù)交流群碼公眾號“烏拉大喵喵”

本文已錄制講解視頻發(fā)布到B站,可以搜索UP主“烏拉大喵喵”


(資料圖片僅供參考)

或者掃二維碼進(jìn)入B站專輯進(jìn)行查看:

一、啥是自主可控

國產(chǎn)CPU現(xiàn)在廠家細(xì)算起來其實有很多,現(xiàn)在華為、小米也在做自己的CPU,瑞芯微、全志等的SoC現(xiàn)在也是廣泛應(yīng)用。但是真正能叫做自主可控的CPU廠商,只有6家。那啥是自主可控?首先來不嚴(yán)謹(jǐn)?shù)闹v下現(xiàn)在數(shù)字芯片是怎么做的設(shè)計。FPGA大家都知道,可以通過Verilog或者VHDL等硬件編程語言實現(xiàn)硬件功能。比如,我要實現(xiàn)一個SPI控制8個LED燈的功能,可能從市面上找這種功能的芯片是沒有的,那么我就可以自己指定控制LED的指令,通過使用FPGA自己編成,解析SPI傳下來的指令,控制LED的亮滅。如果測試驗證沒有問題,那么就可以把FPGA的RTL拿出來,經(jīng)過處理拿去流片,流片完成給芯片起個名字,比如YKS2D8001,這就成為了市面上能夠?qū)崿F(xiàn)SPI接口控制8個LED的ASIC芯片了。同時,咱們FPGA的實現(xiàn)代碼,也可以拿出來當(dāng)成一個IP,以后誰要想使用FPGA來實現(xiàn)這個功能的時候,就可以拿來用而不用再單獨購買咱們流片完成的ASIC芯片YKS2D8001。

那么,咱們在做復(fù)雜功能FPGA的時候,比如xilinx的,咱們會調(diào)用xilinx提供的現(xiàn)成的IP,比如它的DDR控制器IP、PCIe IP或者更簡單些的串口IP、IIC IP。這些IP咱們在程序?qū)崿F(xiàn)時,是可以直接調(diào)用,根據(jù)xilinx提供的操作手冊把這個IP給用起來的,但是這個IP核的實現(xiàn)代碼,咱們是看不到的,如果咱們想改IP核內(nèi)的代碼,那肯定是沒辦法的。這就是非自主可控。自主可控,就是能夠掌握IP的所有代碼,自己想改就改。

飛騰就是國內(nèi)自主可控6家之一。也就是可以簡單的理解為飛騰芯片內(nèi)的每行代碼,每一個功能實現(xiàn),都是自己實現(xiàn)的。這里有人會說,飛騰不是arm64的么,那是arm的呀。是的,飛騰是arm64的,但是飛騰是購買的arm的指令集授權(quán)。指令集授權(quán)大家可以通俗的認(rèn)為就是購買了函數(shù)名,但是函數(shù)實現(xiàn)是自己做的。所以即使是arm64,也是自主可控的。

二、基于飛騰芯片的設(shè)計

2.1 最小系統(tǒng)硬件設(shè)計

要想讓飛騰CPU加電后跑起來,硬件設(shè)計上有幾個部分是必須有的。時鐘、供電、內(nèi)存、調(diào)試串口、QSPI Flash接口、存儲。下面就針對每個部分詳細(xì)說一下。

2.1.1 時鐘

時鐘不用多說,所有的芯片都需要時鐘。飛騰芯片需求的時鐘主要就是兩種,1是芯片的主時鐘48MHz,2就是芯片的PCIe控制器PEU的時鐘100MHz。這個100MHz時鐘要求PEU和外設(shè)同源,也就是從同一個時鐘發(fā)生器產(chǎn)生,HSCL電平標(biāo)準(zhǔn),AC耦合。并且設(shè)計時,即使PEU不用,PCIe時鐘也是要接的。

圖 CPU總的時鐘框圖

圖 PEU0的時鐘

圖 PEU1的時鐘

2.1.2 供電和電源管理

飛騰的電源種類并不多,需要0.8V(核電)、1.2V(VDDQ)、1.8V(IO)三種。其他電源域基本都可以直連或者通過磁珠連接到這三個電源中,這里就參考demo設(shè)計就可以了。

這里需要提示的是:

1.就近放置在芯片電源管腳下的電容為4.7uF,這里盡量不要修改。

2.CPU有一個3.3V的電源管腳,這里給供一個3.3V過來即可。

3.各個電的最大電流一定要查手冊,設(shè)計電源時一定要保證滿足。

4.各個電的紋波不能超5%。注意,這里說的是整個運行狀態(tài)下,就是BIOS階段、OS系統(tǒng)啟動和運行階段,是都不能超的。這里特別強(qiáng)調(diào),非常重要!

說到電源,就不得不說電源管理。借鑒x86的電源管理狀態(tài),飛騰CPU也有電源管理的幾個狀態(tài)。

圖 飛騰CPU電源狀態(tài)

S0就是正常工作的狀態(tài),S3就是類似window的睡眠,即待機(jī)狀態(tài)壓到內(nèi)存中,所以要求內(nèi)存一直帶電。S4/S5就是類似window的休眠和關(guān)機(jī),即待機(jī)狀態(tài)壓到硬盤,或者就是直接關(guān)機(jī)了,這個時候整板都會掉電。

那么有人問了,S4/S5是倆狀態(tài)呀?一個是休眠系統(tǒng)狀態(tài)壓到硬盤,一個是關(guān)機(jī),這倆放一起咋區(qū)分呢?其實不用區(qū)分,系統(tǒng)狀態(tài)壓到硬盤了,就已經(jīng)是被固定保存了,即使掉電也不會有數(shù)據(jù)丟失,這里應(yīng)該沒錯吧。所以對于電源管理來說,S4/S5狀態(tài)時都是要掉電的。那么S4、S5的區(qū)別,主要在下一次開機(jī)時。如果去看系統(tǒng)下去執(zhí)行休眠和關(guān)機(jī)時的log信息,可以看出,休眠和關(guān)機(jī)系統(tǒng)處理是不同的,他們會置不同的標(biāo)志。那么在下次開機(jī)的時候,這個置的標(biāo)志,就能夠告知系統(tǒng)要從哪種狀態(tài)啟動。

到這里,供電和電源管理的幾個狀態(tài)應(yīng)該就說清了,那么現(xiàn)在實際問題來了,供電我能明白,就是使用電源芯片供電嘛。那么這個電源管理,我咋做?

那么下面,我們就一個一個的來說。

首先,我們一個板子肯定是從未加電狀態(tài)轉(zhuǎn)為加電狀態(tài),讓CPU跑起來。那么對應(yīng)上面的狀態(tài),那就是S4/S5狀態(tài)到S0狀態(tài),也就是斷電關(guān)機(jī)狀態(tài)到上電工作狀態(tài)。這個狀態(tài)的控制,其實就是對CPU各個電源域上電時序的控制。所以,做硬件不用想太多,從未加電到加電讓CPU跑起來,換句話說就是從S4/S5狀態(tài)到S0狀態(tài)的實現(xiàn),就是你想辦法把你給CPU的各個電按下面時序跑完就好了。在保證電路設(shè)計的情況下哈,只要你按時序跑完,CPU肯定就啟動了,也就到了S0階段。

圖 S4/S5到S0開機(jī)時序圖

那么,你能猜到了吧,S0到S4/S5是咋弄,其實也一樣,也是跑電時序。但是……硬件工程師又問了,板子系統(tǒng)正好好的跑著呢,我咋知道要去跑掉電時序呢?這個問題問的很好。去執(zhí)行掉電時序,總是要收到信號的,那么這個信號在時序圖中是能夠看出來的,就是圖中標(biāo)綠的部分。PWR_CTR0、PWR_CTR1這兩個是CPU芯片上的兩個管腳,當(dāng)我們在OS系統(tǒng)下點了休眠或者關(guān)機(jī)命令時,系統(tǒng)肯定是要先去保存自己的狀態(tài)到硬盤,當(dāng)保存完了,OS會通過PWR_CTR0、PWR_CTR1這兩個管腳,發(fā)送脈沖出來(應(yīng)該是4脈沖代表重啟,8脈沖代表轉(zhuǎn)S3狀態(tài),12脈沖代表轉(zhuǎn)S4/S5狀態(tài)),告訴外邊可以去跑掉電時序了。外邊收到這個脈沖后,自己根據(jù)掉電時序去跑就可以了。

圖 S0到S4/S5關(guān)機(jī)時序圖

圖 PWR_CTR0、PWR_CTR1兩管腳

前面提到了PWR_CTR0、PWR_CTR1這兩個管腳把脈沖發(fā)給外邊,那么這個外邊是啥呢?這里外邊其實就是個控制器,單片機(jī)也好,CPLD也好,只要能夠數(shù)脈沖,能夠控電時序就好了。Demo圖一般用的都是CPLD。

圖 demo圖一般都是用CPLD做電源管理

那么又有人問了,我做筆記本難道還需要上一個CPLD控制電源么,一般筆記本都有EC呀,EC能用么?答案當(dāng)然是肯定的。所以這里又要說明一個事情,電源管理接口不只有上面PWR_CTR0、PWR_CTR1這兩管腳,也可以通過LPC,也可以通過IIC。要是外邊電源管理控制器使用CPLD或者M(jìn)CU等,那么建議就接到CPU PWR_CTR0、PWR_CTR1這兩管腳,通過數(shù)脈沖去判斷要執(zhí)行的狀態(tài)跳轉(zhuǎn)。要是使用EC的話,就要求把EC接到CPU的LPC接口上,通過LPC去通信狀態(tài)跳轉(zhuǎn)。要是用飛騰的套片X100做電源管理,就要求把CPU的IIC1接到X100的IIC上。那么OS系統(tǒng)在發(fā)送狀態(tài)跳轉(zhuǎn)的時候是怎么知道外邊接的是什么,要從哪個接口去傳輸命令呢,這個就是在BIOS生成的時候,有個配置選項,來告訴OS系統(tǒng)我外邊接的什么。

表 不同電源管理控制器使用的通訊接口和配置方式

涉及S3狀態(tài),有個管腳要特別說明一下:GPIO0_A1,這個腳的使用一定要好好看下手冊說明。當(dāng)主機(jī)從S3恢復(fù)到S0狀態(tài)時,板上的CPLD控制單位會通過信號引腳 K17(信號名 UART_0_CTS_N/GPIO0_A1)向CPU發(fā)送主板當(dāng)前的是否滿足S3→S0狀態(tài)的S3_OK信號。S3_OK 信號為高電平時候,表示可以正?;謴?fù)到S0。S3_OK信號為低時,通知CPU主板出現(xiàn)異常狀態(tài)(內(nèi)存掉電等情況),系統(tǒng)將重新啟動,而不是從 S3 恢復(fù)。如果設(shè)計上沒有S3的需求,那么這個GPIO0_A1要做拉低處理,不能不管,要不會出錯的。

2.1.3 內(nèi)存

飛騰CPU的內(nèi)存控制器做的還是比較好的,如果設(shè)計沒有硬傷,走線沒有太差,不管使用內(nèi)存條還是DDR顆粒,都會得到一個很好的訓(xùn)練參數(shù)支撐系統(tǒng)的運行。

首先要說的是,飛騰桌面CPU,F(xiàn)T-2000/4是支持DDR3和DDR4的,到D2000芯片是只支持DDR4的。這些內(nèi)容在芯片手冊中都有說明,這里特別拿出來提醒大家一下。

芯片是有兩個DDR控制器的,我們可以稱為兩個通道。每個控制器有4個片選信號,我們可以叫做4rank。所以,我們一個CPU最大的設(shè)計是這樣的:2個通道×4rank。像下圖一樣的設(shè)計,就可以插4條雙rank的內(nèi)存條。

圖 雙通道×4rank的D2000板卡

內(nèi)存控制器若按照 8bit 劃分為一個 slice,一個通道 72bit 可劃分為 9 個 slice(第9個,即slice[8]為ECC)。

DQ交換:在進(jìn)行X8兼容內(nèi)存的設(shè)計時,slice內(nèi)部的8個DQ可以自由互換。

Slice交換:slice[0:7]可以進(jìn)行slice之間交換。Slice[8]為ECC用途,不能與其它slice交換。若用戶需要使用ECC的內(nèi)存條,slice[8]必須與DIMM條上的slice [8]進(jìn)行連接。若確認(rèn)無需ECC功能,將slice [8]信號浮空即可。

這里還有個特別說明的地方,就是DDR控制器有個MEMRESET,這個是輸出到DDR上給DDR做復(fù)位的。前面在供電和電源管理章節(jié)里提到過,S3狀態(tài)是需要將待機(jī)狀態(tài)壓到內(nèi)存的,那么待機(jī)時就要求DDR不能掉電,當(dāng)然更不能被復(fù)位。因為S3狀態(tài)下除了DDR,包括CPU在內(nèi)的其他無用的電都是需要被關(guān)閉的,那么CPU這個MEMRESET一定是個無效的狀態(tài)。所以,如果我們的板卡應(yīng)用會有S3,也就是睡眠狀態(tài)的,這個MEMRESET就需要控制一下。

這個就是demo圖中的這個電路??梢钥吹剑珻PU輸出的MEM_RST是過了一個MOS的,這個MOS的控制端是接到了CPLD上,因為是不是從S0跳轉(zhuǎn)到S3狀態(tài),CPLD是可以通過PWR_CTR0、PWR_CTR1這兩個腳數(shù)脈沖來知道的,那么它也就知道是否需要控制MOS將CPU輸出的MEM_RST傳遞給DDR。

圖 demo圖中S3狀態(tài)對于MEMRESET的處理

2.1.4 調(diào)試串口

調(diào)試飛騰,要是不把調(diào)試串口引出來,那基本就等死就完了。

UART 接口電平為 1.8V CMOS 電平標(biāo)準(zhǔn),若使用的外設(shè)不兼 容 1.8V CMOS 電平,需進(jìn)行電平轉(zhuǎn)換;默認(rèn)UART_1為系統(tǒng)調(diào)試串口,用于輸出系統(tǒng)打印信息,波特率115200bps。記住,這玩意兒默認(rèn)就是串口1,不能改。你要非得改,要動的代碼千千萬,還不是你自己能改的了的,何必動它呢。你就用串口1就行了。

是用TTL還是RS232,根據(jù)硬件需求自己設(shè)計就好。

2.1.5 QSPI接口

前面提到好幾次CPU的BIOS,那么BIOS存放在哪?CPU啟動的時候從哪里讀呢?

都是從QSPI接口。QSPI 接口兼容 SPI,且作為啟動加載片外固件的唯一接口。CPU 啟動后,最先通過 QSPI 接口的 QSPI_CSN0 片選的 Flash 芯片加載固件,來執(zhí)行相關(guān)指令。固件正常執(zhí)行完成,才能在后面引導(dǎo)OS系統(tǒng)啟動。

圖 QSPI flash接口電路

QSPI Flash有16pin的、8pin的,1.8V的、3.3V的。設(shè)計時選取根據(jù)要自身的需求。并且最好選取大家常用的,飛騰兼容適配過的型號,同時建議flash最好16MB以上,8MB有的用起來還是小,會有問題。

2.1.6 存儲

這里存儲是個廣義的概念,也就是所有能存放OS的都可以叫做存儲,SD卡、NVME、SATA、NOR Flash都可以。他們作為OS存儲的要求很簡單,只要能放得下OS,能被固件讀寫就可。

一般咱們PC機(jī)都是用SATA硬盤作為存儲介質(zhì),飛騰CPU上沒有sata接口,如果要用sata硬盤做存儲,那就需要通過PCIe外擴(kuò)sata。如果不想外擴(kuò),那就用NVME SSD。如果系統(tǒng)比較小,比如一些實時系統(tǒng)Vxworks啥的,那么把系統(tǒng)生成bin文件,放到啟動用QSPI Flash剩余的空間也是可以的,當(dāng)然放到SD卡里也是可以的。要求前面也說過了,只要放的下,固件能看到這個存儲,能操作它就可以。

2.2 如何讓CPU開始工作?

2.2.1 上電時序

在前面2.1.2供電和電源管理章節(jié)講過,要讓CPU從未加電狀態(tài)到加電后工作狀態(tài),就是使CPU從S4/S5狀態(tài)轉(zhuǎn)到S0狀態(tài)。這個狀態(tài)跳轉(zhuǎn)其實就是通過外邊的電源管理控制器(CPLD或EC或X100)跑一下CPU的上電時序。

圖 CPU上電時序

這里提示一點,手冊里給出了上電時序的各個時序之間的延時t值,就是上面圖中的t1~t12,那就嚴(yán)格按照手冊來做就好了。不要去問不這么做會怎么樣。可能你設(shè)計的好,不這么做也能用,但是這個可法保證每次這么做都可以,手冊都給參數(shù)了,就按手冊做不就好了么。

上電時序跑完,CPU就會啟動了,它下一步就會去QSPI CS0接口去讀數(shù)據(jù)了,所以你如果不知道自己時序是不是好了,那就可以用示波器去量QSPI CS0是否有讀數(shù)據(jù)的動作,同時測量一下QSPI的時鐘,在固件加載前應(yīng)該是380KHz。也就是CS0是否有拉低的狀態(tài)。要是有拉低,那就說明CPU在嘗試去讀外置FLASH了,那么也就說明CPU上電正常了,已經(jīng)開始工作了。

2.2.2 固件

固件這個名字其實應(yīng)該不陌生,很多網(wǎng)卡,很多PCIe橋片都要燒EEPROM,那里面的Bin文件我們就叫固件。這里CPU啟動用的程序,我們也叫固件,借鑒X86的叫法,那就叫BIOS。只是個名字,不要糾結(jié),在飛騰這里基本都叫固件。

固件這里的情況匯總到下表:

表 飛騰CPU固件情況說明

固件提供方

廠家

費用

固件形式

對應(yīng)OS

聯(lián)系方式

飛騰

飛騰

免費

Uboot

實時系統(tǒng)(Vx+國內(nèi)實時系統(tǒng))

桌面系統(tǒng)(能用設(shè)備樹引導(dǎo)的開源linux)

聯(lián)系飛騰FAE

UEFI

桌面系統(tǒng)(麒麟+開源linux)

第三方

昆侖

收費

聯(lián)系廠商

聯(lián)系廠商

http://www.kunluntech.com.cn/lxwm

百敖

收費

http://www.byosoft.com.cn/rhgm/index.jhtml

國科銀河

收費

http://hngkyh.com/index.php?c=about&a=detail&id=14

通過上面的表我們可以發(fā)現(xiàn),要是使用免費的,那么就用飛騰提供的固件。飛騰固件有兩種形式,uboot或者UEFI。Uboot能引導(dǎo)實時系統(tǒng),比如vx類的,也能引導(dǎo)桌面系統(tǒng),但是桌面系統(tǒng)只能引導(dǎo)開源linux,換句話說就是只能引導(dǎo)能提供設(shè)備樹的桌面系統(tǒng)。UEFI只能引導(dǎo)桌面系統(tǒng),比如麒麟、ubuntu這類的。

那么有人問了,我想UEFI引導(dǎo)vx不可以么?可以,那么就用第三方收費的,這里只是飛騰的UEFI不支持。飛騰免費提供的就是解決大家調(diào)試用,比如你板子都來了,總不能等第三方定制的固件到了才能去引導(dǎo)系統(tǒng)去測試板子吧,這會兒你就可以用飛騰提供的固件先進(jìn)行測試,保證你的測試周期。同時這里也說明一點,飛騰的UEFI不是商用的交付用的固件,只是用于測試的,所以它有很多功能還是可以提升的,但是這里要是有定制功能,就需要自己去改了,飛騰只提供基礎(chǔ)版本夠你用,要是有定制功能,要么自己改,要么去找第三方固件廠商去購買。

飛騰固件我們拿uboot固件舉例,它是由uboot部分和PBF部分組成的。其中uboot是提供源碼的,PBF是閉源的bin文件。飛騰提供固件編譯環(huán)境、編譯方法指導(dǎo)等。這個可以查看網(wǎng)上的文章:

https://blog.csdn.net/yorkworlddream/article/details/125482429?spm=1001.2014.3001.5501

B站視頻:

https://www.bilibili.com/video/BV1h94y197ry/

https://www.bilibili.com/video/BV1ce4y197ze/

https://www.bilibili.com/video/BV1Fg411Z761/

里面將固件編譯配置方法講的很清楚了,我這里就不展開講了??偠灾痪湓挘褪秋w騰提供的固件配置環(huán)境和操作方法,能讓一個沒有搞過配置的硬件工程師都能很容易的把CPU的核心數(shù)、內(nèi)存、PCIe等進(jìn)行配置。

固件編譯完是一個bin文件,這個文件我們要通過燒片機(jī)寫器把它燒到我們QSPI FLASH,這個flash燒好后,放到CPU QSPI CS0接口上,CPU開機(jī)后就會去讀flash里的內(nèi)容了。所以為了調(diào)試方便,我們需要兩個東西,一個是燒片機(jī)寫器,一個就是盡量在CPU QSPI CS0接口上接一個調(diào)試座。

下面展示的就是燒寫器、燒寫器轉(zhuǎn)芯片座,和焊接到PCB板上的調(diào)試座。

燒寫器產(chǎn)品很多,這里示例的是碩飛的燒寫器和它對應(yīng)的16pin的轉(zhuǎn)接座,當(dāng)然你要是用8pin的flash,那就用8pin的轉(zhuǎn)接座。(碩飛公司看到可以聯(lián)系我打錢哈,●ˇ?ˇ●)

焊接到PCB上調(diào)試座主要就是方便flash的取換,因為調(diào)試中固件可能經(jīng)常要改參數(shù),要是沒有這個調(diào)試座,flash就要來來回回的拆下來燒寫再焊上這樣。

碩飛公司各燒寫器支持器件列表:

https://www.sflytech.com/devlist.asp?model=SP20P/SP20X/SP20F/SP20B

2.2.3 系統(tǒng)

固件調(diào)完,就要到系統(tǒng)了。我們后面都是基于飛騰固件來講的,使用第三方固件的不在我們討論范圍里。

系統(tǒng)的引導(dǎo)我們下面也要分幾種不同的情況進(jìn)行說明。表的形式列出:

表 不同固件下的系統(tǒng)引導(dǎo)

系統(tǒng)

采用固件

系統(tǒng)說明

桌面系統(tǒng)

Uboot

系統(tǒng)只能是在其他地方,將硬盤分好區(qū),在指定位置放好設(shè)備樹、系統(tǒng)鏡像、文件系統(tǒng)后,拔下來放到我們最終的板卡上,使用uboot通過設(shè)備引導(dǎo)系統(tǒng)啟動

UEFI

可以在最終板卡上,使用類似x86+windows的那種方法,把系統(tǒng)iso放到U盤里,在UEFI下通過U盤來安裝系統(tǒng)。系統(tǒng)引導(dǎo)時,是采用grub啟動系統(tǒng)。

實時系統(tǒng)

Uboot

把系統(tǒng)鏡像bin文件放到存儲器中,使用uboot命令找到bin,引導(dǎo)啟動。

2.3 設(shè)計資料獲取

資源類型

獲取渠道

硬件

芯片手冊,設(shè)計demo等

聯(lián)系飛騰FAE

PCIe外設(shè)、QSPI Flash等硬件兼容外設(shè)列表

通過飛騰官網(wǎng)→技術(shù)支持→硬件服務(wù)

https://phytium.com.cn/class/137

軟件

Uboot、UEFI源碼和固件編譯環(huán)境等

聯(lián)系飛騰FAE

飛騰linux內(nèi)核

聯(lián)系飛騰FAE

Vx BSP、裸跑、Yocto、Android、openHarmony等其他資源

通過gitee代碼倉庫

https://gitee.com/phytium_embedded

技術(shù)支持

飛騰有自己的技術(shù)支持平臺,是網(wǎng)頁版的,有基于飛騰的項目要做,通過銷售渠道或者技術(shù)渠道,找到飛騰的FAE。在技術(shù)支持平臺注冊賬號,建立項目,從項目獲取資料開始,所有的技術(shù)問題,包括設(shè)計中有問題,都可以從技術(shù)支持平臺上提工單要到支持,很方便。

(主要提示:一定要找飛騰技術(shù)支持部的FAE)

注冊和登錄網(wǎng)址:

https://serviceplus.phytium.com.cn/

注冊完賬號,要找飛騰FAE給審核賬號。

三、基于飛騰芯片的調(diào)試步驟

3.1 環(huán)境準(zhǔn)備

序號

設(shè)備名稱

用途

要求

1

串口線

用于連接飛騰CPU調(diào)試串口

根據(jù)硬件設(shè)計,要是TTL串口就用TTL串口線,要是RS232電平,就用RS232串口線

2

PC機(jī)

用于運行串口調(diào)試軟件

建議有兩種,一種就是SecureCRT,另外一種就是純字符型串口助手,比如sscom。因為SecureCRT它會解析終端命令比如退格、清屏啥的,導(dǎo)致log存的有的時候不全。所以要用sscom這類不執(zhí)行終端命令的串口調(diào)試助手把所有的串口信息都存下來。

3

萬用表

用來測量CPU各個電阻抗,保證沒有焊接短路

沒啥要求,不是十幾二十塊錢那種的就行

4

示波器

必要時用來測量QSPI 接口波形。必要時用來測量電源紋波。

沒啥要求,有表筆就行。要是測紋波,可是得有接地彈簧,能靠測。

3.2 靜態(tài)測量

3.2.1 測量靜態(tài)阻抗

將萬用表打到電阻檔位,然后分別測量 Vcore、VDDQ、VDDQ、VTT 的靜態(tài)阻抗。這里要提示一點,核電阻抗很低,很多都在1Ω、2Ω、3Ω都是正常的,換句話說,只要不是0Ω就行!很多人用二極管檔測阻抗,有的表一測核電阻抗就響了,不要光看響不響,要看看值。

3.2.2 測量電壓

在確保電路沒有存在短路的情況下,對電路板進(jìn)行上電,查看電路板上的核電壓、內(nèi)存電壓、IO 口電壓、3.3V 電壓、5V 電壓等是否正確。

這里電壓就自己去看手冊去對就好了。此時要是為了穩(wěn)妥,可以把紋波也量一量。但此時量到的只是靜態(tài)的電壓紋波,固件和系統(tǒng)跑起來,這個紋波和此時可能是不一致的。

3.3 加電前準(zhǔn)備

前面靜態(tài)做完,加電前的準(zhǔn)備工作基本就沒啥了,主要就是不管你是用CPLD還是EC還是X100,加電前一定要把上電時序保證了,至少你編程是照著時序去實現(xiàn)的。千萬不要連上電時序控都沒控,著急的就上電。

其次,就是固件要編好了,燒到了flash中,并且flash已經(jīng)放到了調(diào)試座上,也就是CPU可以通過QSPI CS0接口去讀flash里的固件了。

3.4 加電

3.4.1 調(diào)試串口有打印

3.4.1.1 能進(jìn)shell

調(diào)試串口有打印,并且能進(jìn)shell,這個真的是要恭喜你,板子調(diào)試太順利了。不過這么順利了,我們也要看看log,尤其是看看ddr訓(xùn)練部分訓(xùn)練的是否順利。因為即使我們DDR部分設(shè)計如果有問題,要是不是很致命的話,控制器會嘗試多次參數(shù)訓(xùn)練,最終找到能用的參數(shù)。我們要關(guān)心的是訓(xùn)練次數(shù),正常來說我們從log上,參數(shù)訓(xùn)練是很短的。要是我們看到log上有很多次的參數(shù)嘗試,那么說明咱們這個ddr還是有些問題。

下面是訓(xùn)練成功的log截圖,如果我們在達(dá)到success之前,反復(fù)出現(xiàn)過很多次紅框框出的那種信息,那么說明DDR控制器嘗試了很多參數(shù),最終才找到了一個合適。見過一些板子需要訓(xùn)練大概20s多,可以從log上看到很多很多個紅框的信息。這種說明DDR設(shè)計上不是很好,需要再仔細(xì)查一查。

圖 log中內(nèi)存訓(xùn)練部分截圖

進(jìn)了shell,我們就可以敲命令了。

uboot飛騰是在公版的上面改的,所有命令都是兼容的,我們可以搜uboot命令就可以了。環(huán)境變量的:Printenv、setenv、saveenv。寄存器讀寫:md、mw。PCIe外設(shè)掃描:pci e。

UEFI也是兼容公版UEFI的。寄存器讀寫:mm。PCIe外設(shè)掃描:pci。網(wǎng)絡(luò):ifconfig、ping。

這個我們后面也單獨出一個文檔,這里也是簡要說明一下。

3.4.1.2不能進(jìn)shell

串口有打印,但是卡半截,不能跑到shell,這里絕大多數(shù)都是硬件問題。我們要根據(jù)打印來判斷可能的故障點。

這個問題點很多,我們后面也是單獨出文章來說明。這里單獨提示一點,串口卡了這時候要用示波器測紋波了。因為固件已經(jīng)開始跑了,如果紋波很大,可能會出現(xiàn)卡在很多位置,這個就沒法判斷了,所以固件咋調(diào)都過不去,紋波是必須要量的,尤其是核電的,不能超5%。

3.4.2 串口無打印

加電后串口都沒有打印,那么我們首先就是要用示波器量下QSPI的時鐘和片選。

QSPI 接口作為啟動加載片外固件的唯一接口。CPU上電后后,通過QSPI接口的QSPI_CSN0片選的Flash芯片加載固件,來執(zhí)行相關(guān)指令。因此需要查看 QSPI 的時鐘信號(QSPI讀固件之前時鐘以及讀完之后固件配置的時鐘),QSPI讀固件之前時鐘頻率應(yīng)為380KHz左右,網(wǎng)安版的應(yīng)該是4.6MHz。

表 串口無打印各種可能性分析

QSPI時鐘和片選

故障可能性

解決方法

看上電時序,測量系統(tǒng)時鐘

測量上電時序,保證與手冊一致。測量系統(tǒng)時鐘,保證滿足芯片要求。

Flash是否適配過

查飛騰官網(wǎng)適配型號,看是否進(jìn)行過兼容適配

Flash電平與CPU電平是否一致,因為有的設(shè)計可能采用了3.3V flash,接到CPU上時往了過電平轉(zhuǎn)換芯片了

要是真是電壓不一致,盡量就是換電平一致的flash芯片再試試了

Flash有沒有虛焊。

Flash各個腳都測測,都量量的吧

測量CPU芯片調(diào)試串口的管腳處,看看是否有波形,有可能是串口通路上串口芯片或者調(diào)試串口線或者串口軟件啥的有問題呢

這個就讓硬件工程師來測吧,這個要不會他也做不了飛騰的板子

3.5 系統(tǒng)引導(dǎo)

使用uefi去安裝引導(dǎo)系統(tǒng),請看文章:

https://blog.csdn.net/yorkworlddream/article/details/124866224

使用uboot去制作系統(tǒng),引導(dǎo)系統(tǒng),請參考倉庫說明:

https://gitee.com/phytium_embedded/phytium-linux-buildroot

附錄:文中涉及到的外部文章匯總:

內(nèi)容

鏈接

飛騰技術(shù)支持平臺

https://serviceplus.phytium.com.cn/

飛騰固件編譯指導(dǎo)

https://blog.csdn.net/yorkworlddream/article/details/125482429?spm=1001.2014.3001.5501

https://www.bilibili.com/video/BV1h94y197ry/

https://www.bilibili.com/video/BV1ce4y197ze/

https://www.bilibili.com/video/BV1Fg411Z761/

飛騰外設(shè)兼容列表

https://phytium.com.cn/class/137

飛騰gitee代碼倉庫

https://gitee.com/phytium_embedded

uefi去安裝引導(dǎo)系統(tǒng)

https://blog.csdn.net/yorkworlddream/article/details/124866224

uboot去制作系統(tǒng),引導(dǎo)系統(tǒng)

https://gitee.com/phytium_embedded/phytium-linux-buildroot

碩飛燒寫器支持列表

https://www.sflytech.com/devlist.asp?model=SP20P/SP20X/SP20F/SP20B

昆侖固件

http://www.kunluntech.com.cn/lxwm

百敖固件

http://www.byosoft.com.cn/rhgm/index.jhtml

科華固件

http://hngkyh.com/index.php?c=about&a=detail&id=14

飛騰愛好者技術(shù)交流群碼公眾號“烏拉大喵喵”

關(guān)鍵詞:

責(zé)任編輯:Rex_24