The Columnator

Projects > Columnator

The Columnator

The Columnator is my latest embedded micro-controller project for my C6. It is a replacement for the Steering Column Lock Controller Module (SCLCM), a subsystem in the C6 that is notoriously prone to failure and has the potential to leave the car owner stranded.

The Problem

If you have ever owned a C5 Corvette, chances are you have experienced a failure of the steering column lock system. When the system fails, it leaves the car unable to start and the steering column locked; the owner must call for a flatbed tow truck for a trip to the Chevy dealer. The C5 column lock design was so prone to failure that GM was forced to recall all C5 Corvettes with manual transmissions to fix their column locking mechanisms. Sadly, many of these "fixed" column locks failed again, leaving their owners stranded. This was a publicity disaster for GM and a nightmare for Corvette owners. The aftermarket responded to this need by offering "Column Lock Eliminators" - small devices that plugged into the wiring harness and either emulated or completely eliminated the column lock mechanism, thereby fixing the problem for good.

GM tried again with the C6, and designed a totally new column locking mechanism. Unfortunately, this new design was also failure-prone, and many C6 owners were also left stranded with a "Service Column Lock" message on their Driver Information Center (DIC). GM finally learned its lesson, and stopped installing the column locking mechanisms in the 2006 model year, at least in the US market (some European countries apparently require all cars to have column locks, so Corvettes destined for export to those countries still have column locks installed at the factory). Once again, the aftermarket responded to the need, and one can now purchase a Column Lock Eliminator (CLE) for the C6. This device plugs into the SCLCM in place of the real steering column lock mechanism and is designed to provide the appropriate voltage feedback to make the SCLCM believe that there is a properly-functioning column lock in operation.

As you have probably guessed by now, my C6 suffers from this column lock problem. The first time it happened to me, the column lock mechanism was replaced under warranty. Eventually that replacement lock also failed - and this time no warranty was in effect. Faced with the prospect of paying approximately $1000 for a dealership to install another column lock (with no assurance that this new replacement would not also fail prematurely), I decided to try one of the aftermarket Column Lock Eliminator devices. It worked great for about a week, but soon I started seeing the "Service Column Lock" messages on the DIC once again. Apparently the CLE does not work 100% perfectly with every car, perhaps due to tolerances in the various components. Whatever the cause, sometimes the SCLCM in my car isn't fooled by the CLE, and the dreaded "Service Column Lock" message appears on the DIC. I needed to find a permanent solution to this problem before I wound up stranded somewhere.

What To Do?

By studying the C6 Service Manual, I learned that the steering column lock has two main components: the steering lock mechanism itself, and a controller module (the Steering Column Lock Control Module). The SCLCM responds to messages it receives via the Class 2 bus from other modules in the car and locks or unlocks the steering column in response to the commands sent to it. The SCLCM also monitors a feedback circuit from the column lock motor to determine whether the lock mechanism is working correctly; if the SCLCM doesn't like the feedback that it receives from the lock motor, it reports a fault (DTC), displays the "Service Column Lock" message, and prevents the car from cranking - IOW, it's the SCLCM that can leave me stranded. If I could just remove the SCLCM from my car, my problem would be solved, right?

Unfortunately it's not that easy. Every module connected to the Class 2 bus sends out a "State of Health" (SOH) message periodically. Other modules on the bus listen for these SOH messages; if a SOH from a particular module is not received within the expected window of time, the other modules on the bus will record a DTC and the Check Engine Light will come on. In addition, if the RCDLR sends a request to unlock the steering column and gets no response, the car will refuse to start. No, simply unplugging the SCLCM is not the answer.

What if we could reprogram the SCLCM to ignore the column lock mechanism? What if we could get it to always report "success" whenever another module asked it to lock or unlock the steering column without actually energizing the column lock mechanism? This would leave the steering column permanently unlocked and never prevent the car from starting. That would solve the problem, all right, but it's pretty tough to reprogram an embedded system without the proper development tools and (more importantly) the source code to the firmware. And the chances of convincing GM to release new firmware to lobotomize the SCLCM are somewhere between Slim and None. So if we can't remove the SCLCM, and we can't reprogram it, perhaps we can replace it?

