Building a single board computer: DRAM soldering issues

Sometimes I start a project thinking it will be about one thing: I thought my FPGA project was going to be about developing my Verilog skills and building a graphics engine, but at least at first, it was primarily about getting JTAG working.  (Programming Xilinx FPGAs is actually a remarkably complicated story, typically involving people reverse engineering the Xilinx file formats and JTAG protocol.)  I thought my 3D printer would be about designing 3D models and then making them in real life — but it was really about mechanical reliability.  My latest project, which I haven’t blogged about since I was trying to hold off until it was done, is building a single board computer (pcb photo here) — I thought it’d be about the integrity of high-speed signals (DDR3, 100Mbps ethernet), but it’s actually turned out to be about BGA soldering.

I’ve done some BGA soldering in the past — I created a little test board for Xilinx CPLDs, since those are 1) the cheapest BGA parts I could find, and 2) have a nice JTAG interface which gives us an easy way of testing the external connectivity.  After a couple rough starts with that I thought I had the hang of it down, so I used a BGA FPGA in my (ongoing) raytracer project.  I haven’t extensively tested the soldering on that board, but the basic functionality (JTAG and VGA) were brought up successfully, so for at least ~30 of the pins I had a 100% success rate.  So I thought I had successfully conquered BGA soldering, and I was starting to think about whether or not I could do 0.8mm BGAs, and so on.

My own SBC

Fast forward to trying to build my own single board computer (SBC).  This is something I’ve been thinking about doing for a while — not because I think the world needs another Raspberry-Pi clone, but because I want to make one as small as possible and socket it into a backplane for a small cluster computer.  Here’s what I came up with:

2014-07-23 21.51.53
I had the board made by two different fabs for comparison.

Sorry for the lack of reference scale, but these boards are 56x70mm, and I should be able to fit 16 of them into a mini-ITX case.  The large QFP footprint is for an Allwinner A13 processor — not the most performant option out there, but widely used so I figured it’d be a good starting point.  The assembly went fairly smoothly: I had to do a tiny bit of trace cutting and added a discrete 10k resistor, and I forgot to solder the exposed pad of the A13 (which is not just for thermal management, but is also the only ground pin for the processor), but after that, it booted up and I got a console!

My own SBC, with an Arduino-clone next to it for comparison.
My own SBC, with an Arduino-clone next to it for comparison.

The console was able to tell me that there was some problem initializing the DDR3 DRAM, at which point the processor would freeze.  I spent some time hacking around in the U-Boot firmware to figure out what was going wrong, and the problems started with the processor failing in “training”, or learning of optimal timings.  I spent some time investigating that, and wasn’t able to get it to work.

So I bought an Olimex A13 board, and decided to try out my brand of memory on it, since it’s not specified to be supported.  I used my hot air tool to remove the DDR3 chip from the Olimex board and attach one of mine, and… got the same problem.  I was actually pretty happy with that, since it meant that there was a problem with the soldering or the DRAM part, which is much more tractable than a problem with trace length matching or single integrity.

I tried quite a few times to solder the DRAM onto the Olimex board, using a number of different approaches (no flux, flux, or solder paste).  In the end, on the fifth attempt, I got the Olimex board to boot!  So the memory was supported, but my “process yield” was abysmal.  I didn’t care, and I decided to try it again on my board, with no luck.  So I went back to the Olimex board: another attempt, didn’t work.  Then I noticed that my hot air tool was now outputting only 220C air, which isn’t really hot enough to do BGA reflow.  (I left a 1-star review on Amazon — my hopes weren’t high for that unit, but 10-reflows-before-breaking was not good enough.)

I ordered myself a nicer hot air unit (along with some extra heating elements for the current one in case I can repair it, but it’s not clear that the heating element is the issue), which should arrive in the next few days.  I’m still holding out hope that I can get my process to be very reliable, and that there aren’t other problems with the board.  Hopefully my next blog post will be about how much nicer my new hot air tool is, and how it let me nail the process down.

