I made my own version of the Canalyze Linux CAN interface. I plan on using it to study the CAN traffic on a Buick Regal. Since this is a GM vehicle, part of the traffic is on a GMLAN or SW-CAN network.

The Canalyze circuit doesn't directly physically support SW-CAN, so I cut the OBD-II - DB9 cable and plugged the wires straight into the appropriate pins on the car's OBD port, and it worked just fine. I can both send and receive messages, and the MCP2551 does work with GMLAN.

I plan on changing the circuit by adding another two or three MCP2551s so that I can connect to multiple networks simultaneously. Multiple sources indicate that I should use a dedicated SW-CAN transceiver such as the TH8056, but they do not mention why. Thus, my question: are there any disadvantages to using the MCP2551 for interfacing to SW-CAN?

I would prefer not having to mix different chips and I don't see why I would since MCP2551 seems to work with both SW-CAN and high speed CAN.

  • \$\begingroup\$ What specs might indicate the MCP2551 is or is not acceptable? If I recall, there are older versions (from mid-2000s) and later versions. Be careful about what version you evaluate. \$\endgroup\$ Dec 20 '18 at 4:54
  • \$\begingroup\$ The exact chip I use is an MCP2551 I/SN 1118 from Mouser: uk.mouser.com/ProductDetail/579-MCP2551-I-SN. As to the specs, I'm not sure how they should affect my choice and that's part of the reason I'm asking. \$\endgroup\$ Dec 20 '18 at 8:35
  • \$\begingroup\$ I suppose it might be nice to have it galvanically isolated, especially if you aim for a commercial product and not just some hobbyist stuff. Apart from that, MCP2551 is quite rugged and hard to break. You can of course make MCP2551 opto-isolated with external opto-couplers too, rather than a one-chip isolated transceiver. \$\endgroup\$
    – Lundin
    Dec 21 '18 at 10:19
  • \$\begingroup\$ It's more of a hobby project but it's still nice to have it isolated which is something I'll do if I end up installing the board permanently in the vehicle. \$\endgroup\$ Dec 30 '18 at 20:21

The problem is, while the shape of the waves is the same, the voltages used to transmit the signal are different. The MCP2551 is a high-speed CAN transceiver. It uses a differential signal whose recessive state is 0 V and dominant state is 2 V. Single-wire CAN is a one-wire signal whose recessive state is 0 V and dominant state is 4 V.

I'm guessing that by "the appropriate wires" you mean you used the CAN-high wire to drive the SW-CAN bus. This wire has a recessive state of 2.5 V and a dominant state of 3.5 V.

What's probably happening is that these values happen to be within the tolerance of the other nodes on the bus, but you can't guarantee that. Using the MCP2551 might happen to work in this application, but it is not a robust solution for a tool to be used across multiple applications.

Side Note: The MCP2551 is not recommended for new designs; the 2561 should be selected instead.

  • \$\begingroup\$ Thanks for info. So basically it's all down to the voltage levels. By appropriate wires I meant that I connected the CAN low wire to the signal ground and the CAN high wire to the SW-CAN pin. Sorry for the late reply, blame the holidays :). \$\endgroup\$ Dec 30 '18 at 20:19

If you do decide to go with the MCP2551, there is a newer version available and can work as a drop in replacement for the 2551 - the MCP2562. I ended up using the 2562 in my last project and the IC runs cooler than the 2551 (not that it was overheating) and I also had much less bus faults.

I also found it worked better in the breadboard phase of my design.

I was using a Atmega2560 and MCP2515 CAN Controller setup, not a PIC, and I also ran the 2562 with STM32, but that was not for any projects. It did the job very well though.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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