3
\$\begingroup\$

SAE J1708 is basically an RS485 hardware interface without the typical 120 ohm termination resistors. In typical applications, a half-duplex RS485 transceiver chip is used to connect to the bus.

In order to avoid collisions, J1708 protocol rules dictate that the device must monitor the data bus while transmitting the first byte (MID) of its message.

How is this possible using a half-duplex transceiver? In other devices I have worked with, half-duplex implied that receiving during transmission was not possible. Does the Receiver Output pin of the transceiver match the Driver Input during transmission?

\$\endgroup\$
5
\$\begingroup\$

SAE J1708 uses RS-485 transceivers, but connects the serial transmit data to the enable line of the driver rather than to the data line. This means that the driver is effectively switching directions on every bit. This is similar to CANbus, in which one of the bit values is "dominant" and the other is "recessive".

The logic of each node is supposed monitor the recessive bits of the MID byte to determine whether any other node is transmitting a dominant bit at that time. If it detects this condition, the other node has a higher-priority message, and this node should immediately drop out and retry its message later.

\$\endgroup\$
  • 2
    \$\begingroup\$ Ah, connecting the UART transmit to the DE instead of the DI pin is the key. For others reading this: the serial data going to the transceiver should be inverted before doing this. Regarding collisions, I believe that unlike CAN, the 1708 MID value does not convey any priority information; rather, both devices will stop after the current byte, and then attempt to re-transmit after a priority-based delay. \$\endgroup\$ – nicholas Mar 25 '13 at 21:22

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.