新聞中心

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

制作自己的嵌入式 Linux 電腦

作者: 時間:2014-09-02 來源:EEPW 收藏

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

本文引用地址:http://m.butianyuan.cn/article/262475.htm

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

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

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

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

  在OSH park設計原則下最小的過孔,剛剛能放下。

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


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

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

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

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

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

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

  電路圖。PDF

  PCB布局,尚未焊錫。

  焊接

  空的電路板。

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

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

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

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

  模板隊形排列很整齊。

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

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

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

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

  BGA固定在板上。部件放置的位置誤差需要小于0.4mm,否則可能和一個行間隔焊接,而且因為焊球在芯片下面,不能檢查。沒有絲網(wǎng)印刷的邊界,幾乎不可能按照要求的精度放置。有了絲網(wǎng)印刷,只需沿著絲網(wǎng)印刷邊沿對齊即可,很容易。

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

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

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

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

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

  最終的成品。

  另一面,空著的位置是位Dataflash準備的。

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

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

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

  軟件

  軟件啟動加載程序

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

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

  為編譯bootloader,需要一個ARM 交叉編譯器。我用的是Sourcery codebench lite edition,因為它容易設置,而且效果不錯。先加載AT91SAM9N12EK 開發(fā)板配置文件是最容易的。和從頭開始寫新的配置相比,修改文件要省事的多。

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

  U-boot

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

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

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

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

  開始我們想有一個相對新的內核版本,因為相對于處理器來說,只需要做一些很小的改動,所以我們就使用上周新發(fā)布的3.15.1版本吧。

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

  內核里面其他值得啟動的選項是:

  USB 主機支持AT91_USB。

  支持NAND flash還有處理器內部的NAND ECC 控制器支持。

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

  讀取USB棒的Ext4 支持。

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

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

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

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


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

電容器相關文章:電容器原理


pic相關文章:pic是什么


linux相關文章:linux教程


回流焊相關文章:回流焊原理


關鍵詞: 嵌入式 Linux 電腦

評論


相關推薦

技術專區(qū)

關閉