飛騰愛(ài)好者技術(shù)交流群碼公眾號(hào)“烏拉大喵喵”
本文已錄制講解視頻發(fā)布到B站,可以搜索UP主“烏拉大喵喵”
(資料圖片僅供參考)
或者掃二維碼進(jìn)入B站專(zhuān)輯進(jìn)行查看:
一、啥是自主可控
國(guó)產(chǎn)CPU現(xiàn)在廠家細(xì)算起來(lái)其實(shí)有很多,現(xiàn)在華為、小米也在做自己的CPU,瑞芯微、全志等的SoC現(xiàn)在也是廣泛應(yīng)用。但是真正能叫做自主可控的CPU廠商,只有6家。那啥是自主可控?首先來(lái)不嚴(yán)謹(jǐn)?shù)闹v下現(xiàn)在數(shù)字芯片是怎么做的設(shè)計(jì)。FPGA大家都知道,可以通過(guò)Verilog或者VHDL等硬件編程語(yǔ)言實(shí)現(xiàn)硬件功能。比如,我要實(shí)現(xiàn)一個(gè)SPI控制8個(gè)LED燈的功能,可能從市面上找這種功能的芯片是沒(méi)有的,那么我就可以自己指定控制LED的指令,通過(guò)使用FPGA自己編成,解析SPI傳下來(lái)的指令,控制LED的亮滅。如果測(cè)試驗(yàn)證沒(méi)有問(wèn)題,那么就可以把FPGA的RTL拿出來(lái),經(jīng)過(guò)處理拿去流片,流片完成給芯片起個(gè)名字,比如YKS2D8001,這就成為了市面上能夠?qū)崿F(xiàn)SPI接口控制8個(gè)LED的ASIC芯片了。同時(shí),咱們FPGA的實(shí)現(xiàn)代碼,也可以拿出來(lái)當(dāng)成一個(gè)IP,以后誰(shuí)要想使用FPGA來(lái)實(shí)現(xiàn)這個(gè)功能的時(shí)候,就可以拿來(lái)用而不用再單獨(dú)購(gòu)買(mǎi)咱們流片完成的ASIC芯片YKS2D8001。
那么,咱們?cè)谧鰪?fù)雜功能FPGA的時(shí)候,比如xilinx的,咱們會(huì)調(diào)用xilinx提供的現(xiàn)成的IP,比如它的DDR控制器IP、PCIe IP或者更簡(jiǎn)單些的串口IP、IIC IP。這些IP咱們?cè)诔绦驅(qū)崿F(xiàn)時(shí),是可以直接調(diào)用,根據(jù)xilinx提供的操作手冊(cè)把這個(gè)IP給用起來(lái)的,但是這個(gè)IP核的實(shí)現(xiàn)代碼,咱們是看不到的,如果咱們想改IP核內(nèi)的代碼,那肯定是沒(méi)辦法的。這就是非自主可控。自主可控,就是能夠掌握IP的所有代碼,自己想改就改。
飛騰就是國(guó)內(nèi)自主可控6家之一。也就是可以簡(jiǎn)單的理解為飛騰芯片內(nèi)的每行代碼,每一個(gè)功能實(shí)現(xiàn),都是自己實(shí)現(xiàn)的。這里有人會(huì)說(shuō),飛騰不是arm64的么,那是arm的呀。是的,飛騰是arm64的,但是飛騰是購(gòu)買(mǎi)的arm的指令集授權(quán)。指令集授權(quán)大家可以通俗的認(rèn)為就是購(gòu)買(mǎi)了函數(shù)名,但是函數(shù)實(shí)現(xiàn)是自己做的。所以即使是arm64,也是自主可控的。
二、基于飛騰芯片的設(shè)計(jì)
2.1 最小系統(tǒng)硬件設(shè)計(jì)
要想讓飛騰CPU加電后跑起來(lái),硬件設(shè)計(jì)上有幾個(gè)部分是必須有的。時(shí)鐘、供電、內(nèi)存、調(diào)試串口、QSPI Flash接口、存儲(chǔ)。下面就針對(duì)每個(gè)部分詳細(xì)說(shuō)一下。
2.1.1 時(shí)鐘
時(shí)鐘不用多說(shuō),所有的芯片都需要時(shí)鐘。飛騰芯片需求的時(shí)鐘主要就是兩種,1是芯片的主時(shí)鐘48MHz,2就是芯片的PCIe控制器PEU的時(shí)鐘100MHz。這個(gè)100MHz時(shí)鐘要求PEU和外設(shè)同源,也就是從同一個(gè)時(shí)鐘發(fā)生器產(chǎn)生,HSCL電平標(biāo)準(zhǔn),AC耦合。并且設(shè)計(jì)時(shí),即使PEU不用,PCIe時(shí)鐘也是要接的。
圖 CPU總的時(shí)鐘框圖
圖 PEU0的時(shí)鐘
圖 PEU1的時(shí)鐘
2.1.2 供電和電源管理
飛騰的電源種類(lèi)并不多,需要0.8V(核電)、1.2V(VDDQ)、1.8V(IO)三種。其他電源域基本都可以直連或者通過(guò)磁珠連接到這三個(gè)電源中,這里就參考demo設(shè)計(jì)就可以了。
這里需要提示的是:
1.就近放置在芯片電源管腳下的電容為4.7uF,這里盡量不要修改。
2.CPU有一個(gè)3.3V的電源管腳,這里給供一個(gè)3.3V過(guò)來(lái)即可。
3.各個(gè)電的最大電流一定要查手冊(cè),設(shè)計(jì)電源時(shí)一定要保證滿足。
4.各個(gè)電的紋波不能超5%。注意,這里說(shuō)的是整個(gè)運(yùn)行狀態(tài)下,就是BIOS階段、OS系統(tǒng)啟動(dòng)和運(yùn)行階段,是都不能超的。這里特別強(qiáng)調(diào),非常重要!
說(shuō)到電源,就不得不說(shuō)電源管理。借鑒x86的電源管理狀態(tài),飛騰CPU也有電源管理的幾個(gè)狀態(tài)。
圖 飛騰CPU電源狀態(tài)
S0就是正常工作的狀態(tài),S3就是類(lèi)似window的睡眠,即待機(jī)狀態(tài)壓到內(nèi)存中,所以要求內(nèi)存一直帶電。S4/S5就是類(lèi)似window的休眠和關(guān)機(jī),即待機(jī)狀態(tài)壓到硬盤(pán),或者就是直接關(guān)機(jī)了,這個(gè)時(shí)候整板都會(huì)掉電。
那么有人問(wèn)了,S4/S5是倆狀態(tài)呀?一個(gè)是休眠系統(tǒng)狀態(tài)壓到硬盤(pán),一個(gè)是關(guān)機(jī),這倆放一起咋區(qū)分呢?其實(shí)不用區(qū)分,系統(tǒng)狀態(tài)壓到硬盤(pán)了,就已經(jīng)是被固定保存了,即使掉電也不會(huì)有數(shù)據(jù)丟失,這里應(yīng)該沒(méi)錯(cuò)吧。所以對(duì)于電源管理來(lái)說(shuō),S4/S5狀態(tài)時(shí)都是要掉電的。那么S4、S5的區(qū)別,主要在下一次開(kāi)機(jī)時(shí)。如果去看系統(tǒng)下去執(zhí)行休眠和關(guān)機(jī)時(shí)的log信息,可以看出,休眠和關(guān)機(jī)系統(tǒng)處理是不同的,他們會(huì)置不同的標(biāo)志。那么在下次開(kāi)機(jī)的時(shí)候,這個(gè)置的標(biāo)志,就能夠告知系統(tǒng)要從哪種狀態(tài)啟動(dòng)。
到這里,供電和電源管理的幾個(gè)狀態(tài)應(yīng)該就說(shuō)清了,那么現(xiàn)在實(shí)際問(wèn)題來(lái)了,供電我能明白,就是使用電源芯片供電嘛。那么這個(gè)電源管理,我咋做?
那么下面,我們就一個(gè)一個(gè)的來(lái)說(shuō)。
首先,我們一個(gè)板子肯定是從未加電狀態(tài)轉(zhuǎn)為加電狀態(tài),讓CPU跑起來(lái)。那么對(duì)應(yīng)上面的狀態(tài),那就是S4/S5狀態(tài)到S0狀態(tài),也就是斷電關(guān)機(jī)狀態(tài)到上電工作狀態(tài)。這個(gè)狀態(tài)的控制,其實(shí)就是對(duì)CPU各個(gè)電源域上電時(shí)序的控制。所以,做硬件不用想太多,從未加電到加電讓CPU跑起來(lái),換句話說(shuō)就是從S4/S5狀態(tài)到S0狀態(tài)的實(shí)現(xiàn),就是你想辦法把你給CPU的各個(gè)電按下面時(shí)序跑完就好了。在保證電路設(shè)計(jì)的情況下哈,只要你按時(shí)序跑完,CPU肯定就啟動(dòng)了,也就到了S0階段。
圖 S4/S5到S0開(kāi)機(jī)時(shí)序圖
那么,你能猜到了吧,S0到S4/S5是咋弄,其實(shí)也一樣,也是跑電時(shí)序。但是……硬件工程師又問(wèn)了,板子系統(tǒng)正好好的跑著呢,我咋知道要去跑掉電時(shí)序呢?這個(gè)問(wèn)題問(wèn)的很好。去執(zhí)行掉電時(shí)序,總是要收到信號(hào)的,那么這個(gè)信號(hào)在時(shí)序圖中是能夠看出來(lái)的,就是圖中標(biāo)綠的部分。PWR_CTR0、PWR_CTR1這兩個(gè)是CPU芯片上的兩個(gè)管腳,當(dāng)我們?cè)贠S系統(tǒng)下點(diǎn)了休眠或者關(guān)機(jī)命令時(shí),系統(tǒng)肯定是要先去保存自己的狀態(tài)到硬盤(pán),當(dāng)保存完了,OS會(huì)通過(guò)PWR_CTR0、PWR_CTR1這兩個(gè)管腳,發(fā)送脈沖出來(lái)(應(yīng)該是4脈沖代表重啟,8脈沖代表轉(zhuǎn)S3狀態(tài),12脈沖代表轉(zhuǎn)S4/S5狀態(tài)),告訴外邊可以去跑掉電時(shí)序了。外邊收到這個(gè)脈沖后,自己根據(jù)掉電時(shí)序去跑就可以了。
圖 S0到S4/S5關(guān)機(jī)時(shí)序圖
圖 PWR_CTR0、PWR_CTR1兩管腳
前面提到了PWR_CTR0、PWR_CTR1這兩個(gè)管腳把脈沖發(fā)給外邊,那么這個(gè)外邊是啥呢?這里外邊其實(shí)就是個(gè)控制器,單片機(jī)也好,CPLD也好,只要能夠數(shù)脈沖,能夠控電時(shí)序就好了。Demo圖一般用的都是CPLD。
圖 demo圖一般都是用CPLD做電源管理
那么又有人問(wèn)了,我做筆記本難道還需要上一個(gè)CPLD控制電源么,一般筆記本都有EC呀,EC能用么?答案當(dāng)然是肯定的。所以這里又要說(shuō)明一個(gè)事情,電源管理接口不只有上面PWR_CTR0、PWR_CTR1這兩管腳,也可以通過(guò)LPC,也可以通過(guò)IIC。要是外邊電源管理控制器使用CPLD或者M(jìn)CU等,那么建議就接到CPU PWR_CTR0、PWR_CTR1這兩管腳,通過(guò)數(shù)脈沖去判斷要執(zhí)行的狀態(tài)跳轉(zhuǎn)。要是使用EC的話,就要求把EC接到CPU的LPC接口上,通過(guò)LPC去通信狀態(tài)跳轉(zhuǎn)。要是用飛騰的套片X100做電源管理,就要求把CPU的IIC1接到X100的IIC上。那么OS系統(tǒng)在發(fā)送狀態(tài)跳轉(zhuǎn)的時(shí)候是怎么知道外邊接的是什么,要從哪個(gè)接口去傳輸命令呢,這個(gè)就是在BIOS生成的時(shí)候,有個(gè)配置選項(xiàng),來(lái)告訴OS系統(tǒng)我外邊接的什么。
表 不同電源管理控制器使用的通訊接口和配置方式
涉及S3狀態(tài),有個(gè)管腳要特別說(shuō)明一下:GPIO0_A1,這個(gè)腳的使用一定要好好看下手冊(cè)說(shuō)明。當(dāng)主機(jī)從S3恢復(fù)到S0狀態(tài)時(shí),板上的CPLD控制單位會(huì)通過(guò)信號(hào)引腳 K17(信號(hào)名 UART_0_CTS_N/GPIO0_A1)向CPU發(fā)送主板當(dāng)前的是否滿足S3→S0狀態(tài)的S3_OK信號(hào)。S3_OK 信號(hào)為高電平時(shí)候,表示可以正?;謴?fù)到S0。S3_OK信號(hào)為低時(shí),通知CPU主板出現(xiàn)異常狀態(tài)(內(nèi)存掉電等情況),系統(tǒng)將重新啟動(dòng),而不是從 S3 恢復(fù)。如果設(shè)計(jì)上沒(méi)有S3的需求,那么這個(gè)GPIO0_A1要做拉低處理,不能不管,要不會(huì)出錯(cuò)的。
2.1.3 內(nèi)存
飛騰CPU的內(nèi)存控制器做的還是比較好的,如果設(shè)計(jì)沒(méi)有硬傷,走線沒(méi)有太差,不管使用內(nèi)存條還是DDR顆粒,都會(huì)得到一個(gè)很好的訓(xùn)練參數(shù)支撐系統(tǒng)的運(yùn)行。
首先要說(shuō)的是,飛騰桌面CPU,F(xiàn)T-2000/4是支持DDR3和DDR4的,到D2000芯片是只支持DDR4的。這些內(nèi)容在芯片手冊(cè)中都有說(shuō)明,這里特別拿出來(lái)提醒大家一下。
芯片是有兩個(gè)DDR控制器的,我們可以稱(chēng)為兩個(gè)通道。每個(gè)控制器有4個(gè)片選信號(hào),我們可以叫做4rank。所以,我們一個(gè)CPU最大的設(shè)計(jì)是這樣的:2個(gè)通道×4rank。像下圖一樣的設(shè)計(jì),就可以插4條雙rank的內(nèi)存條。
圖 雙通道×4rank的D2000板卡
內(nèi)存控制器若按照 8bit 劃分為一個(gè) slice,一個(gè)通道 72bit 可劃分為 9 個(gè) slice(第9個(gè),即slice[8]為ECC)。
DQ交換:在進(jìn)行X8兼容內(nèi)存的設(shè)計(jì)時(shí),slice內(nèi)部的8個(gè)DQ可以自由互換。
Slice交換:slice[0:7]可以進(jìn)行slice之間交換。Slice[8]為ECC用途,不能與其它slice交換。若用戶需要使用ECC的內(nèi)存條,slice[8]必須與DIMM條上的slice [8]進(jìn)行連接。若確認(rèn)無(wú)需ECC功能,將slice [8]信號(hào)浮空即可。
這里還有個(gè)特別說(shuō)明的地方,就是DDR控制器有個(gè)MEMRESET,這個(gè)是輸出到DDR上給DDR做復(fù)位的。前面在供電和電源管理章節(jié)里提到過(guò),S3狀態(tài)是需要將待機(jī)狀態(tài)壓到內(nèi)存的,那么待機(jī)時(shí)就要求DDR不能掉電,當(dāng)然更不能被復(fù)位。因?yàn)镾3狀態(tài)下除了DDR,包括CPU在內(nèi)的其他無(wú)用的電都是需要被關(guān)閉的,那么CPU這個(gè)MEMRESET一定是個(gè)無(wú)效的狀態(tài)。所以,如果我們的板卡應(yīng)用會(huì)有S3,也就是睡眠狀態(tài)的,這個(gè)MEMRESET就需要控制一下。
這個(gè)就是demo圖中的這個(gè)電路??梢钥吹?,CPU輸出的MEM_RST是過(guò)了一個(gè)MOS的,這個(gè)MOS的控制端是接到了CPLD上,因?yàn)槭遣皇菑腟0跳轉(zhuǎn)到S3狀態(tài),CPLD是可以通過(guò)PWR_CTR0、PWR_CTR1這兩個(gè)腳數(shù)脈沖來(lái)知道的,那么它也就知道是否需要控制MOS將CPU輸出的MEM_RST傳遞給DDR。
圖 demo圖中S3狀態(tài)對(duì)于MEMRESET的處理
2.1.4 調(diào)試串口
調(diào)試飛騰,要是不把調(diào)試串口引出來(lái),那基本就等死就完了。
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,不能改。你要非得改,要?jiǎng)拥拇a千千萬(wàn),還不是你自己能改的了的,何必動(dòng)它呢。你就用串口1就行了。
是用TTL還是RS232,根據(jù)硬件需求自己設(shè)計(jì)就好。
2.1.5 QSPI接口
前面提到好幾次CPU的BIOS,那么BIOS存放在哪?CPU啟動(dòng)的時(shí)候從哪里讀呢?
都是從QSPI接口。QSPI 接口兼容 SPI,且作為啟動(dòng)加載片外固件的唯一接口。CPU 啟動(dòng)后,最先通過(guò) QSPI 接口的 QSPI_CSN0 片選的 Flash 芯片加載固件,來(lái)執(zhí)行相關(guān)指令。固件正常執(zhí)行完成,才能在后面引導(dǎo)OS系統(tǒng)啟動(dòng)。
圖 QSPI flash接口電路
QSPI Flash有16pin的、8pin的,1.8V的、3.3V的。設(shè)計(jì)時(shí)選取根據(jù)要自身的需求。并且最好選取大家常用的,飛騰兼容適配過(guò)的型號(hào),同時(shí)建議flash最好16MB以上,8MB有的用起來(lái)還是小,會(huì)有問(wèn)題。
2.1.6 存儲(chǔ)
這里存儲(chǔ)是個(gè)廣義的概念,也就是所有能存放OS的都可以叫做存儲(chǔ),SD卡、NVME、SATA、NOR Flash都可以。他們作為OS存儲(chǔ)的要求很簡(jiǎn)單,只要能放得下OS,能被固件讀寫(xiě)就可。
一般咱們PC機(jī)都是用SATA硬盤(pán)作為存儲(chǔ)介質(zhì),飛騰CPU上沒(méi)有sata接口,如果要用sata硬盤(pán)做存儲(chǔ),那就需要通過(guò)PCIe外擴(kuò)sata。如果不想外擴(kuò),那就用NVME SSD。如果系統(tǒng)比較小,比如一些實(shí)時(shí)系統(tǒng)Vxworks啥的,那么把系統(tǒng)生成bin文件,放到啟動(dòng)用QSPI Flash剩余的空間也是可以的,當(dāng)然放到SD卡里也是可以的。要求前面也說(shuō)過(guò)了,只要放的下,固件能看到這個(gè)存儲(chǔ),能操作它就可以。
2.2 如何讓CPU開(kāi)始工作?
2.2.1 上電時(shí)序
在前面2.1.2供電和電源管理章節(jié)講過(guò),要讓CPU從未加電狀態(tài)到加電后工作狀態(tài),就是使CPU從S4/S5狀態(tài)轉(zhuǎn)到S0狀態(tài)。這個(gè)狀態(tài)跳轉(zhuǎn)其實(shí)就是通過(guò)外邊的電源管理控制器(CPLD或EC或X100)跑一下CPU的上電時(shí)序。
圖 CPU上電時(shí)序
這里提示一點(diǎn),手冊(cè)里給出了上電時(shí)序的各個(gè)時(shí)序之間的延時(shí)t值,就是上面圖中的t1~t12,那就嚴(yán)格按照手冊(cè)來(lái)做就好了。不要去問(wèn)不這么做會(huì)怎么樣??赡苣阍O(shè)計(jì)的好,不這么做也能用,但是這個(gè)可沒(méi)法保證每次這么做都可以,手冊(cè)都給參數(shù)了,就按手冊(cè)做不就好了么。
上電時(shí)序跑完,CPU就會(huì)啟動(dòng)了,它下一步就會(huì)去QSPI CS0接口去讀數(shù)據(jù)了,所以你如果不知道自己時(shí)序是不是好了,那就可以用示波器去量QSPI CS0是否有讀數(shù)據(jù)的動(dòng)作,同時(shí)測(cè)量一下QSPI的時(shí)鐘,在固件加載前應(yīng)該是380KHz。也就是CS0是否有拉低的狀態(tài)。要是有拉低,那就說(shuō)明CPU在嘗試去讀外置FLASH了,那么也就說(shuō)明CPU上電正常了,已經(jīng)開(kāi)始工作了。
2.2.2 固件
固件這個(gè)名字其實(shí)應(yīng)該不陌生,很多網(wǎng)卡,很多PCIe橋片都要燒EEPROM,那里面的Bin文件我們就叫固件。這里CPU啟動(dòng)用的程序,我們也叫固件,借鑒X86的叫法,那就叫BIOS。只是個(gè)名字,不要糾結(jié),在飛騰這里基本都叫固件。
固件這里的情況匯總到下表:
表 飛騰CPU固件情況說(shuō)明
固件提供方 | 廠家 | 費(fèi)用 | 固件形式 | 對(duì)應(yīng)OS | 聯(lián)系方式 |
飛騰 | 飛騰 | 免費(fèi) | Uboot | 實(shí)時(shí)系統(tǒng)(Vx+國(guó)內(nèi)實(shí)時(shí)系統(tǒng)) 桌面系統(tǒng)(能用設(shè)備樹(shù)引導(dǎo)的開(kāi)源linux) | 聯(lián)系飛騰FAE |
UEFI | 桌面系統(tǒng)(麒麟+開(kāi)源linux) | ||||
第三方 | 昆侖 | 收費(fèi) | 聯(lián)系廠商 | 聯(lián)系廠商 | http://www.kunluntech.com.cn/lxwm |
百敖 | 收費(fèi) | http://www.byosoft.com.cn/rhgm/index.jhtml | |||
國(guó)科銀河 | 收費(fèi) | http://hngkyh.com/index.php?c=about&a=detail&id=14 |
通過(guò)上面的表我們可以發(fā)現(xiàn),要是使用免費(fèi)的,那么就用飛騰提供的固件。飛騰固件有兩種形式,uboot或者UEFI。Uboot能引導(dǎo)實(shí)時(shí)系統(tǒng),比如vx類(lèi)的,也能引導(dǎo)桌面系統(tǒng),但是桌面系統(tǒng)只能引導(dǎo)開(kāi)源linux,換句話說(shuō)就是只能引導(dǎo)能提供設(shè)備樹(shù)的桌面系統(tǒng)。UEFI只能引導(dǎo)桌面系統(tǒng),比如麒麟、ubuntu這類(lèi)的。
那么有人問(wèn)了,我想U(xiǎn)EFI引導(dǎo)vx不可以么?可以,那么就用第三方收費(fèi)的,這里只是飛騰的UEFI不支持。飛騰免費(fèi)提供的就是解決大家調(diào)試用,比如你板子都來(lái)了,總不能等第三方定制的固件到了才能去引導(dǎo)系統(tǒng)去測(cè)試板子吧,這會(huì)兒你就可以用飛騰提供的固件先進(jìn)行測(cè)試,保證你的測(cè)試周期。同時(shí)這里也說(shuō)明一點(diǎn),飛騰的UEFI不是商用的交付用的固件,只是用于測(cè)試的,所以它有很多功能還是可以提升的,但是這里要是有定制功能,就需要自己去改了,飛騰只提供基礎(chǔ)版本夠你用,要是有定制功能,要么自己改,要么去找第三方固件廠商去購(gòu)買(mǎi)。
飛騰固件我們拿uboot固件舉例,它是由uboot部分和PBF部分組成的。其中uboot是提供源碼的,PBF是閉源的bin文件。飛騰提供固件編譯環(huán)境、編譯方法指導(dǎo)等。這個(gè)可以查看網(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/
里面將固件編譯配置方法講的很清楚了,我這里就不展開(kāi)講了??偠灾痪湓?,就是飛騰提供的固件配置環(huán)境和操作方法,能讓一個(gè)沒(méi)有搞過(guò)配置的硬件工程師都能很容易的把CPU的核心數(shù)、內(nèi)存、PCIe等進(jìn)行配置。
固件編譯完是一個(gè)bin文件,這個(gè)文件我們要通過(guò)燒片機(jī)寫(xiě)器把它燒到我們QSPI FLASH,這個(gè)flash燒好后,放到CPU QSPI CS0接口上,CPU開(kāi)機(jī)后就會(huì)去讀flash里的內(nèi)容了。所以為了調(diào)試方便,我們需要兩個(gè)東西,一個(gè)是燒片機(jī)寫(xiě)器,一個(gè)就是盡量在CPU QSPI CS0接口上接一個(gè)調(diào)試座。
下面展示的就是燒寫(xiě)器、燒寫(xiě)器轉(zhuǎn)芯片座,和焊接到PCB板上的調(diào)試座。
燒寫(xiě)器產(chǎn)品很多,這里示例的是碩飛的燒寫(xiě)器和它對(duì)應(yīng)的16pin的轉(zhuǎn)接座,當(dāng)然你要是用8pin的flash,那就用8pin的轉(zhuǎn)接座。(碩飛公司看到可以聯(lián)系我打錢(qián)哈,●ˇ?ˇ●)
焊接到PCB上調(diào)試座主要就是方便flash的取換,因?yàn)檎{(diào)試中固件可能經(jīng)常要改參數(shù),要是沒(méi)有這個(gè)調(diào)試座,flash就要來(lái)來(lái)回回的拆下來(lái)燒寫(xiě)再焊上這樣。
碩飛公司各燒寫(xiě)器支持器件列表:
https://www.sflytech.com/devlist.asp?model=SP20P/SP20X/SP20F/SP20B
2.2.3 系統(tǒng)
固件調(diào)完,就要到系統(tǒng)了。我們后面都是基于飛騰固件來(lái)講的,使用第三方固件的不在我們討論范圍里。
系統(tǒng)的引導(dǎo)我們下面也要分幾種不同的情況進(jìn)行說(shuō)明。表的形式列出:
表 不同固件下的系統(tǒng)引導(dǎo)
系統(tǒng) | 采用固件 | 系統(tǒng)說(shuō)明 |
桌面系統(tǒng) | Uboot | 系統(tǒng)只能是在其他地方,將硬盤(pán)分好區(qū),在指定位置放好設(shè)備樹(shù)、系統(tǒng)鏡像、文件系統(tǒng)后,拔下來(lái)放到我們最終的板卡上,使用uboot通過(guò)設(shè)備引導(dǎo)系統(tǒng)啟動(dòng) |
UEFI | 可以在最終板卡上,使用類(lèi)似x86+windows的那種方法,把系統(tǒng)iso放到U盤(pán)里,在UEFI下通過(guò)U盤(pán)來(lái)安裝系統(tǒng)。系統(tǒng)引導(dǎo)時(shí),是采用grub啟動(dòng)系統(tǒng)。 | |
實(shí)時(shí)系統(tǒng) | Uboot | 把系統(tǒng)鏡像bin文件放到存儲(chǔ)器中,使用uboot命令找到bin,引導(dǎo)啟動(dòng)。 |
2.3 設(shè)計(jì)資料獲取
資源類(lèi)型 | 獲取渠道 | |
硬件 | 芯片手冊(cè),設(shè)計(jì)demo等 | 聯(lián)系飛騰FAE |
PCIe外設(shè)、QSPI Flash等硬件兼容外設(shè)列表 | 通過(guò)飛騰官網(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等其他資源 | 通過(guò)gitee代碼倉(cāng)庫(kù) https://gitee.com/phytium_embedded | |
技術(shù)支持 | 飛騰有自己的技術(shù)支持平臺(tái),是網(wǎng)頁(yè)版的,有基于飛騰的項(xiàng)目要做,通過(guò)銷(xiāo)售渠道或者技術(shù)渠道,找到飛騰的FAE。在技術(shù)支持平臺(tái)注冊(cè)賬號(hào),建立項(xiàng)目,從項(xiàng)目獲取資料開(kāi)始,所有的技術(shù)問(wèn)題,包括設(shè)計(jì)中有問(wèn)題,都可以從技術(shù)支持平臺(tái)上提工單要到支持,很方便。 (主要提示:一定要找飛騰技術(shù)支持部的FAE) | 注冊(cè)和登錄網(wǎng)址: https://serviceplus.phytium.com.cn/ 注冊(cè)完賬號(hào),要找飛騰FAE給審核賬號(hào)。 |
三、基于飛騰芯片的調(diào)試步驟
3.1 環(huán)境準(zhǔn)備
序號(hào) | 設(shè)備名稱(chēng) | 用途 | 要求 |
1 | 串口線 | 用于連接飛騰CPU調(diào)試串口 | 根據(jù)硬件設(shè)計(jì),要是TTL串口就用TTL串口線,要是RS232電平,就用RS232串口線 |
2 | PC機(jī) | 用于運(yùn)行串口調(diào)試軟件 | 建議有兩種,一種就是SecureCRT,另外一種就是純字符型串口助手,比如sscom。因?yàn)镾ecureCRT它會(huì)解析終端命令比如退格、清屏啥的,導(dǎo)致log存的有的時(shí)候不全。所以要用sscom這類(lèi)不執(zhí)行終端命令的串口調(diào)試助手把所有的串口信息都存下來(lái)。 |
3 | 萬(wàn)用表 | 用來(lái)測(cè)量CPU各個(gè)電阻抗,保證沒(méi)有焊接短路 | 沒(méi)啥要求,不是十幾二十塊錢(qián)那種的就行 |
4 | 示波器 | 必要時(shí)用來(lái)測(cè)量QSPI 接口波形。必要時(shí)用來(lái)測(cè)量電源紋波。 | 沒(méi)啥要求,有表筆就行。要是測(cè)紋波,可是得有接地彈簧,能靠測(cè)。 |
3.2 靜態(tài)測(cè)量
3.2.1 測(cè)量靜態(tài)阻抗
將萬(wàn)用表打到電阻檔位,然后分別測(cè)量 Vcore、VDDQ、VDDQ、VTT 的靜態(tài)阻抗。這里要提示一點(diǎn),核電阻抗很低,很多都在1Ω、2Ω、3Ω都是正常的,換句話說(shuō),只要不是0Ω就行!很多人用二極管檔測(cè)阻抗,有的表一測(cè)核電阻抗就響了,不要光看響不響,要看看值。
3.2.2 測(cè)量電壓
在確保電路沒(méi)有存在短路的情況下,對(duì)電路板進(jìn)行上電,查看電路板上的核電壓、內(nèi)存電壓、IO 口電壓、3.3V 電壓、5V 電壓等是否正確。
這里電壓就自己去看手冊(cè)去對(duì)就好了。此時(shí)要是為了穩(wěn)妥,可以把紋波也量一量。但此時(shí)量到的只是靜態(tài)的電壓紋波,固件和系統(tǒng)跑起來(lái),這個(gè)紋波和此時(shí)可能是不一致的。
3.3 加電前準(zhǔn)備
前面靜態(tài)做完,加電前的準(zhǔn)備工作基本就沒(méi)啥了,主要就是不管你是用CPLD還是EC還是X100,加電前一定要把上電時(shí)序保證了,至少你編程是照著時(shí)序去實(shí)現(xiàn)的。千萬(wàn)不要連上電時(shí)序控都沒(méi)控,著急的就上電。
其次,就是固件要編好了,燒到了flash中,并且flash已經(jīng)放到了調(diào)試座上,也就是CPU可以通過(guò)QSPI CS0接口去讀flash里的固件了。
3.4 加電
3.4.1 調(diào)試串口有打印
3.4.1.1 能進(jìn)shell
調(diào)試串口有打印,并且能進(jìn)shell,這個(gè)真的是要恭喜你,板子調(diào)試太順利了。不過(guò)這么順利了,我們也要看看log,尤其是看看ddr訓(xùn)練部分訓(xùn)練的是否順利。因?yàn)榧词刮覀僁DR部分設(shè)計(jì)如果有問(wèn)題,要是不是很致命的話,控制器會(huì)嘗試多次參數(shù)訓(xùn)練,最終找到能用的參數(shù)。我們要關(guān)心的是訓(xùn)練次數(shù),正常來(lái)說(shuō)我們從log上,參數(shù)訓(xùn)練是很短的。要是我們看到log上有很多次的參數(shù)嘗試,那么說(shuō)明咱們這個(gè)ddr還是有些問(wèn)題。
下面是訓(xùn)練成功的log截圖,如果我們?cè)谶_(dá)到success之前,反復(fù)出現(xiàn)過(guò)很多次紅框框出的那種信息,那么說(shuō)明DDR控制器嘗試了很多參數(shù),最終才找到了一個(gè)合適。見(jiàn)過(guò)一些板子需要訓(xùn)練大概20s多,可以從log上看到很多很多個(gè)紅框的信息。這種說(shuō)明DDR設(shè)計(jì)上不是很好,需要再仔細(xì)查一查。
圖 log中內(nèi)存訓(xùn)練部分截圖
進(jìn)了shell,我們就可以敲命令了。
uboot飛騰是在公版的上面改的,所有命令都是兼容的,我們可以搜uboot命令就可以了。環(huán)境變量的:Printenv、setenv、saveenv。寄存器讀寫(xiě):md、mw。PCIe外設(shè)掃描:pci e。
UEFI也是兼容公版UEFI的。寄存器讀寫(xiě):mm。PCIe外設(shè)掃描:pci。網(wǎng)絡(luò):ifconfig、ping。
這個(gè)我們后面也單獨(dú)出一個(gè)文檔,這里也是簡(jiǎn)要說(shuō)明一下。
3.4.1.2不能進(jìn)shell
串口有打印,但是卡半截,不能跑到shell,這里絕大多數(shù)都是硬件問(wèn)題。我們要根據(jù)打印來(lái)判斷可能的故障點(diǎn)。
這個(gè)問(wèn)題點(diǎn)很多,我們后面也是單獨(dú)出文章來(lái)說(shuō)明。這里單獨(dú)提示一點(diǎn),串口卡了這時(shí)候要用示波器測(cè)紋波了。因?yàn)楣碳呀?jīng)開(kāi)始跑了,如果紋波很大,可能會(huì)出現(xiàn)卡在很多位置,這個(gè)就沒(méi)法判斷了,所以固件咋調(diào)都過(guò)不去,紋波是必須要量的,尤其是核電的,不能超5%。
3.4.2 串口無(wú)打印
加電后串口都沒(méi)有打印,那么我們首先就是要用示波器量下QSPI的時(shí)鐘和片選。
QSPI 接口作為啟動(dòng)加載片外固件的唯一接口。CPU上電后后,通過(guò)QSPI接口的QSPI_CSN0片選的Flash芯片加載固件,來(lái)執(zhí)行相關(guān)指令。因此需要查看 QSPI 的時(shí)鐘信號(hào)(QSPI讀固件之前時(shí)鐘以及讀完之后固件配置的時(shí)鐘),QSPI讀固件之前時(shí)鐘頻率應(yīng)為380KHz左右,網(wǎng)安版的應(yīng)該是4.6MHz。
表 串口無(wú)打印各種可能性分析
QSPI時(shí)鐘和片選 | 故障可能性 | 解決方法 |
無(wú) | 看上電時(shí)序,測(cè)量系統(tǒng)時(shí)鐘 | 測(cè)量上電時(shí)序,保證與手冊(cè)一致。測(cè)量系統(tǒng)時(shí)鐘,保證滿足芯片要求。 |
有 | Flash是否適配過(guò) | 查飛騰官網(wǎng)適配型號(hào),看是否進(jìn)行過(guò)兼容適配 |
Flash電平與CPU電平是否一致,因?yàn)橛械脑O(shè)計(jì)可能采用了3.3V flash,接到CPU上時(shí)往了過(guò)電平轉(zhuǎn)換芯片了 | 要是真是電壓不一致,盡量就是換電平一致的flash芯片再試試了 | |
Flash有沒(méi)有虛焊。 | Flash各個(gè)腳都測(cè)測(cè),都量量的吧 | |
測(cè)量CPU芯片調(diào)試串口的管腳處,看看是否有波形,有可能是串口通路上串口芯片或者調(diào)試串口線或者串口軟件啥的有問(wèn)題呢 | 這個(gè)就讓硬件工程師來(lái)測(cè)吧,這個(gè)要不會(huì)他也做不了飛騰的板子 |
3.5 系統(tǒng)引導(dǎo)
使用uefi去安裝引導(dǎo)系統(tǒng),請(qǐng)看文章:
https://blog.csdn.net/yorkworlddream/article/details/124866224
使用uboot去制作系統(tǒng),引導(dǎo)系統(tǒng),請(qǐng)參考倉(cāng)庫(kù)說(shuō)明:
https://gitee.com/phytium_embedded/phytium-linux-buildroot
附錄:文中涉及到的外部文章匯總:
內(nèi)容 | 鏈接 |
飛騰技術(shù)支持平臺(tái) | 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代碼倉(cāng)庫(kù) | 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 |
碩飛燒寫(xiě)器支持列表 | 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 |
飛騰愛(ài)好者技術(shù)交流群碼公眾號(hào)“烏拉大喵喵”
關(guān)鍵詞:
責(zé)任編輯:Rex_24