Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.arch.embedded > #30359

Re: Linux embedded and direction control of RS485 transceiver

From Don Y <blockedofcourse@foo.invalid>
Newsgroups comp.arch.embedded
Subject Re: Linux embedded and direction control of RS485 transceiver
Date 2021-03-24 06:17 -0700
Organization A noiseless patient Spider
Message-ID <s3fe6a$khm$1@dont-email.me> (permalink)
References <s3ds9e$k43$1@dont-email.me> <nhil5ghnm0pad0g363h7ofopulnu9aaam7@4ax.com>

Show all headers | View raw


On 3/23/2021 10:28 PM, upsidedown@downunder.com wrote:
> On Wed, 24 Mar 2021 00:06:21 +0100, pozz <pozzugno@gmail.com> wrote:
> 
>> I have an half-duplex RS485 bus with 10-20 different nodes. Some of them
>> are 8-bit MCU based, one of them could be Linux embedded.
>>
>> It's half-duplex, so it's important for the transmitter node to disable
>> the driver as soon as the last transmitted bit is shifted out.
>>
>> Many small low-cost MCU has interrupt on transmission complete, so the
>> delay of disabling the driver is usually on the order of microseconds.
> 
> Look very carefully _when_ the interrupt occurs. Some UARTs generate
> an interrupt when the last character is moved from the FIFO into the
> shift register, some (also) generate an interrupt, when actually the
> (last) stop bit has completely shifted out from the shift register.
> 
> If you turn off the Tx based of the FIFO to shift register interrupt,
> the Tx can be turned off, while the last character is actually being
> transmitted and the 'fail safe' termination will pull the line to "1"
> i.e. idle. The receiver often gets the last character as FF, FE,.. ,
> F0 etc. especially at low line speeds.

As you likely have the line connected to the Rx input (to *receive*
replies), you can use the Rx IRQ to tell you when the character has
cleared the Tx shift register (and made it out onto the wire).

But, you also have to check the timing of that IRQ wrt the actual serial
data in.  Sometimes, the stop bits aren't checked.

However, anomalies/faults on the line can prevent the Rx interrupt
from coinciding with the end of the Tx (e.g., if a voltage is effectively
impressed on the line).  The loopback will allow your code to detect that
transmissions are not happening as expected.  But, it will confuse the
timing of the disabling of the transceiver.

A better solution is to route the Tx *pin* on the device to a spare
Rx pin (another UART) and use that for timing information as it
is entirely local to the board -- not impacted by faults on the
wire.

>> Some new Cortex-M MCUs have an automatic control of external RS485
>> transceiver, so the delay is really zero.
> 
> This is the proper way of doing low latency half duplex. Otherwise,
> you have to add some extra delay, before the slave starts the
> response.

That's often desirable to let the line "settle" (assuming the software
is incredibly responsive and the slave receiver was fortunate in how it
synchronized to the incoming datum).  In the real world, folks don't
always wire things the way they should (e.g., using crappy cable for
longer than intended runs -- "Wire is wire, right?"  :< )

Back to comp.arch.embedded | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Linux embedded and direction control of RS485 transceiver pozz <pozzugno@gmail.com> - 2021-03-24 00:06 +0100
  Re: Linux embedded and direction control of RS485 transceiver upsidedown@downunder.com - 2021-03-24 07:28 +0200
    Re: Linux embedded and direction control of RS485 transceiver Don Y <blockedofcourse@foo.invalid> - 2021-03-24 06:17 -0700
      Re: Linux embedded and direction control of RS485 transceiver upsidedown@downunder.com - 2021-03-24 17:49 +0200
        Re: Linux embedded and direction control of RS485 transceiver Tauno Voipio <tauno.voipio@notused.fi.invalid> - 2021-03-24 18:32 +0200
          Re: Linux embedded and direction control of RS485 transceiver upsidedown@downunder.com - 2021-03-24 19:22 +0200
            Re: Linux embedded and direction control of RS485 transceiver David Brown <david.brown@hesbynett.no> - 2021-03-24 19:44 +0100
              Re: Linux embedded and direction control of RS485 transceiver upsidedown@downunder.com - 2021-03-25 07:34 +0200
              Re: Linux embedded and direction control of RS485 transceiver upsidedown@downunder.com - 2021-03-25 07:47 +0200
            Re: Linux embedded and direction control of RS485 transceiver Tauno Voipio <tauno.voipio@notused.fi.invalid> - 2021-03-24 21:13 +0200
              Re: Linux embedded and direction control of RS485 transceiver upsidedown@downunder.com - 2021-03-25 07:39 +0200
              Re: Linux embedded and direction control of RS485 transceiver David Brown <david.brown@hesbynett.no> - 2021-03-25 10:48 +0100
                Re: Linux embedded and direction control of RS485 transceiver Tauno Voipio <tauno.voipio@notused.fi.invalid> - 2021-03-25 16:33 +0200
                Re: Linux embedded and direction control of RS485 transceiver Grant Edwards <invalid@invalid.invalid> - 2021-03-25 14:49 +0000
                Re: Linux embedded and direction control of RS485 transceiver upsidedown@downunder.com - 2021-03-25 18:43 +0200
                Re: Linux embedded and direction control of RS485 transceiver David Brown <david.brown@hesbynett.no> - 2021-03-26 09:47 +0100
        Re: Linux embedded and direction control of RS485 transceiver Don Y <blockedofcourse@foo.invalid> - 2021-03-24 14:30 -0700
  Re: Linux embedded and direction control of RS485 transceiver dalai lamah <antonio12358@hotmail.com> - 2021-03-24 11:48 +0100
    Re: Linux embedded and direction control of RS485 transceiver pozz <pozzugno@gmail.com> - 2021-03-25 00:23 +0100
  Re: Linux embedded and direction control of RS485 transceiver "A.P.Richelieu" <aprichelieu@gmail.com> - 2021-05-09 13:24 +0200
    Re: Linux embedded and direction control of RS485 transceiver Uwe Bonnes <bon@hertz.ikp.physik.tu-darmstadt.de> - 2021-05-09 12:01 +0000
    Re: Linux embedded and direction control of RS485 transceiver pozz <pozzugno@gmail.com> - 2021-05-10 09:46 +0200

csiph-web