|     | 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.
    

    
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.
    
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?
    
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.
    
The following (simplified) sequence of events occurs when
      starting the car:
    
A similar sequence occurs when the driver shuts off the ignition:
    
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.
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. 
    
