How does it work? - sambthompson/SAAB-CDC GitHub Wiki
The BlueSaab pairs via Bluetooth to your phone or media player, and relays the played audio to the car's Integrated Head Unit (IHU) by pretending to be a CDC unit. Since it's Bluetooth, it works should work with any smartphone or media player with audio playback and Bluetooth support. It also receives messages from the car about buttons pressed on the IHU and steering wheel audio controls and relays these to your phone, to start and stop playback, skip forward, etc.
I want the gory details!
When Saab designed the cars supported by BlueSaab, they specified an interface between the CDC and IH units that was not proprietary to any particular audio system OEMs such as Clarion or Pioneer; in fact, in the earliest models with this support, the head unit was manufactured by Clarion and the CDC by Pioneer. The control interface between the two units is based on Saab's low-speed implementation of the CAN bus standard/protocol, referred to as the Instrumentation Bus (I-Bus). This is a two-wire balanced signal digital signal bus.
The interface to the CDC provides 3 main connections to the car and IHU:
- Power and ground; this is the standard 12V from your car's battery. For the CDC the 12V supply is fuse protected, but always on (i.e. not controlled by the ignition switch). Note that the fuse is shared with the radio and depending on the model may be shared with other components too.
- Analogue audio signals; given the length of cable between the CDC and IHU, the left and right stereo channels are carried via balanced lines, with 2 wires per channel. This is to minimise interference/noise from the other wires in the car near these lines, and is different to the common ground unbalanced wiring used on most consumer audio applications. This wiring is directly from the CDC to the IHU and not connected to other modules in the car.
- Control signal bus; The CDC and IHU are both connected to the car's I-Bus, that connects many of the electronic control units in the car, including the Saab Information Display (SID), climate control, anti-theft unit, etc.
The BlueSaab is made from three major components (other than support/power):
- A BlueTooth audio module (RN52) that communicates with the phone/media player and produces the analogue audio signals for the audio signal lines;
- A CAN-Bus interface IC (MCP2515) that is linked to car's I-Bus and sends and receives control messages to/from the car, such as button presses;
- A microcontroller (ATMEGA328) that controls the RN52 module and translates between the I-Bus messages and the serial control interface on the RN52 module.
What about the amplifier shield?
The BlueSaab module as originally designed sends audio signals to the IHU at a lower level than the CDC it replaces; because of this, there is a natural difference between the volume of the radio, for example, and the BlueSaab source, although this can be compensated for by increasing the output volume of your audio device (e.g. smart phone), or by increasing the head unit volume, or both. However, as an option, a shield based on the THS4522 balanced amplifier IC is available, and plugs into the JP2 header on the main BlueSaab PCB.

This replaces the 4 jumpers installed on this header if the amplifier shield is not fitted.
The default amplification is approximately 2x the volume, estimated at approximately +5dB, however by using other resistor values than 2kΩ for R5-R8, other gain amounts can be selected; each kΩ of additional resistance increases the gain factor by one.
There is also a version of the shield (v1.2) available for retrofitting to BlueSaab modules earlier than v5.0, however this requires desoldering the CDC connector and making modifications to the pins. See this forum topic for details
What about all the connectors/switches/buttons?
Aside from the main 12 pin connector that the CDC cable plugs into, there are more connectors and headers on the BlueSaab module, some of which are only required for initial programming or troubleshooting. Note that not all connectors are on all versions; versions where the connectors were added are noted.
Top side:
- ISP1 (3 x 2 0.1" pitch header, below centre left of board, since v4.1): In-system Programming connector for uploading bootloader code to the ATMEGA328. This was required due to the switch to a surface mount ATMEGA328, rather than DIL packaged version that could be programmed with bootloaded prior to soldering;
- UPLOAD (Mini USB-B socket, bottom left, since v4.1): Code upload/serial interface to ATMEGA328 (once bootloader installed). Also used to configure RN52 module via serial pass-through code;
- FTDI_BASICPTH (6 x 1 0.1" pitch header, bottom edge of board, no label, since v2): Alternative to Upload USB/on-board FTDI interface IC (bypasses FTDI chip and links directly to ATMEGA328);
- UART (4 x 1 0.1" pitch header, below centre right of board, since v2): connection to serial interface between the ATMEGA328 and RN52 modules, for diagnostic/bypass purposes.
- JP2 (5 x 2 0.1" pitch header, top right, v5.0): Optional amplifier shield connector. Note that if the amplifier shield is not fitted, the leftmost 4 pairs of pins must be jumpered to pass through the 2 lines x 2 channels of audio. However the right most pair is for amplifier power and ground. DO NOT JUMPER THIS PAIR.
- AUDIO_JACK_SETH (3.5mm audio jack, below JP2, no label, since v2): Optional mic input intended for connecting an in-car microphone for cars with OnStar to the bluetooth connected phone, to use with voice controls (e.g. Siri). If your car doesn't have OnStar, you won't need this connector. This jack is not currently operational, pending development of software (and possibly more hardware) support.
- FACT_RESET/RN52_RESET (2 x 1 0.1" pitch header, below center, v3.0 to 4.1, replaced by button at bottom of board in v5): Connected to the reset pin of the RN52 module (and the reset pin of ATMEGA328 from v5): This is used to reset the RN52 to factory defaults, as a last resort. To reset the RN52, you have to hold the button down while powering the module (via any source, USB, FTDI, CDC connector) and hold it for 1 second, then release for 1 second, hold for 1 second, release.
- DFU (switch, various places on the board depending on version, v3.0 to 4.1, replaced by diode in v5): to enable firmware update mode on the RN52 module.
Bottom side:
- RN52_Firmware (Mini USB-B socket, bottom left, since v2): This is designed to allow updating of the firmware on the RN52 module. It already ships with firmware, so this will only be used if a upgrade is required. FIXME: In this forum topic, it was reported that RN52 modules after v1.10 use UART for firmware updates, not this connector. Is it still needed?
Blinkenlights!
From top to bottom, on the left hand side of the top of the board (from v2):
- BT1 (Red) and BT2 (Blue): the flashing of these two LEDs indicates the RN52 Bluetooth status (any other combination is an error; as configured in BlueSaab, RN52 is generally either discoverable or connected):
- Red and Blue flashing alternately: The BlueSaab is discoverable (i.e. ready for pairing);
- Red only flashing: The BlueSaab is connected to a paired device;
- Blue only flashing: The BlueSaab is connectable to an already paired device;
- Red and Blue flash together 3 times: The RN52 is in DFU mode (i.e. ready for firmware update);
- CAN1 (Red): lit when the highest priority receive buffer on the MCP2515 is full; it will appear to glow faintly as the MCP2515 receives and filters the many messages on the I-Bus not intended for the BlueSaab;
- CAN2 (Red): lit when the lowest priority receive buffer on the MCP2515 is full; most of the time, this LED will not light up;
- POWER (Red): should show a steady glow whenever the BlueSaab is connected via the 12 pin connector, or for programming via the FTDI header, ISP1 header or the UPLOAD or RN52_FIRMWARE USB sockets. This indicates that the 3.3V regulator is supplying power.
Added in v4.1 (Will only light when the UPLOAD USB or FTDI header interface is connected to a PC):
- RXLED (Green): flashes when data is received by the RX line of the ATMEGA328.
- TXLED (Red): flashes when data is sent from TX line of the ATMEGA328.