Paul Rako, recently sent me a sample of the AVR Dragon (Atmel store page), which is a in-circuit serial programmer (ISP) and On-Chip Debugger (OCD). The ISP functionality is familiar to most hobbyists in the AVR embedded programming scene; through the standard 2x3 pin header, you can erase the flash memory on an AVR and download new program code onto the chip. A typical example of an ISP programmer, and what I've been using exclusively up until now, is the wonderful, if sometimes a bit flaky, AdaFruit USBtinyISP.
As you look back through my blog, you can probably tell that only having ISP capabilities will get you pretty far, but where the Dragon really shines is in its ability to perform on-chip debugging. Most of the third-party programmers only implement the basic SPI-based erase-and-burn cycle you use when programming an AVR, but OCD allows you to set break-points in your program on the actual chip, and then step through your program code, read variable values, etc. All those glorious interactive debugging features that computer programmers have been spoiled with for decades. This makes embedded development MUCH easier, and an ability I've been suffering without while my projects have grown progressively more sophisticated.
- The first row has 3x Vcc and 3x GND, which seems a little strange for a programmer, but might be handy for some projects?
- The second row has your 10 pin JTAG and 6 pin ISP headers, which are your two work-horse programming interfaces for AVRs big and small, and finally an unpopulated high voltage programming interface. The HV_PROG interface allows you to burn AVRs like old-school EEPROMs, and allows you to get around having to use the SPI ISP bus for programming. This is most useful when you want to use the reset pin as an IO pin (did you ever wonder why Atmel bothers assigning an IO port number to the reset pin?).
- And below the three programming interfaces... six rows of unpopulated, unlabeled, headers? Uhhh...
Fair enough; I can load the bottom of my Dragon with a socket and make it an AVR target board. I'll just pull up the manual and figure out what the on-PCB pinout looks like...
So apparently, Atmel didn't feel the need to put the Dragon's users manual on its product page? After finally resorting to searching through Google, I managed to find the users manual in Atmel's online help system, which quickly lead me to what I was looking for. I'm not entirely impressed with the rats-nest of jumper wires they have in the tutorial, and the three pairs of Vcc/GND make a lot more sense now, but I'm not convinced I'll not just stick to my standard practice of building separate target boards for each AVR model I use and keeping them in a ziplock in my drawer. I'd have expected a target area like that to use a bilateral switch array to allow for automatic retargetting to a specific AVR model, but that's asking a bit much of a $50 dev tool.
So overall, I'm happy with the packaging and feature set, but am a little disappointed that they made the board 50% larger for what seems like a half-thought-out target area. I look forward to being able to use a less kludgy programmer than the USBtinyISP, and finally being able to set break points in my code. As Paul says, "friends don't let friends go without on-chip debugging."