12 responses to “Building a single board computer: DRAM soldering issues”

  1. Few questions:

    1. What is the new hotair unit that you are ordering ?
    2. Can you help me to understand what you mean by “process yield” ?

    Thanks

    Like

    • I bought this unit and have been quite happy with it. I’m still not able to solder the DRAM reliably, but at least the rework station isn’t part of the problem any more.

      By “process yield” I mean the percentage of the time that the “process” (in this case, DRAM soldering) is successful. Right now it is very low 😦

      Like

  2. No updates yet; I need a better testbed to make more progress on this. I was testing on an Olimex SBC, but I think I can improve the testing process by 1) using a board that is designed for rework (ie not putting components near the DRAM I will be extensively removing+readding), and 2) using an FPGA instead of a processor to get more visibility into what is or isn’t working at any given time (ie the A13 will simply say “failed” unless certain unknown criteria are met). I haven’t used DDR3 ram with an FPGA, so I’ll need to get that working first.

    My raytracer board has an FPGA and both a DDR3 and a DDR[1] chip on it, so I’ll use that for testing my use of the SDRAM controller — the FPGA is working, and the DDR1 chip is non-bga. I’m not sure how much rework that particular board will support, so I may or may not spin off a simple new board that is more tailored for this project.

    Anyway, that’s the plan; I’ve been pretty busy with Pyston and haven’t spent much time on electronics lately.

    Like

  3. Hi Kevin,

    I’m working right now on one small board with DDR3 and was wondering what BGA land pad diameter are you using is it 0.3mm?

    I found this hxxps://blog.adafruit.com/2012/07/05/ee-bookshelf-pcb-layout-for-bga-packages-an10778/ and in that document they say it can be 0.3mm but lowest land pad diameter that I seen is 0.35mm hxxp://www.micron.com/~/media/documents/products/data-sheet/dram/ddr3/4gb_ddr3_sdram.pdf

    Also what ball diameter are you using?

    Thanks!

    V.

    Like

    • I can get the exact values later tonight, but I’m not sure you should copy mine 🙂 I looked up a number of references — there are a surprising number of BGA land pattern guides out there, and they are very inconsistent. Here’s another one: http://www.xilinx.com/support/documentation/user_guides/ug112.pdf#page=87 I think I went with roughly the average of what I saw.

      Another good option is to look at the Olimex boards. In addition to being useful boards, they’re completely open source, so you can just download the Eagle files and check out what they use. I’m sure there are other open source projects as well that you can look at, that will be more trustworthy than what I happened to settle on 🙂

      Like

  4. Thanks for the link and quick response!

    From XILINX document I see they use 0.33mm land for 0.8mm pitch, I use that currently because it fits 2 traces between pads but doesn’t fit VIA using OSHPark design rules, that is actually something that I came up with on my own however I was not sure how reliable that can be so started to look around and came across your blog where you seems to have very similar situation.

    Thanks for the hint on Olimex I found sources and will on that too tonight!

    Like

  5. Hi Kevin,

    Did you finally made this prototype work? I am also thinking of building a second sbc but unable to decide the processor Allwinner or rockchip ones. I am just wondering which processor, memory, pmu combinations will be more reliable. imx233 for example has some power management issues.

    The first sbc I made was based on freescale imx233 based http://github.com/samarjit/MyIMX233. Now I am wondering which processor would be easy to build.

    Like

    • Sadly, no I never returned to this. I think the processor options have evolved pretty rapidly since my post and I don’t know what the current options are, but personally I would lean towards a processor that has a good community in terms of both Linux support and open hardware designs. ex looks like Olimex still uses Allwinner so I would err towards that.

      Your SBC looks cool, I’m impressed!

      Like

    • I’m doing very preliminary research into building a SBC, and commenting a year late.
      As far as linux support goes, Rockchip seems to be better than Allwinner.
      The Sunxi forums often point out the lack of information for Allwinner SOCs, while it seems that many Rockchip SOCs seem to have existing DSTIs configuration blobs or whatever.

      Also, ease in this endeavour seems to entail documentation. Model your next project on other opensource SBC drawings and boards were possible. There you have and idea of what hardware works, has drivers and what layout considerations you need to make.

      Hope this is actually correct, relevant, and you are still invested in the project.
      I am very inspired by your minimal implementation in MyIMX233.

      Like

Leave a comment