Control 16 Firmware Replacement
by matt on Oct.21, 2009, under Hacks
As I have mentioned in my previous posts about the Ensoniq Control 16, it is a DAW control surface designed to interface to proprietary DAW software via a proprietary PCI card. As I have the C16, but not the PCI card, I have been working on reverse engineering the interface so that I can build a USB adaptor for it and use it with my PC.
I have previously written about how I built an RS-232 adaptor for the Control 16, but this alone did not allow me to communicate with the Control 16 as I did not know its communication protocol. As I did not have the PCI card to act as a master and provide something for the C16 to communicate with, I was not able to sniff the communications and reverse engineer them. My solution instead was to replace the firmware running on the C16’s microcontroller with one that I custom wrote, and which used my own communication protocol.
Control 16 Architecture
The Control 16 is based around an Atmel AT89C52 microcontoller. I replaced this with an AT89S52 for development as I could then use its in-circuit serial programming feature. Using a multimeter I traced some of the connections between the microcontroller and other ICs on the board, and inferred the rest. The result was that I was able to map out a block diagram of the mainboard, as shown below.
I’m not going to go into a lengthy explanation of the architecture unless there is someone out there who it’s useful to, so if that is you then post a comment and let me know.
Firmware Replacement
I developed the firmware replacement using the SDCC toolchain. I have released the code under the GPL v3 license in case it may be of use to anyone. It can be downloaded here: C16Firmware. Please not that there is a bug in the current version of the firmware code. I will update it at some point, if you need it sooner let me know.
This firmware detects events from the sliders, buttons, jog wheel, and rotary encoders (though these have issues) and transmits their values via the serial port. It is also allows the values of the LEDs to be set via commands received on the serial port. So all-in-all it is almost fully functional. The communication protocol is a fairly simple text-based protocol.
Now that the firmware is completed, the next stage in my C16 project is to develop software that runs on the host PC and converts between the simple text based protocol of the C16, and some other midi control protocol that can be used by DAW software.