Enter the Columnator

In order to replace the SCLCM, I had to create a device which would emulate the real SCLCM and fool the other modules in the car into thinking that the SCLCM is still present and functioning properly; I call it The Columnator. The name "Columnator" is a portmanteau of "Column" and "Emulator," intended to evoke mental images of an Arnold Schwarzenegger-like character "terminating" my column lock problems once and for all. Using one of my early HUD One prototype boards as a starting point and adding some additional circuitry gave me a host platform for my emulator software. The board connects to the Class 2 bus and responds appropriately to all the messages sent to the SCLCM by the other modules in the car (without actually doing anything, of course). It also sends out the periodic SOH messages that prevent the other modules in the car from throwing DTC codes. 

Pulling out my trusty Class 2 bus monitoring tools, I began to study the message traffic to and from the SCLCM on the Class 2 bus.

More Reverse-Engineering

The following (simplified) sequence of events occurs when starting the car:

  1. With the ignition off, the driver presses the top portion of the bright green "Start" switch.
  2. The RCDLR sends an "unlock" command to the SCLCM.
  3. The SCLCM queries the RCDLR for the column lock password.
  4. The RCDLR responds with the password stored in its nonvolatile memory.
  5. If the password from the RCDLR matches the password stored within the SCLCM's nonvolatile memory, the SCLCM will energize the column lock motor and the lock will begin to retract. (A DTC is set if the passwords do not match.)
  6. The SCLCM responds to the "unlock" command with one or more status messages; while the lock motor is running, the an "unlocking" status is reported. Once the motor has stopped and the lock is fully disengaged, the status becomes "unlocked."
  7. Upon receipt of the "unlocked" status, the BCM changes the power mode of the vehicle to "CRANK" and the engine starts.

A similar sequence occurs when the driver shuts off the ignition:

  1. With the ignition on , the driver presses the bottom portion of the "Start" switch.
  2. The RCDLR sends a "lock" command to the SCLCM.
  3. The SCLCM requests the column lock password.
  4. The RCDLR provides the password.
  5. If the passwords match, the SCLCM energizes the column lock motor, which engages the locking mechanism. While this motor is running, the SCLCM reports a "locking" status. When the motor stops and the lock is fully engaged, the SCLCM reports a "locked" status.
  6. Upon receipt of the "locked" status message, the BCM changes the power mode of the vehicle to "RAP" (Retained Accessory Power).

Happily, the number of messages that an emulator needs to respond to is quite small. It must of course respond to the "lock" and "unlock" commands as well as the "password" message from the RCDLR. It must also transmit the "SOH" messages which all nodes on the Class 2 bus must send periodically. The emulator must also monitor the power mode of the vehicle, and stop transmitting altogether once the ignition is turned off.

Power Considerations

Ignition-off power consumption is a prime concern with any node on the Class 2 bus (see additional discussion here). Unlike the No*Rats, which must be able to wake up periodically even while the Class 2 bus is quiescent, the Columnator only needs to run while the Class 2 bus is active. The AU5783 Class 2 bus transceiver chip I selected for this project has a tremendously useful feature: it has an "inhibit" output signal which can be used to shut off power to the rest of the circuit whenever the Class 2 bus is quiescent, cutting ignition-off current draw to about 90 uA according to the datasheet (the actual current draw us too small for my Fluke meter to measure - the display shows 0.000). When the other nodes in the car "wake up" and traffic once again appears on the Class 2 bus, the AU5783 re-enables power to the microcontroller which quickly resumes normal operation. A small relay controlled by this inhibit signal switches 12V power to the main Columnator circuitry.

Columnator prototype

Current Status

The Columnator prototype has been installed and is running in my C6 full-time. Not only is it working flawlessly, it's actually an improvement over the real SCLCM. With the real one there was always this little pause between hitting the start button and the onset of engine cranking while the column lock motor moved the locking pins; with the Columnator, this pause has been eliminated and the engine begins cranking immediately. Because it's buried deep under the dash and a real PITA to get access to, rather than remove it I left the SCLCM in place and disabled it by pulling the fuse.