SkyDogCon 2013 is quickly approaching. This year, as in the previous two years, the organizers are making electronic badges available to attendees. And once again, badge hacking is featured as one of the conference competitions. While the focus of this competition is modifying the SDC 2013 Propeller-based badge, the organizers are also encouraging attendees to showcase their hacks of badges from years gone by. So let's have some fun with the old badges!
The first real step in modifying the old badges is changing the code on the badges. This article will serve as a basic introduction to reprogramming the SkyDogCon 2012 badge using an FTDI interface.
Pin Headers
The designers of the badge brought out a couple of programming interfaces and provided through holes for attaching standard 0.1" pitch pin headers. (Speaking of the designers, you can watch their talk from SkyDogCon 2012 to hear them describe the badge in their own words.) Since I intend to communicate with the badge via FTDI, I've connected 6 right-angle pin headers to the 6 FTDI pins. I've also attached pin headers to the two pins between the 3 buttons; closing these two pins resets the chip (the LED adjacent to the pins will blink during reset). These locations are encircled in the image below.
FTDI Friend
To interface with and program the badge, I'll be using an FTDI Friend sourced from Adafruit. The badge also supports programming via ISP (2x3 pin headers next to the 6-pin FTDI headers), but I don't have an ISP programmer so that's not a viable option for me. The FTDI Friend has a few options, but I was able to get it to work in the default setup:
- +5V VCC out
- +3V Signal logic level
- RTS Pin 6 signal
You may have noticed some extra wires attached to my FTDI Friend in the top picture; I cut the trace enabling Pin 6 RTS and soldered jumper wires to both the RTS (black pair) and DTR (green pair) pads. This way, I can use a jumper to select whether Pin 6 operates as RTS or DTR.
When connecting to the badge FTDI pins, note that Pin 6 is called out on the board, next to the ISP headers. This should correspond to the RTS/DTR signal from the FTDI cable (usually a green wire). Pin 1, which corresponds to GND (usually a black wire) is adjacent to the corner button. Here's what the FTDI Friend looks like when connected properly.
Upload from Arduino
From the Arduino software, select Arduino Uno as the board to be programmed. The setup described above does not automatically reset the board when you upload a sketch, so you'll have to do that manually. When you're ready to upload, compile your sketch and then trigger the board's RESET input as you press Upload. If you get the timing right, the sketch will load to the board. Otherwise, you'll get an error (with Arch Linux, I get avrdude: stk500_recv(): programmer is not responding). To make resetting easier, I attach a harvested 2-pin momentary switch to my reset pins as shown below.
For the SDC2011 badge, select Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega 328. You'll have to manually reset it as described above.