<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > 制作自己的嵌入式 Linux 電腦

          制作自己的嵌入式 Linux 電腦

          作者: 時(shí)間:2014-09-02 來源:EEPW 收藏

            當(dāng)今所有最好的集成電路都大規(guī)模的使用BGA封裝法來焊接。因?yàn)锽GA封裝法連接在芯片底下,焊接更緊,需要使用回流焊箱或者熱印版。另一個(gè)問題是設(shè)計(jì)PCB(印刷電路板)時(shí),過孔和引線之間的焊接球需要足夠小,主板上通常需要更多層來為緊挨的引線來騰出空間,這意味著一個(gè)廉價(jià)的中國產(chǎn)的兩層主板沒有足夠的空間,所以需要更多的層。附加層則會顯著提高主板的成本 ,就算只多了幾個(gè)拷貝。

          本文引用地址:http://www.ex-cimer.com/article/262475.htm

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

            我想設(shè)計(jì)一款內(nèi)置BGA芯片的主板來體驗(yàn)下焊接它們究竟是有多難。于是我決定設(shè)計(jì)一個(gè)可運(yùn)行的小型ARM系統(tǒng),使用的ARM處理器是在一個(gè)217球的LFBGA包中的AT91SAM9N12,只是因?yàn)樵趲в羞\(yùn)行必需的內(nèi)存管理單元的ARM處理器中,它是最便宜的。起初我只想用一塊BGA芯片,但是BGA包中的RAM比其他包里要便宜很多,所以我就決定在BGA包也增加一塊DDR2(Double Data Rate 2)的內(nèi)存。

            為最大化可用空間定位過孔。

            結(jié)果尋找主板生產(chǎn)商還頗費(fèi)了一番周折。兩層的空間是還不夠的,至少需要4層。217-LFBGA包的球直徑是0.4mm,臨接球的距離是0.8mm。為了給過孔多留些空間,球的焊盤布局做的要比焊球要稍小一些。我用的0.36mm的焊盤。在4個(gè)球之間放置過孔會最大程度的利用可用空間。廠商要能制造可以放進(jìn)0.8mm寬度的過孔。幾乎所有廠商都可以制造這種直徑大小的過孔,但問題是:這個(gè)距離包括了過孔的鉆孔直徑,兩倍的過孔繞環(huán)的寬度 ,兩倍的過孔和引線之間的最小距離。比如,iTead的4層主板最小的過孔鉆孔直徑是0.3mm, 最小環(huán)寬度是0.15mm,過孔和引線的最小距離是0.15mm,加起來是0.9 mm,這意味著最小尺寸的過孔不能放在BGA球之間。我發(fā)現(xiàn)的唯一一家可以實(shí)現(xiàn)這一要求而且價(jià)錢相對合理的生廠商是OSH parks。他們的四層主板有更小的限制,過孔剛剛可以放進(jìn)BGA球里面。額外的好處是,對于小主板而言,它要比iTead更便宜一些。

            在OSH park設(shè)計(jì)原則下最小的過孔,剛剛能放下。

            即使過孔可以放進(jìn)BGA 球中間,仍然有一些問題:過孔中間沒有足夠的空間走線。這意味著要讓每一個(gè)焊盤都有一個(gè)過孔的標(biāo)準(zhǔn)布線通道是不可能了。這就是說主板需要有足夠的未經(jīng)連接的焊盤,所以過線需要從里面進(jìn)行布置。幸運(yùn)的是,處理器還有很多通用的未連接的I/O引腳。


            … 如果不違反設(shè)計(jì)原則的話,過線就不能正好在兩個(gè)過孔之間穿過。CAS 過線沒有足夠的空間來放入DQM0 和 D15過孔。

            生產(chǎn)問題解決了,是時(shí)候開始想想主板上該放哪些部件了。我并不很在乎這塊主板的實(shí)際用處,相對于用處而言,整個(gè)項(xiàng)目更是一個(gè)學(xué)習(xí)的過程。為了降低成本,主板的尺寸要小。這意味著不會為其他額外的接口預(yù)留空間,比如:以太網(wǎng),串口或者SD卡。

            除了處理器和RAM外,其他必需的部件是:大內(nèi)存,電壓調(diào)整器,以及處理芯片重置的監(jiān)控電路。處理器可以從NAND啟動,但是以防萬一我決定為引導(dǎo)裝載程序加入Dataflash(數(shù)據(jù)閃存),雖然最終會很少被用到。對于大內(nèi)存而言,NAND是一個(gè)很好的選擇因?yàn)樗萘看笥直阋?。在BGA包中加入會更便宜些,但我已經(jīng)被兩個(gè)BGA包折騰的夠嗆了,所以我決定在一個(gè)48引腳的TSOP(薄型小尺寸封裝)包里面使用4GB的NAND。連接各個(gè)組件在處理器的清單表中已經(jīng)解釋的很好了,但是在上千頁的文檔中要找到全部的細(xì)節(jié)還是很難的。Atmel 也發(fā)布了一個(gè)試用板的原理圖,在設(shè)計(jì)主板時(shí)會很有幫助。

            DDR2 引線空間應(yīng)該有一定的自由度。正常的引線應(yīng)該長度合適,有可控的阻抗和可以終止或者串聯(lián)電阻。在開發(fā)板的參考設(shè)計(jì)中,所有DDR2的信號使用了串聯(lián)電阻。我沒有足夠的空間放置他們,所以我決定暫且放著不管。阻抗也不是50歐姆,因?yàn)槲冶仨毷褂眯∫恍┑囊€來填充其他的空間。我希望的是,因?yàn)镽AM更靠近處理器,就算缺少串聯(lián)電阻箱或者阻抗不匹配,關(guān)系也不大。所有從CPU到RAM的連線大約是25mm長。通常的經(jīng)驗(yàn)是:如果引線的長度要超過信號波長的10%時(shí),轉(zhuǎn)換線的影響應(yīng)該被考慮進(jìn)去。這種情況意味著頻率大約在1 GHz以上。RAM的時(shí)鐘頻率只有133 MHz, 甚至頭幾個(gè)諧波還在1 GHz以下,這預(yù)示著應(yīng)該會正常工作。為了保證可行,我?guī)缀跬耆ヅ淞艘€的長度,但這也許不是必須的。

            供電有些復(fù)雜。處理器核心的電壓是1伏特,RAM需要1.8伏特, NAND需要3.3 伏特。因?yàn)閺腢SB輸入電壓是5伏特,主板需要有三種不同的電壓適配器。正常情況下比較好的做法是:在主板上為電力供應(yīng)保留一層并且保持它與信號脫離,來降低電力供應(yīng)的阻抗,但是主板只有4層,而且其中一層要用于做底板。這意味著只有兩層留給做信號處理,這顯示不夠。所以我沒有單獨(dú)拿出一層來供電,而是在不同的層里為不同的供電做了一些擋板。

            對于USB供電的應(yīng)用,線形調(diào)整器的電力損失在最壞的情況下太大了些,所以我決定用3.3伏特的調(diào)整器作為一個(gè)更有效的可切換開關(guān)的調(diào)整器。1.0伏特和1.8伏特的調(diào)整期是一個(gè)以3.3伏特作為輸入電壓的線性調(diào)整器。因?yàn)榫€形調(diào)整器的損失決定于輸入和輸出電壓的差,所以使用3.3伏特的電壓比5伏特的電壓提高了效率。

            電路圖。PDF

            PCB布局,尚未焊錫。

            焊接

            空的電路板。

            焊錫和部件被固定到背面。焊錫是用牙簽手動固定的。這兒的部件都是1mm(0.04英寸)長。我只拿上一些做下試驗(yàn),先看下他們?nèi)绾位亓鞯?。如果情況不太好,我會換另外一塊板子。

            使用一個(gè)烤箱和自制的控制器來控制回流。

            回流之后。三個(gè)部件被焊接到一個(gè)錯(cuò)誤的地方。我最后還是把它們拿出來了,在主板上有足夠的解耦的電容器,即使丟了一小部分,也不過有什么影響。我還錯(cuò)誤的把一個(gè)電容器放在左上的位置,但那兒其實(shí)應(yīng)該是一個(gè)電阻。

            對于上層,我有一個(gè)OSH的模板,所以我不必手動把焊錫弄到BGA板上。直接按到桌子上,我就把主板和模具焊牢了。

            模板隊(duì)形排列很整齊。

            這看起來有些過了,但是幾乎所有的焊錫都可以用了。還需要一些額外的焊錫來讓模具平整一些。

            把焊錫鋪開,然后挪掉模具。比我自己手動弄的背面要好的多。

            我從一個(gè)非BGA的部件開始。它們是用一雙沉穩(wěn)的手用鉗子固定的。

            CPU 和我的指尖。球間距是0.8mm。許多新的BGA甚至使用小于0.5mm的間距。

            BGA固定在板上。部件放置的位置誤差需要小于0.4mm,否則可能和一個(gè)行間隔焊接,而且因?yàn)楹盖蛟谛酒旅?,不能檢查。沒有絲網(wǎng)印刷的邊界,幾乎不可能按照要求的精度放置。有了絲網(wǎng)印刷,只需沿著絲網(wǎng)印刷邊沿對齊即可,很容易。

            回焊正面,抬高PCB,這樣底面的部件也不會觸到其他地方。焊接表面的拉力會保持底面不倒下。

            過烤箱后。焊接口看上去很好看,所有部件仍然在他們應(yīng)該的位置上。

            焊接NAND Flash。我的焊接鐵片要比引腳大一些。一次焊接一個(gè)引腳太困難了。簡單些的辦法是灌錫后,用吸錫帶把多余的吸出來。

            在移除多余焊錫后,焊接口現(xiàn)在質(zhì)量很高了。

            在加入供電頭和調(diào)試串口后,主板焊接完畢。

            最終的成品。

            另一面,空著的位置是位Dataflash準(zhǔn)備的。

            在把USB纜線接到USB設(shè)備口上,沒有出現(xiàn)什么意外,而且我看到了一個(gè)新的串口 /dev/ttyACM0 出現(xiàn)。再用SAM-BA程序(用來對啟動加載程序和內(nèi)核編程)打開,一切都能用了。許多人說焊接BGA很難,但是從這次經(jīng)驗(yàn)來看,我覺得還好。也許只是幸運(yùn)吧,但是我的確沒出什么問題就搞定了。

            打開SAM-BA。At91sam9n12ek是Atmel針對這款處理器提供的開發(fā)工具,他的配置同樣適用于這塊板。

            DDR2 也可以工作,執(zhí)行程序,并且可以寫回NAND。一切都OK。

            軟件

            軟件啟動加載程序

            啟動進(jìn)程開始工作時(shí),內(nèi)部的ROM加載器嘗試在不同的內(nèi)存區(qū)域發(fā)現(xiàn)一個(gè)合法的程序。他會掃描SPI (串行外設(shè)接口)緩存,SD卡,NAND flash,二級SPI flash 還有I2C EEPROM 對于一個(gè)合法的程序。一旦發(fā)現(xiàn)一個(gè),馬上就啟動它,否則就會進(jìn)入SAM-BA監(jiān)控器,也就是進(jìn)入調(diào)試模式,此時(shí)處理器會監(jiān)聽來自串口和USB端口的指令。這種模式下可以對bootloader進(jìn)行編程。

            ROM 啟動不能直接啟動linux內(nèi)核,所以需要一個(gè)二級的啟動加載器。它會初始化RAM和時(shí)鐘,然后開始加載linux內(nèi)核。AT91 Bootstrap 是一個(gè)現(xiàn)成的啟動加載器,可以完成這一系列操作。它被放在NAND flash開始的地方,或者如果我填充這些位置,它可能被放到Dataflash。即使AT91 bootstrap 可以直接啟動linux,對于調(diào)試而言,之后啟動U-boot的bootloader 對調(diào)試更有用。U-boot是它自帶的基于命令行的微操作系統(tǒng),可以讀取USB棒,使用以太網(wǎng),讀寫NAND,當(dāng)然可以啟動linux。例如使用U-boot 可以清除NAND或者改變linux 啟動參數(shù)。

            為編譯bootloader,需要一個(gè)ARM 交叉編譯器。我用的是Sourcery codebench lite edition,因?yàn)樗菀自O(shè)置,而且效果不錯(cuò)。先加載AT91SAM9N12EK 開發(fā)板配置文件是最容易的。和從頭開始寫新的配置相比,修改文件要省事的多。

            為了讓這份定制版同樣有效,需要做一些改動:RAM 大小需要設(shè)置成64MB,bank的數(shù)量改成4,一些試驗(yàn)需要稍微調(diào)整一下(試用版有128MB的RAM容量,8個(gè)banks)。NAND初始的函數(shù)也需要改動,這塊板比開發(fā)板相比,NAND flash要連接的地方有些不同,因此有必要告訴bootloader。

            U-boot

            因?yàn)锳T91 bootstrap已經(jīng)初始化了整個(gè)硬件,就可以直截了當(dāng)?shù)呐渲肬-boot。同樣有為at91sam9n12ek準(zhǔn)備的配置文件,但是默認(rèn)是從SD卡啟動設(shè)置的。因?yàn)橛布呀?jīng)配置好了,所以其他需要改動的地方就沒多少了。有一些可選項(xiàng)比如在NAND flash上創(chuàng)造和改變分區(qū)時(shí)啟動UBIFS 工具 ,以及為讀取ext4格式的USB棒提供支持。USB支持使得從USB棒啟動 內(nèi)核變得可能,這讓試驗(yàn)不同的內(nèi)核配置變得容易了。

            Linux和根文件系統(tǒng)

            安裝linux不像安裝一臺常規(guī)的x86 pc一般容易。需要配置內(nèi)核來支持各種需要的設(shè)置,而且需要建立根目錄的鏡像文件??梢允謩觼碜?,但是用buildroot做起來會很容易些。后者是用來建立根文件系統(tǒng)和內(nèi)核的一系列工具。整個(gè)過程可能會有一些難,因?yàn)閮?nèi)核和build root有很多的選項(xiàng)。

            Buildroot 沒有為at91sam9n12ek開發(fā)板提供配置文件,但有為另一款 Atmel板 at91sam9260ek提供配置文件。使用這個(gè)配置文件作為基準(zhǔn)文件,配置會更容易些??梢酝ㄟ^“make at91sam9260ek_defconfig”加載。

            開始我們想有一個(gè)相對新的內(nèi)核版本,因?yàn)橄鄬τ谔幚砥鱽碚f,只需要做一些很小的改動,所以我們就使用上周新發(fā)布的3.15.1版本吧。

            Linux 被配置成用buildroot 的“make linux-menuconfig” 命令配置。它會打開尋常的Linux菜單配置窗口。內(nèi)核中大多數(shù)重要的配置是系統(tǒng)類型的配置菜單。我們需要檢查AT91SAM9N12的支持情況還有“Atmel AT91SAM Evaluation Kits with device-tree support”” 選項(xiàng)。設(shè)備樹是一個(gè)隨內(nèi)核一同加載的外部二進(jìn)制文件,描述了開發(fā)板上各硬件的可用性情況。這使得使用帶有不同開發(fā)板的同樣的內(nèi)核以及針對不同開發(fā)板的設(shè)備配置,可以用文本來寫,而不是為每塊板都寫一個(gè)只是略有不同的C文件。幸運(yùn)的是:有一個(gè)可以作為基準(zhǔn)文件的針對at91sam9n12ek 的設(shè)備樹文件。需要做得改動只是一些簡單的移除不再使用的設(shè)備。這塊修改過的設(shè)備數(shù)文件需要被添加到buildroot配置,所以它可以知道如何編譯,并且從中構(gòu)造一個(gè)鏡像文件。

            內(nèi)核里面其他值得啟動的選項(xiàng)是:

            USB 主機(jī)支持AT91_USB。

            支持NAND flash還有處理器內(nèi)部的NAND ECC 控制器支持。

            支持UBIFS,將被用作一個(gè)根文件系統(tǒng)。

            讀取USB棒的Ext4 支持。

            在buildroot 配置過程中,我們需要選擇我們想要在根目錄上安裝哪些程序以及產(chǎn)生根文件系統(tǒng)鏡像的選項(xiàng)。這塊開發(fā)板有不帶控制器的原始NAND內(nèi)存,所以一般的桌面文件系統(tǒng),比如ext4就不能用了。UBIFS是通常的選擇,在這正好也能用。

            UBIFS 有一些依賴NAND flash 類型的選項(xiàng),如果設(shè)置錯(cuò)了,LInux將不能讀取最終的文件系統(tǒng)。這些選項(xiàng)可以從NAND FLASH 的數(shù)據(jù)清單里面得到,但是更容易的方法是從USB 棒啟動linux,并且從那創(chuàng)建ubi 分區(qū)?;蛘咭部梢允褂?U-boot的“ubi info”指令,這將會讀取NAND 并且輸出需要的配置值。

            在鍵入“make”后, Buildroot 會下載交叉編譯器,linux 內(nèi)核以及所有其他的包,構(gòu)建并輸出內(nèi)核,設(shè)備樹,以及根文件系統(tǒng)鏡像。然后可以用SAM-BA程序傳到開發(fā)板上。一些程序需要對 NAND ECC controller 參數(shù)編程。一些參數(shù)也應(yīng)該被配置到AT91bootstrap, U-boot 以及l(fā)inux 內(nèi)核,否則他們會報(bào)告NAND已經(jīng)損壞。這種情況下NAND有2048個(gè)字節(jié),帶有512字節(jié)的扇區(qū),ECC能夠每1個(gè)扇區(qū)糾正4個(gè)字節(jié)。存儲這些鏡像的NAND地址可以在AT91的bootstrap 以及U-boot配置文件中找到。

            在對主板編程以及重置后,ROM 啟動加載器應(yīng)該可以在NAND上找到AT91bootstrap 并且開始啟動過程。如果你對更多細(xì)節(jié)感興趣,所有硬件和軟件的文件都可以在這找到。


          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          電容器相關(guān)文章:電容器原理


          pic相關(guān)文章:pic是什么


          linux相關(guān)文章:linux教程


          回流焊相關(guān)文章:回流焊原理


          關(guān)鍵詞: 嵌入式 Linux 電腦

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();