Electronic – Can a 485 network work if the DE (driver enable) pin of the transceiver is always on

beaglebone blackrs485

We are using a Beaglebone Black with the Osso Cape (https://github.com/nexlab/Osso) for comunicating with other equipment using a 485 connection and Modbus RTU.

The driver enable (DE) pin of the cape's DS485 chip is tied to the GPIO 2_24, while the RO and DI pins were tied to the UART1 RX and TX respectively.

We haven't write any code to act on the GPIO2_24 at all, other than a cape overlay that sets it as output and pin Mode GPIO.

We were troubleshooting some communication problems when we noticed something strange: Using an oscilloscope, we saw that the driver enable (DE) pin was always high, but somehow the Beaglebone was able to normally send requests and receive correctly responses from the other equipement.

Normally I would expect that the 485 comms only worked with the DE pin HIGH when transmitting and LOW when finished, to avoid driving the bus when other equipment respond.

In other capes we used, this was controlled using UART4 RTS, but I could not explain why it seems to work in this case.

Is there any explanation on why it works with the DE always on?

EDIT: The datasheet (http://www.ti.com/lit/ds/symlink/ds485.pdf) says:

Due to the multipoint nature of the bus, contention between drivers may occur. This will not cause damage to the
drivers since they feature short-circuit protection and also thermal shutdown protection. Thermal shutdown
senses die temperature and puts the driver outputs into TRI-STATE if a fault condition occurs that causes
excessive power dissipation which can elevate the junction temperature to +150°C.

Maybe the chip senses contention and goes to high-impedance state, then being able to receive the response from the other equipment?

Best Answer

It is quite possible that the state with the driver always on would allow communications to work in both directions due to the overall current limit and effective output impedance of the driver.

You do want to correct this however because the driver in this condition will be under unnecessary stress and drawing way more current from your power sources than necessary. A stressed driver chip may very well have a shortened life. The correction of course is to devise the programming necessary to drive the GPIO to turn off the driver once transmission is complete.

Turning off the driver at the correct time can, in some cases, require some careful work. Due to the fact that the sending UART port will spend time sending the last loaded data bytes after the final data is loaded there is a need to comprehend when sending is complete. Some considerations...

  1. Some UARTs are capable of generating an interrupt when the actual serial data pipe plus any FIFO buffered data has been sent. This can be leveraged as the time to turn off the UART.
  2. If there is no actual UART EMPTY indicator then you may need to use a time delay in the software to get to the time when to turn off the driver. This could be a timer interrupt delay or an inline software delay.
  3. In practical applications of RS485 interfaces it is often the best practice to assign one device as the master initiator of transaction packets on the interface. All other devices are then slave responder devices. It is a good idea for a slave responder device to delay a bit from receiving a transaction packet till sending the start of its response packet. This delay allows time for the master initiator to get off the bus before the slave tries to send. Likewise the master should delay between receipt of a response packet and start of sending the next initiator packet to allow the slave device to get back off the bus.