virtualbox

Upgrade the firmware on a Pololu Mini Maestro using OS X and VirtualBox

The following is a step-by-step guide on how to upgrade the firmware of your Pololu Mini Maestro USB Servo Controller using OS X and VirtualBox.

You'll need to spin up a virtual machine. I decided to use a Windows 7 image to install the Maestro Servo Controller Drivers and Software only because Windows seems to be the Operating System Pololu primarily targets. So, I figured I would be less likely to run into issues. However, according to Polulu's documentation, Linux is supported as well.

For this guide, I'll be using the Mini Maestro 12-Channel USB Servo Controller. I assume the steps for Pololu's other controllers will be nearly identical.

Before starting, go ahead and plug in the Mini Maestro device.

Next, you'll need to download VirtualBox and install it. I used VirtualBox 5.1.2, as that's currently the latest version.

Install Oracle VM VirtualBox on Mac OS X

Next, you'll need to download the Oracle VM VirtualBox Extension Pack and install it. The extension pack will be needed in order for the USB ports to work with the Maestro board correctly.

Install Oracle VM VirtualBox Extension Pack on Mac OS X

You will then need to download a Windows 7 VM image and set it up in VirtualBox. I downloaded the IE 11 on Win7 image. When the download is complete, unzip the archive, then open the IE11 - Win7.ovf file. This will launch VirtualBox and start the Wizard for setting up the new VM. Make sure to bump the amount of allocated RAM up to 2048 MB.

Install Windows 7 VM image to VirtualBox on Mac OS X

Note that the OS in the VM image will reset itself on restart. So, after it is installed, be sure to pause the state instead of doing a full restart.

Now, launch the new Windows 7 Virtual Machine. Once the machine boots, you'll want to open IE and download the Maestro Servo Controller Windows Drivers and Software. Once it's downloaded, install and launch the application inside the VM.

Polulu Maestro Servo Controller Software on Windows 7 VM image in VirtualBox on Mac OS X

At this point, you'll notice that the Maestro Servo Controller software is unable to find your Mini Maestro device! In order to get Windows to detect it, we'll need to set up a USB Device Filter in VirtualBox.

Before doing this, we'll need to capture some information about the Mini Maestro device. On your host machine, open up a terminal and run VBoxManage list usbhost. You will likely see several USB devices listed. Find the one that reads Pololu Mini Maestro 12-Channel USB Servo Controller under the Product section.

Polulu Maestro Mini Maestro device found after running VBoxManage list usbhost

Now that we have the device information, we're ready to set up a USB Device Filter in VirtualBox! First, click the little USB icon in the bottom-right corner of the Virtual Machine window. Next, click the USB Settings... option presented in the menu.

USB Settings option in VirtualBox shortcut menu

This will pop up a new window allowing you to set up USB Filters. Hit the button at the very top of the list (with the blue circle), then edit the newly created filter, filling out the fields manually so that they match the values we captured earlier in terminal when we ran VBoxManage list usbhost.

Creating a new USB Device Filter in VirtualBox for the Pololu Mini Maestro

After hitting OK (both buttons), you should now be able to click the USB Device list in the bottom-right hand corner, and see a new one for the Pololu device. Go ahead and select it.

Binding Pololu Mini Maestro USB device to virtual machine in VirtualBox

After selecting the newly available device, wait a few seconds for the drivers to set it up, you should then see the Pololu software detect it!

Pololu Maestro Control Center detects Pololu Mini Maestro device with old firmware

We're now ready to install the new firmware! Launch IE again in the Virtual Machine and download the new Pololu device firmware.

Next, make a backup of the current device settings by navigating to File then Save settings file. It also might not hurt to take some screenshots of the settings and manually save out the code from the Script section, just in case.

Pololu Maestro Control Center save settings file

Next, navigate to Device and then Upgrade firmware.... This should trigger an alert modal warning that the action will put the device into bootloader mode. Hit OK.

Pololu Maestro Control Center put device into bootloader mode

In the next window, hit the Browse button and select the new firmware file that we downloaded earlier.

Select firmware file in Pololu Maestro Control Center

The next option is to select a COM port. Unfortunately, the dropdown box will be empty! This happens because we put the device into bootloader mode and the Virtual Machine no longer recognizes it. To get the device recognized again, go down to the USB devices shortcut in the bottom-right corner of the Virtual Machine window, and select the Pololu device that is in bootloader mode.

VirtualBox select Pololu Device in bootloader mode from USB devices menu

It may take a little bit of time for the Virtual Machine to set up the drivers for the device now that it's in bootloader mode. Give it a minute or two. After that, try clicking the dropdown box again (even if it's still empty) and you should see a new COM option populate it!

Select COM port in Pololu Maestro Control Center

Once you select the COM port, hit the Program button. It will flash another alert warning that the device will be wiped. Hit OK and the new firmware will begin uploading!

Uploading new firmware to device in Pololu Maestro Control Center

Once it's finished, you'll notice that the device is not detected by the Pololu Maestro Control Center. This happens because some of the settings we used in the USB Device Filter are now different.

To make the device detectable, you will want to navigate to USB Settings in the lower right hand corner and edit the USB Filters again. Select the the USB filter filter we set up earlier and update the Name section and the Revision section to reflect the new firmware version. 0102 = firmware 1.02, 0103 = firmware 1.03, etc

Creating a USB Device Filter in VirtualBox for the Pololu Mini Maestro

After you hit OK, you should once again, see a new device available in the USB devices shortcut menu in the bottom-right corner of the Virtual Machine window. This time, it should have the new firmware revision version. Go ahead and select it.

Binding newly filtered Pololu Mini Maestro USB device to virtual machine in VirtualBox

After waiting a few seconds, you should see the settings populate in the Pololu Maestro Control Center. Next to the Connected to dropdown box, you should see the new firmware version reflected!

Binding newly filtered Pololu Mini Maestro USB device to virtual machine in VirtualBox

Now, lets restore the old settings that were backed up earlier. Go to File and then select Open settings file. Select the file that was saved earlier when making the backup.

Go through the various tabs (Channel Settings, Serial Settings, Sequence, etc) and make sure that your settings still look correct. If everything looks good, hit Apply Settings.

Congratulations! You now have a Pololu Mini Maestro device with upgraded firmware! At this point, you can turn off the virtual machine and let the Pololu device connect to OS X again.

A little background on why I wrote this: I recently encountered an issue communicating with my Pololu Mini Maestro 12-Channel USB Servo Controller when using OS X El Capitan 10.11. The serial port for the device would close and then completely vanish almost immediately after being opened. The following error would then be returned.

{ [Error: ENXIO: no such device or address, read] errno: -6, code: 'ENXIO', syscall: 'read' }

I was still able to write to the port, but only within a small 100-400ms window between the port opening and closing. After writing some tests and fiddling around with it, I opened a new Issue in the node-serialport Github project since that's the software I was using to communicate with the device. (node-serialport is a fantastic project by the way, check it out if you get a chance!)

It definitely seemed like a hardware issue at first. But, after some more research, I discovered that a firmware update (1.03) had very recently been released by Polulu specifically addressing communication issues between the board and OS X El Capitan!

Unfortunately, the software that is required to upgrade the firmware is not supported on OS X... Following the steps in this guide did allow me to get it upgraded, though.

After completing the firmware upgrade to v1.03, I was able to keep ports open without them immediately disconnecting and getting that ENXIO error.

more OS X posts

more bash posts