I got my Bus Pirate today, just in time to talk to my project's audio codec via I2C. It is no exaggeration to say the Bus Pirate saved me a metric crap-ton of time. In about ten minutes, I had the Bus Pirate hooked to the audio codec, figured out the text command interface, and started configuring the audio codec to interact with the microcontroller. Here's the Bus Pirate (red, foreground) hooked up to my audio prototype board (purple, in the background):

Bus Pirate plundering my audio codec's registers
Bus Pirate plundering my audio codec's registers

I've been through this before, the hard way. Bringing up new devices on the I2C bus can be tedious, and it's hard to know what you're doing wrong. Is my I2C peripheral driver bad? Or am I sending bad commands to the I2C device? Without a fancy logic analyzer, it's hard to tell for sure. Now I can remove one variable from the process. I have a set of commands I know will correctly configure my audio codec, so later on, when I'm programming the microcontroller to do the configuration, I can rule out having a botched or malformed set of I2C configuration commands. Woo hoo!

Oh, wait. I still need to write an I2C driver for the STM32 microcontroller… Eeeew.