Thursday, November 19, 2015

DIY Homemade ARM Board Running Linux with LCD ,Part 3: PCB Assembly and First Boot

 this is third part in the series of making a linux capable ARM processor board at home, last part we have designed schematic and PCB , in this part we are going to assemble PCB and  see if it boot for first time. here is Second Parthere is First part and Part 4 U-boot Bootloader Porting and Cross Compile.

there are very few challenging part which may create  a little issue in soldering. but all the part are hand solder-able with  a little or no extra tool. i have a hakko fx-888 soldering iron with standard tip , kester  flux  , paste and thin kester solder wire.i also have  a cheap Chinese hot air and an descent quality toaster oven. although hot air is all we need.

i have ordered PCB from osh park , they came very fast and good quality. as usual i have received 3 boards ,  i have also ordered stencil from osh stencil. stencil is not actually needed , it only help to solder all the component faster . if you don't want stencil you can always do without it , new BGA always comes pre balled so no stencil needed ,Processor has leads so no problem at all.  
the component which need a little care while soldering are

1. QFN package PMU IC 
2. BGA package RAM
3. FPC connector

every thing else can be handled  without any special care at all. 

1. though QFN package can be soldered with out stencil also  , you can apply paste manually , it is very little QFN so it will not create many problem. 
2. all the new BGA ICs come preballed so you don't need to have any extra solder at so you don't need stencil for this at all. you can solder BGA without paste or stencil , you need some flux to get job done more easily. ]
3. FPC connector can be hand soldered but , need to keep temperature profile low .


first of all we need to clean the PCB . i use pre wet medical use alcohol swab to  get any dirt or oil off the board. 

now we need to fix the PCB on  to stationary platform and perfectly align  the  stencil  with the pads.  apply the solder paste gently to all of the pads except BGA ,as new BGA ICs  already have balls , and having more paste may create solder bridges. we will mount the BGA device later. 

as solder paste cover all the pads remove the stencil and start placing the components , perfect alignment is not important as during the reflow the surface tension in the solder will automatically align them to the pads. 

now you can place the BGA RAM also , apply some flux and try to align BGA pads to the ball , alignment matters here  so try to be as accurate as possible ,reset will be taken care during the reflow but the surface tension.

as all the components are placed either you can use hot air or use toaster oven to reflow the board both work just fine , i have assembled two boards one with toaster oven and another with hot air. you need to look at the temperature profile of you solder paste, and all the critical components also.  connectors may melt during reflow if incorrect profile is followed , you don't have to be very precise but keep the maximum temp low and for very short period.

our board have dual side load , repeat the process for this side also ,but this time you can only use hot air , and have to take very care not heat up the board too much or the components on the back may fall off .
if you are not sure if can hot air the back  side also , you can use simple soldering iron to mount all the component , back side mostly has passives , all of them are hand solderable.

Power Up
 before going and booting up the board check with multimeter for any short all the power rails. visual inspection for any  solder balls or other issue also recommended .

i have Rigol DP832 power supply , as we have onboard main power regulator for +5 volt rail , i have set the power supply to be 9V and 100 mA constant current , this much current is enough to power up all the regulators and CPU at low frequency. switch on the power supply see if how the current goes , it goes take around 40mA with my board. if it goes constant current mode then you board is certainly having some issue which you need to clear up. check for short on all the power rails. if you board consume absolutely no power at all , then check for all the reset pins and other pull up or pull downs , they may create  issue.

if current is fine , then check for all the power  rails   see if they show correct votlage on you multimeter.
 you need
   5v from the main regulator output 
    ~1.2V for CPU ,
     1.2V for internal logic,
     3.3V for I/O logic,
     3.0V analog Supply ,
     1.5V for DDR ram.

  if all the supply is fine then you can ahead and put your linux sd card into socket and try to boot. and see if anything appear on the UART terminal.

First boot
to get the SD card ready for boot you can either get some premade image from internet some where . or you can build your own boot loader , linux and file system.

in next few post about this board i am going to show you how to build your own custom linux and build all other required part also,  for now you can either follow the post given blow to make your own linux or use some premade image

Part 4 U-boot Bootloader Porting and Cross Compile

if you have modified RAM size or any other power setting then you need to modify source and rebuild the kernel.

building you own system is left for some other post.  to get some prebuild image , you should look at the same board's support from where you get your reference schematic or you can look at the BSP package for your CPU , BSP is provided  by the CPU manufacturer. 

i have built my own image , and put into sd card slot , it just booted at first try with one board another board had some issues.  we will debug the board later on. 

here is how the first boot looks like. 

the kernel did not find the boot device at all, which is SD card "mmcblk0p2" actually , the default sunxi kernel take SD Card detect pin to be "card present low" , and with my sd card connector schematic , when sd card is present sd card dected pin will be high , as we are on linux 3.4 which does not support device tress , there was no way to configure the polarity without modifying source. so i jumped into source and changed the polarity as exactly where they read pin. and it looks like this!!!

we have a terminal now , which is ready to accept commands.

Source , all the source and Gerber files are available on my github repo,


  1. Hi,
    Congratullation on your excellent project.. You say one board had a problem.How did you debug it? Will it be covered in part 4 ?
    You say: if it goes constant current mode then you board is certainly having some issue" why ?
    You say:"you can look at the BSP package for your CPU , BSP is provided by the CPU manufacturer. ", what is BSP?

  2. Hey there,
    very cool project,could you just upload video on Youtube along with specification ,it would be nice to watch dev board booting.

  3. Hi, I've been taking a look at your posts for a while and thought about writing a few times - the uboot portion seems to be private. Is this intentional?

    1. are you talking about u-boot source?

    2. No, pt4 of the blog series. There's a link, it asks for authentication and then it says you're not authorized to see this content, therefore my assumption it's a private post..

    3. No, pt4 of the blog series. There's a link, it asks for authentication and then it says you're not authorized to see this content, therefore my assumption it's a private post..

    4. thank you for reporting , link was broken, it has been fixed now