CAN bus Teensy-Teensy communication without transceiver

Status
Not open for further replies.

tni

Well-known member
Most people seem to think that a CAN bus transceiver is required to use the CAN interface. That's not really the case. While you can't connect the pins directly, using a diode on each Teensy and a pull-up resistor to 3.3V for the bus is sufficient. (You can't have any devices with real CAN bus transceivers on the same bus.)

This is described in Siemens ApNote AP2921.

It works quite well - I have used a 4 meter long bus running at 1MHz with no issues (diodes are signal diodes with 0.6V voltage drop, pull-up is 2.2kOhm). The CAN interface has automagic CRC hardware error detection and re-transmission for corrupted packets.

For people scared by the horrible CAN bus section in the Kinetis manuals, the CAN libraries are actually very easy to use.

can1.jpg

can2.jpg
 
I've wondered about that - Nice Post! 4 meters at 1 Mbit. That would be a general solution to a few recent things - the granite cutter over a long table ( though would take a remote Teensy ) and those using EasyTransfer for reliable transfers

Does it work with this for bi-directional transfers? :: Another-fork-of-FlexCAN
 
Does it work with this for bi-directional transfers? :: Another-fork-of-FlexCAN
Yes, it works just like a 'normal' CAN bus (except for distance / noise immunity).

I haven't actually tried more than 4m, so I don't know what the practical limit is. The CAN module has error counters - I don't have transmission errors (unless I inject noise on purpose).

A huge advantage of CAN is that bus glitches are automatically handled by the hardware, corrupted messages are automatically re-transmitted. With SPI / I2C / UART, extra error detection and handling is required.
 
Not active as shown of course - but grounds aren't shown as connected between devices?

What is a good diode part# for that? It will be half duplex with a shared wire (of course broadcast from master wouldn't care) - but working over distance with robust error and hardware support would be a big win.
 
Not active as shown of course - but grounds aren't shown as connected between devices?
You need a common ground. USB power is actually enough for me, even from different host devices (if they are grounded to mains / earth).

What is a good diode part# for that?
Probably pretty much any signal diode will do (just don't use something slow, high capacitance). If I had to guess, my diodes are ancient 1N4148.
 
Thanks - looks like I got some of those for some reason: sparkfun.com Diode Small Signal.

As noted it seemed like a good bus to abuse, not trying it without the transceivers - my cars are pre-CAN so no value there. In 1989 worked a couple years for a German company that did BitBus - but they held the engineering details close so I missed a good opportunity to work with it at their US sales/marketing branch.
 
I like Schottky diodes for their very low forward drop. You can get some with 30 mV drop (for switching power supplies) but typically you'll get 200-300 mV drop.

LSM115 is a farily well-rated part (220 mV drop.) A parametric search on Digi-Key will let you choose whatever trade-off you want.
 
I have tried without success to “test” two Teensy 3.6 connected by 3.3 VDC transceivers, using copies of code example included with the FlexCAN library. Can you provide the code you used to demonstrate directly connecting two Teensy without a transceiver? A reference to a compatible version of the FlexCan files (whether the latest version or) would also be ever so helpful.

Thank you,
Dave K
 
Status
Not open for further replies.
Back
Top