Electronic – arduino – Single wire CAN // Saab 9-3 I-Bus // GMLAN

arduinoautomotivecantransceiver

I'm trying to control an instrument cluster from a 2008 Saab 9-3. It has 2 pins marked for I-Bus (both wires are green, continuity test shows they are tied together as shown here:
BUS

Some sites also call this instrument bus the GMLAN.
I had no information on how does this bus works except "the data transfer rate of the I-bus is 33 kbits/s" and:
enter image description here

So I have disassembled the unit and looking for some IC markings, I have found a AU5790D which is a single wire CAN transciever. There is a site with various CAN IDs and messages for a 2001 Saab 9-3. (They have changed the bus, but hopefully they have kept the codes.) Reverse-Engineering the Saab 9-3 Instrumentation Bus (I-BUS)

After some research on the one wire buses, it has turned out that my Seeedstudios Can Shield is useless here. I have ordered the same chip, so I can emulate a 2 node network.
My questions are:

  • Is it possible to use the transciever without any specific CAN
    controller? (Directly wired to an Arduino)
  • (If it is not) What type of
    CAN controller do I have to use between the MCU and the transciever?

Best Answer

Most small microcontrollers (like those used on the Arduino) won't be fast enough to implement CAN in software. That's why the CAN Shield uses the MCP2515 CAN controller IC.

I recommend one of two options:

  1. Connect an MCP2515 chip to your Arduino, and use the AU5790 CAN transceiver. Either do this on a breadboard or design a PCB.

  2. Use the Arduino CAN shield, but solder some jumper wires from the TXD, RXD, and GND lines over to another board with an AU5790 on it.

  3. Download the schematic and PCB designs for the Arduino CAN shield, and adjust the design to accept the AU5790 instead of the MCP2551.

Unfortunately, the AU5790 doesn't seem to be pin-compatible with the MCP2551. It nearly is, which is a shame.