Last week I submitted the Terrible Cluster backplane PCB to Elecrow for manufacturing, and this weekend received notification that it has shipped. Elecrow is nice enough to take a photo of the boards before shipping, and I can see that the plated slots for the microUSB plugs and the power jack were done correctly. The graphic on the back, a skull my son drew last year, doesn't look so hot. But I'm not losing any sleep over that.
I still haven't ordered parts. I have a BOM on DigiKey that's ready to go once I see the boards make it through customs. I'm guessing it's a couple of weeks before I can get down to soldering.
Meanwhile, let me catch you up.
A few weeks ago at work I had my first experience using Ansible. I needed to automatically build firmware for a legacy product that has very specific host requirements. At the suggestion of a coworker, I used Ansible and Vagrant to assemble VMs with the right build environment and see the build through to completion. While that was fun, it didn't give me an opportunity to use Ansible for parallel deployment. I had a pile of Raspberry Pi Zeros, an interest in HPC, and an itch to make another PCB. And so I decided to make a simple cluster.
I first did a mock-up using a Pi3 and three Pi Zeros connected using USB device mode to gauge network performance. I lost the numbers as they were unimpressive, but with all Zeros doing bidirectional transfers the upstream perfomance was in the 10Mb/s range and downstream was around 80Mb/s. That's going to drag down any tightly coupled compute jobs, but since I plan to use it for playing with deployment and management I think it will be fine.
I then looked at packaging. I ended up choosing a through-hole soldered USB micro vertical plug from Hirose rather than the "dock" SMT one used by other similar projects so that I could fit the Pis closer together. The SMT pins on the dock connector live on the long edge of the connector, so hand soldering would be near impossible unless I spaced them 20mm or so apart. Cost is comparable, and the through hole is narrower which gives me more board space to work with. For some reason, this connector and others like it require a board that's under 1mm thick. Fortunately Elecrow can do 0.8mm boards. I will have to take board flex into account when I make a case for this since 0.8mm could flex too easily under the strain of the vertically mounted Pi Zeros.
I ended up laying out a board with the Cypress CY7C65632 4 port USB 2.0 high speed hub controller. I chose this part for its on chip 3.3V regulator and the ability to configure operating modes without an external EEPROM. I added an AP2191DWG USB power controller and a big 220uF cap to each downstream port so that the head node can control power for each port. Each power controller is driven by the hub, and the overcurrent signals are fed back to the hub to handle any unpleasantness. The AP2191 can handle 1.5A per port, and I don't expect any of the nodes to go above 0.7A.
I strayed pretty far from Cypress's design guide, using a two layer board instead of four, and putting the smaller decoupling caps around the periphery of the hub chip instead on on the back side. I think I did an ok job on trying to keep loops small for power pins and maintain USB differential impedance, so I'm hoping for the best.
- 3D printed enclosure with strain relief for the backplane
- Build and bringup v0.1 backplane
- Shell scripts for USB port status monitoring and power control
- Set up head node to USB boot the compute nodes
- IP assignment based on USB port