2
\$\begingroup\$

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?
\$\endgroup\$

1 Answer 1

1
\$\begingroup\$

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.

\$\endgroup\$
4
  • \$\begingroup\$ Thank you. I have ordered an MCP2515 as well (+ the extra components required for this circuit) Hopefully, they have not changed the IDs and messages. If the AU5790 arrives first I will try the jumper wire method as well. \$\endgroup\$
    – Zoszko
    Commented Nov 25, 2014 at 9:26
  • \$\begingroup\$ Well building the circuit was easy but it's not working. Everything is done according to the Seeedstudios schematic but the arduino says "CAN init failed" it cannot initialize the MCP2515, I have tried 2 of them non of them seems to work. So this project stucked. Any suggestions? \$\endgroup\$
    – Zoszko
    Commented Jan 17, 2015 at 13:24
  • \$\begingroup\$ You can use a two-wire transceiver to decode single-wire CAN. Connect the single-wire GMLAN line to CAN_H of the transceiver. CAN is differential, so you can just let CAN_L on the two-wire transceiver float. I have tested this. You can't, however, handle the high-voltage wake-ups without a proper GMLAN low-speed transceiver, but that shouldn't be a problem. As a receiver you don't need to handle them (just don't go to sleep). If you really needed to send a high-voltage wake-up (you shouldn't), you can just manually short the bus to battery for a moment, and that will wake up the bus. \$\endgroup\$
    – downbeat
    Commented Mar 15, 2017 at 18:19
  • \$\begingroup\$ If you're building something that you want to be able to control the electronics on an on-going basis, you will need a proper GMLAN low-speed transceiver, like the 5790, so that you can handle high-voltage wake-ups. If you're just poking at it, you can probably get away with a two-wire transceiver. \$\endgroup\$
    – downbeat
    Commented Mar 15, 2017 at 18:27

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.