The last few years have seen a rise of artistic PCBs. Whether these are one-off projects with a little graphic on the silkscreen or the art of manufacturing and supply chains, these fancy PCBs are here to stay. Nowhere is this more apparent than the loose confederation of Badgelife enthusiasts, a hardware collective dedicated to making expressive and impressive electronic baubles for various hacker conferences. Here, hundreds of different hardware badges are created every year. It’s electronic art, supported by a community.
Some of these badges aren’t technically badges, but rather small, blinky add-ons meant to connect to a main badge, and these add-ons are all backed by a community-derived standard. The Shitty Add-On Standard is how you put smaller PCBs onto bigger PCBs. It is supported by tens of thousands of badges, and all of the people who are spending their free time designing electronic conference badges are using this standard.
It’s been more than a year since the Shitty Add-On standard was created, and in that time the people behind the work have seen the shortcomings of the first edition of the standard. Mechanically, it’s not really that strong, and it would be neat if there were a few more pins to drive RGB LEDs. This has led to the creation of the latest revision of the Shitty Add-On Standard, V.1.69bis. Now, for the first time, this standard is ready for the world to see.
An Oral History Of The Shitty Add-On Standard
Before the Shitty Add-On standard, there were several independent conference badges with their own hats and add-ons. The 2016 Queercon badge came with hats, powered by two small expansion ports on the top of this cuttlefish badge. The expansion ports provided power, ground, and an I2C bus on a 1×4 connector, giving these cuttlebadges unicorn horns, an emo haircut, or a top hat studded with LEDs.
In 2017, there was an obvious need for a standard for badge-addons, with even more standards created. Luke Jenkins published the MiniBadge standard for SaintCon, an impressive standard that implemented 5V, 3V3, I2C and SPI in less than a square inch. The results were impressive, with more than a dozen minibadges being built for the main SaintCon badge.
Finally, we come to the 2017 / DEF CON 25 AND!XOR badge which featured Hunter S. Rodriguez and a Futurama Brain Slug.The schematic for this Brain Slug is very simple, just an ATtiny85 microcontroller and a handful of WS2812b LEDs. It’s blinky, it’s bling, and since every board house can do green solder mask, you can make a Brain Slug PCB pretty easily. Only about ten or so of these Brain Slugs were ever made (although the Gerbers are right here so knock yourself out), but it was a precedent for add-on bling.
DEF CON 25 came and went, and a few lucky people walked away with Brain Slugs. Some time around February, 2018 — the time of Chinese New Year, because that’s obviously the best time to start any sort of electronic project — a few members of the Badgelife collective started asking a few questions. The previous two years of badgemaking showed everyone add-on badges were a thing. The future would have minibadges, or other weird PCBs hanging off the big badges. What if there were a standard for Badgelife add-ons? What if these pieces of indie electronic art could host Brain Slug-like add-ons from multiple creators? The AND!XOR badge really only supplied power to the Brain Slug, but adding holes for pin headers on a badge is effectively free. The only thing you need for this is for the entire group to come to an agreement on a standard pin out.
After literal minutes of discussion, we had a standard. It was decided that the Shitty Add-On pinout should include 3.3V, Ground, and an I2C bus on four headers arranged on a 0.1″ grid. The badges would have female sockets (or just through-holes), while the add-ons would have male pins. This is the first, and only, official documentation of the electrical and mechanical specifications of the Shitty Add-On standard. No one followed the standard, but everything worked out in the end.
Why do I say no one followed the standard? Because I’m an idiot. After using Microsoft Paint for three minutes, I whipped up a quick board that would supply power to four Shitty Add-Ons. It’s the Shitty Add-On Totem, available on OSHPark. This board is as simple as it gets, with two AA battery holders and four 2×2 headers. The design was much more clever than it needed to be; two of the headers are rotated 45° clockwise, the other two headers are rotated 45° counterclockwise. This means more add-ons will fit on your totem.
Because the first publication of the Shitty Add-On standard was…. lacking… I whipped up a quick improvement. The headers (now self-documenting on the PCB with the addition of a silkscreen circle) were copy and pasted from the OSHPark render of the Totem. This, unfortunately, is the documentation everyone used. No, the headers were never meant to be rotated forty five degrees, I was just lazy and didn’t rotate what I copied and pasted from the OSHPark render. But even if the mechanical properties of the Shitty Add-On header were incorrect, at least everyone got VCC, GND, SDA, and SCL in the right place.
The foundation was set for inter-operations between badges and add-ons. The standard was finalized in February, with DEF CON a mere six months away. Dozens of PCB artisans would create their own Shitty Add-Ons. The Official DEF CON 26 badge supported the Shitty Add-On standard. The best estimates of the production of badges per DEF CON attendees say this: At DEF CON 26, there were approximately 25,000 attendees. There were approximately 50,000 badges and add-ons that supported the Shitty Add-On standard. By any measure, Shitty Add-Ons are a successful standard. Hundreds of different Shitty Add-Ons were created. Most of them had LEDs. One was a game of people eating Tide Pods on the Blockchain. Take a look:
A Newer, Betterer Standard
I would like to preface this by saying this is not the official, final release of the Shitty Add-On V.1.69bis standard. There are a few things still being worked out, especially concerning the function of the two additional pins. However, AND!XOR has already published some reference designs for an SAO using an I2C EEPROM, identical to the Tide Pod SAO of last year. Additional functionality that should be possible will be fleshed out in the future. The reason this standard is being published now is because it’s better to put things out into the world than wait until something is perfect.
By all accounts, the Shitty Add-On standard is a success, but it was not perfect. Mechanically, standard 2×2 headers aren’t very strong, and that goes doubly so if you’re using SMD male headers on the add-on. Not many people used the I2C bus, but there were a lot of people that wanted to extend their WS2812 or APA101 RGB LED strings.
A standard isn’t a standard unless there’s a better one, so now the community of badge makers has settled on a newer, betterer standard for Shitty Add-Ons. It’s Shitty Add-On V.1.69bis (SAO.69), and it vastly increases the capability of the Shitty Add-On standard while retaining backwards compatibility.
- A New Connector!
Badges use 2×3 female (non pinned) headers, 0.1” pitch. Similar to last year, but 6 pins. It is highly suggested that badges use through-hole connectors, lest SAOs rip off your pads. These may be keyed, but through-hole 2×3 keyed connectors are either impossible to find or absurdly expensive. The thing to search for to find a keyed badge connector is, ‘2×3 Pin 6 Pin With Polarizing Key’. eBay will turn up results for that, but you can only buy 100 at a time. AliExpress reportedly has them, but they’re $0.40 USD / piece.
Needless to say, the keyed badge connector is rare, expensive, and difficult to find. However, it perfectly solves the problem of Add-Ons coming loose. These connectors have been verified as fitting a standard IDC shrouded header. Use the best badge connector at your own risk.
Add-ons use a 2×3 male, pinned, shrouded connectors. These are actually some of the cheapest and most ubiquitous connectors available, and if you have a device that has an AVR ISP header, this is the same connector. As with the badges, it is highly suggested you use a through-hole header for mechanical strength.
A New Pinout!
The pinout for SAO.69 is exactly the same as last year’s version, with the addition of two ‘GPIO’ pins off to the right. These will be used for various add-on types, support for addressable RGB LEDs, and serial connections.
Of course, we expect most badges to only use power, and even here we have specifications: Maximum power draw by a Shitty Add-On is 1.1 millihorsepower. If a Shitty Add-on drives a GPIO pin, it MUST be through a resistor of at least 330 ohms. No signals may exceed 3.6V. For power-only add-ons, Utilize only VCC (3v3) and GND to do whatever you want. Other pins should be NC. Don’t exceed 1.1 millihorsepower draw on your SAO.
With the addition of two new pins, we have some options for serially-addressable LEDs. For WS2812 (or NeoPixel) LEDs, badges can support WS2812-based SAOs by outputting a WS2812 datastream from the badge to an SAO to sync or drive an RGB pattern. Badges can either connect the end of their existing WS2812 strand’s data line to GPIO1, or connect a badge GPIO to GPIO1 to send a datastream meant purely for the SAO strand. Note that if you’re extending the badge’s strand of WS2812s, remember to add ~10 more to your ‘strand length’.
For APA102 (or DotStar) LEDs, drive them similar to how WS2812 works, except with two pins. GPIO1 is used for data (DO / MISO), and GPIO2 is the clock (CO / CLK). Badges may also directly connect the output of the last LED in a APA102 chain to this pin provided that the pin never exceeds 3.3V. If the APA102s are driven by a higher voltage (e.g., 5 volts), a voltage divider may be used on the badge-side to bring the output down to 3.3V. SK9822 LEDs are basically the same as APA102.
Serial/UART data is also kinda supported, but using serial on an SAO is generally a bad idea. The main reason for this is that some badges will have multiple SAO ports, all using a single bus for all pins. This means when utilizing serial, someone would have to standardize a common “badgebus” language on top of serial to differentiate a target between multiple SAOs on the same serial bus, lest there be crosstalk, etc. This is similar to what is required for nodes in pub/sub use cases like MQTT. Notes on the implementation of serial include:
- An SAO should not send output to the SAO TX pin (GPIO2) until it has received input from the badge first.
- GPIO1 will be data from the badge to the SAO (badge TX, SAO RX)
- GPIO2 will be data from the SAO to the badge (badge RX, SAO TX).
- A default baud rate of 115200 is recommended.
- Remember that use of serial at all will require working with a badge maker as it requires both hardware and software support on the badge side.
And It’s Backwards Compatible!
Although we hope the new mechanical spec will give us more resilient add-ons, there are already thousands of these add-ons deployed. SAO.69 is backwards compatible with existing add-ons! Badges still get female headers, and add-ons still get male pins. SAO.69 standard just adds two pins to the right.
There has been some talk about adding a shitty mechanical standard, such as a 3mm hole for zip ties, or somewhere an M3 bolt could be added. While this would be fantastic for loose add-ons, the shitty ‘do what you want’ option works better for us.
Is this the best standard? No, not at all. That’s where the Shitty Add-On standard gets its name. There’s no way to tell if a Shitty Add-On supports WS2812, APA102, or serial connections. There’s some talk of a resistor-based voltage divider between VCC and GND, connected to GPIO1. This could, in theory, be used to query a badge to detect if it’s a WS2812, APA102, or Serial connection. We have no idea how this would work yet. Alternatively, we could add an I2C Flash chip onto each badge, with a tiny bit of data saying what the badge is. Again, Shitty Add-On Standard.
There’s a Standard for Making Standards
The Shitty Add-On spec is, after all, just something that can be easily implemented, shoved onto a board, and shipped out with whatever conference badge you’re building. The point isn’t to take ourselves seriously, it’s only about putting more bling on boards and giving everyone a platform to experiment with small add-on PCBs.
However, and this is a big however, this is a legitimate standard born of Microsoft Paint and a desire for PCB blinky bling. This leads to the possibility of making the Shitty Add-On standard an actual standard, and yes, there’s a standard for making standards.
This is only a half-serious discussion now, but the process of making a standard begins with asking a Standards Development Organization for the approval to create a new standard based around a community’s needs. Once that’s done, it’s a matter of assembling a Working Group, iterating over a draft of the standard, and finally getting it approved by the Standards Development Organization. I think the community of badgemakers can handle putting together a few drafts of an official Shitty Add-On standard, because some of us are still running Windows and have Microsoft Paint installed. The trick is getting either the IEEE or ISO in on the game. An official, published standard of badge-to-badge communication is within our grasp, we just need someone on the inside with a sense of humor.