Olimex make a wide range of handy inexpensive products. One of these is the AVR-ISP500,1 an USB hosted in-circuit programmer for AVR microcontrollers. I was keen to use one of these to program ATmega 168 chips to make my own Arduino-like projects.

Whilst the programmer worked perfectly on my Linux box, it sadly failed on my MacBook Pro, which runs OS 10.5.6. I emailed Olimex about this, and they provided a fix almost immediately—I emailed them on Saturday and had the fix on Monday. In short, you simply need to update the firmware to version 1.005.

Thanks and much qudos to Olimex for fixing this so quickly.

Symptoms of the problem

If things are working properly, then when you connect the device to the USB port a device should be created in /dev. On my MacBook Pro (after applying the fix) I see

 $ ls /dev/cu.usb*
/dev/cu.usbmodemfd1131

However with firmware 1.004 the Mac doesn't create the device. Instead, I find the following entries in the system log:

$ sudo dmesg
...
0        0 AppleUSBCDCACMControl: getFunctionalDescriptors
                       - Descriptors are incorrect, checking...
AppleUSBCDCACMData: start: InterfaceMappings dictionary not found for
                              this device. Assume CDC Device...
0        0 AppleUSBCDCACMData: start - Find CDC driver failed
...

If you poke around in the Apple System Profiler then the device is found on the USB bus, so it's clear that there's some sort of compatibility problem.

How to fix it

Simply download the new firmware and apply it. Both the firmware and the manual can be found on the the Olimex website.2

The manual describes in detail how to apply the upgrade from Windows, so that's what I did. The hardest part of the job is installing the Windows drivers, and trying not to curse at the horrors of using Windows again.

The whole process took about ten minutes.

When it's fixed

Having upgraded the firmware, just plug it back into the Mac. The system log now shows:

$ sudo dmesg
...
AppleUSBCDCACMData: start: InterfaceMappings dictionary not found for
                              this device. Assume CDC Device...
AppleUSBCDC::createSerialStream NON WAN CDC Device
AppleUSBCDC::createSerialStream using default naming and suffix...
AppleUSBCDCACMData: Version number - 3.2.12,
                              Input buffers 8, Output buffers 16
...

Furthermore you really will find an entry in /dev which is just what e.g. avrdude needs.