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:
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!
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.