当今全部最好的集成电路都大规模的运用BGA封装法来焊接。由于BGA封装法衔接在芯片底下,焊接更紧,需求运用回流焊箱或许热印版。另一个问题是规划PCB(印刷电路板)时,过孔和引线之间的焊接球需求满足小,主板上一般需求更多层来为紧挨的引线来腾出空间,这意味着一个廉价的中国产的两层主板没有满足的空间,所以需求更多的层。附加层则会明显进步主板的本钱 ,就算只多了几个复制。
linux操作体系文章专题:linux操作体系详解(linux不再难明)
我想规划一款内置BGA芯片的主板来体会下焊接它们究竟是有多难。所以我决议规划一个可运转Linux的小型ARM嵌入式体系,运用的ARM处理器是在一个217球的LFBGA包中的AT91SAM9N12,仅仅由于在带有运转Linux必需的内存办理单元的ARM处理器中,它是最廉价的。起先我只想用一块BGA芯片,可是BGA包中的RAM比其他包里要廉价许多,所以我就决议在BGA包也添加一块DDR2(Double Data Rate 2)的内存。
为最大化可用空间定位过孔。
成果寻觅主板出产商还颇费了一番曲折。两层的空间是还不行的,至少需求4层。217-LFBGA包的球直径是0.4mm,临接球的距离是0.8mm。为了给过孔多留些空间,球的焊盘布局做的要比焊球要稍小一些。我用的0.36mm的焊盘。在4个球之间放置过孔会最大程度的运用可用空间。厂商要能制作能够放进0.8mm宽度的过孔。简直全部厂商都能够制作这种直径巨细的过孔,但问题是:这个距离包含了过孔的钻孔直径,两倍的过孔绕环的宽度 ,两倍的过孔和引线之间的最小距离。比方,iTead的4层主板最小的过孔钻孔直径是0.3mm, 最小环宽度是0.15mm,过孔和引线的最小距离是0.15mm,加起来是0.9 mm,这意味着最小尺度的过孔不能放在BGA球之间。我发现的仅有一家能够完结这一要求而且价钱相对合理的生厂商是OSH parks。他们的四层主板有更小的约束,过孔刚刚能够放进BGA球里边。额定的优点是,关于小主板而言,它要比iTead更廉价一些。
在OSH park规划准则下最小的过孔,刚刚能放下。
即便过孔能够放进BGA 球中心,依然有一些问题:过孔中心没有满足的空间走线。这意味着要让每一个焊盘都有一个过孔的规范布线通道是不或许了。这便是说主板需求有满足的未经衔接的焊盘,所以过线需求从里边进行安置。走运的是,处理器还有许多通用的未衔接的I/O引脚。
… 假如不违背规划准则的话,过线就不能正好在两个过孔之间穿过。CAS 过线没有满足的空间来放入DQM0 和 D15过孔。
出产问题解决了,是时分开端想想主板上该放哪些部件了。我并不很在乎这块主板的实践用途,相关于用途而言,整个项目更是一个学习的进程。为了下降本钱,主板的尺度要小。这意味着不会为其他额定的接口预留空间,比方:以太网,串口或许SD卡。
除了处理器和RAM外,其他必需的部件是:大内存,电压调整器,以及处理芯片重置的监控电路。处理器能够从NAND发动,可是以防万一我决议为引导装载程序参加Dataflash(数据闪存),尽管终究会很少被用到。关于大内存而言,NAND是一个很好的挑选由于他容量大又廉价。在BGA包中参加会更廉价些,但我现已被两个BGA包折腾的够呛了,所以我决议在一个48引脚的TSOP(薄型小尺度封装)包里边运用4GB的NAND。衔接各个组件在处理器的清单表中现已解说的很好了,可是在上千页的文档中要找到悉数的细节仍是很难的。Atmel 也发布了一个试用板的原理图,在规划主板时会很有协助。
DDR2 引线空间应该有必定的自由度。正常的引线应该长度适宜,有可控的阻抗和能够停止或许串联电阻。在开发板的参阅规划中,全部DDR2的信号运用了串联电阻。我没有满足的空间放置他们,所以我决议暂时放着不管。阻抗也不是50欧姆,由于我有必要运用小一些的引线来填充其他的空间。我期望的是,由于RAM更接近处理器,就算短少串联电阻箱或许阻抗不匹配,联系也不大。全部从CPU到RAM的连线大约是25mm长。一般的经历是:假如引线的长度要超越信号波长的10%时,转化线的影响应该被考虑进去。这种状况意味着频率大约在1 GHz以上。RAM的时钟频率只要133 MHz, 乃至头几个谐波还在1 GHz以下,这预示着应该会正常作业。为了确保可行,我简直彻底匹配了引线的长度,但这或许不是有必要的。
供电有些杂乱。处理器中心的电压是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的部件开端。它们是用一双沉稳的手用钳子固定的。
CPU 和我的指尖。球距离是0.8mm。许多新的BGA乃至运用小于0.5mm的距离。
BGA固定在板上。部件放置的方位差错需求小于0.4mm,不然或许和一个行距离焊接,而且由于焊球在芯片下面,不能查看。没有丝网印刷的鸿沟,简直不或许依照要求的精度放置。有了丝网印刷,只需沿着丝网印刷边缘对齐即可,很简略。
回焊正面,举高PCB,这样底面的部件也不会触到其他当地。焊接外表的拉力会坚持底面不倒下。
过烤箱后。焊接口看上去很美观,全部部件依然在他们应该的方位上。
焊接NAND Flash。我的焊接铁片要比引脚大一些。一次焊接一个引脚太困难了。简略些的办法是灌锡后,用吸锡带把剩余的吸出来。
在移除剩余焊锡后,焊接口现在质量很高了。
在参加供电头和调试串口后,主板焊接结束。
终究的制品。
另一面,空着的方位是位Dataflash预备的。
在把USB缆线接到USB设备口上,没有呈现什么意外,而且我看到了一个新的串口 /dev/ttyACM0 呈现。再用SAM-BA程序(用来对发动加载程序和内核编程)翻开,全部都能用了。许多人说焊接BGA很难,可是从这次经历来看,我觉得还好。或许仅仅走运吧,可是我确实没出什么问题就搞定了。
翻开SAM-BA。At91sam9n12ek是Atmel针对这款处理器供给的开发东西,他的装备相同适用于这块板。
DDR2 也能够作业,履行程序,而且能够写回NAND。全部都OK。
软件
软件发动加载程序
发动进程开端作业时,内部的ROM加载器测验在不同的内存区域发现一个合法的程序。他会扫描SPI (串行外设接口)缓存,SD卡,NAND flash,二级SPI flash 还有I2C EEPROM 关于一个合法的程序。一旦发现一个,立刻就发动它,不然就会进入SAM-BA监控器,也便是进入调试形式,此刻处理器会监听来自串口和USB端口的指令。这种形式下能够对bootloader进行编程。
ROM 发动不能直接发动linux内核,所以需求一个二级的发动加载器。它会初始化RAM和时钟,然后开端加载linux内核。AT91 Bootstrap 是一个现成的发动加载器,能够完结这一系列操作。它被放在NAND flash开端的当地,或许假如我填充这些方位,它或许被放到Dataflash。即便AT91 bootstrap 能够直接发动linux,关于调试而言,之后发动U-boot的bootloader 对调试更有用。U-boot是它自带的根据指令行的微操作体系,能够读取USB棒,运用以太网,读写NAND,当然能够发动linux。例如运用U-boot 能够铲除NAND或许改动linux 发动参数。
为编译bootloader,需求一个ARM 穿插编译器。我用的是Sourcery codebench lite edition,由于它简略设置,而且作用不错。先加载AT91SAM9N12EK 开发板装备文件是最简略的。和从头开端写新的装备比较,修正文件要省劲的多。
为了让这份定制版相同有用,需求做一些改动:RAM 巨细需求设置成64MB,bank的数量改成4,一些实验需求略微调整一下(试用版有128MB的RAM容量,8个banks)。NAND初始的函数也需求改动,这块板比开发板比较,NAND flash要衔接的当地有些不同,因此有必要告知bootloader。
U-boot
由于AT91 bootstrap现已初始化了整个硬件,就能够开门见山的装备U-boot。相同有为at91sam9n12ek预备的装备文件,可是默许是从SD卡发动设置的。由于硬件现已装备好了,所以其他需求改动的当地就没多少了。有一些可选项比方在NAND flash上发明和改动分区时发动UBIFS 东西 ,以及为读取ext4格局的USB棒供给支撑。USB支撑使得从USB棒发动Linux 内核变得或许,这让实验不同的内核装备变得简略了。
Linux和根文件体系
装置linux不像装置一台惯例的x86 pc一般简略。需求装备内核来支撑各种需求的设置,而且需求树立根目录的镜像文件。能够手动来做,可是用buildroot做起来会很简略些。后者是用来树立根文件体系和内核的一系列东西。整个进程或许会有一些难,由于内核和build root有许多的选项。
Buildroot 没有为at91sam9n12ek开发板供给装备文件,但有为另一款 Atmel板 at91sam9260ek供给装备文件。运用这个装备文件作为基准文件,装备会更简略些。能够经过“make at91sam9260ek_defconfig”加载。
开端咱们想有一个相对新的内核版别,由于相关于处理器来说,只需求做一些很小的改动,所以咱们就运用上星期新发布的3.15.1版别吧。
Linux 被装备成用buildroot 的“make linux-menuconfig” 指令装备。它会翻开寻常的Linux菜单装备窗口。内核中大大都重要的装备是体系类型的装备菜单。咱们需求查看AT91SAM9N12的支撑状况还有“Atmel AT91SAM Evaluation Kits with device-tree support”” 选项。设备树是一个随内核一起加载的外部二进制文件,描绘了开发板上各硬件的可用性状况。这使得运用带有不同开发板的相同的内核以及针对不同开发板的设备装备,能够用文本来写,而不是为每块板都写一个仅仅略有不同的C文件。走运的是:有一个能够作为基准文件的针对at91sam9n12ek 的设备树文件。需求做得改动仅仅一些简略的移除不再运用的设备。这块修正过的设备数文件需求被添加到buildroot装备,所以它能够知道怎么编译,而且从中结构一个镜像文件。
内核里边其他值得发动的选项是:
USB 主机支撑AT91_USB。
支撑NAND flash还有处理器内部的NAND ECC 操控器支撑。
支撑UBIFS,将被用作一个根文件体系。
读取USB棒的Ext4 支撑。
在buildroot 装备进程中,咱们需求挑选咱们想要在根目录上装置哪些程序以及产生根文件体系镜像的选项。这块开发板有不带操控器的原始NAND内存,所以一般的桌面文件体系,比方ext4就不能用了。UBIFS是一般的挑选,在这正好也能用。
UBIFS 有一些依靠NAND flash 类型的选项,假如设置错了,LInux将不能读取终究的文件体系。这些选项能够从NAND FLASH 的数据清单里边得到,可是更简略的办法是从USB 棒发动linux,而且从那创立ubi 分区。或许也能够运用 U-boot的“ubi info”指令,这将会读取NAND 而且输出需求的装备值。
在键入“make”后, Buildroot 会下载穿插编译器,linux 内核以及全部其他的包,构建并输出内核,设备树,以及根文件体系镜像。然后能够用SAM-BA程序传到开发板上。一些程序需求对 NAND ECC controller 参数编程。一些参数也应该被装备到AT91bootstrap, U-boot 以及linux 内核,不然他们会陈述NAND现已损坏。这种状况下NAND有2048个字节,带有512字节的扇区,ECC能够每1个扇区纠正4个字节。存储这些镜像的NAND地址能够在AT91的bootstrap 以及U-boot装备文件中找到。
在对主板编程以及重置后,ROM 发动加载器应该能够在NAND上找到AT91bootstrap 而且开端发动进程。假如你对更多细节感兴趣,全部硬件和软件的文件都能够在这找到。