From: Grant Edwards <grante@visi.com>
To: ecos-discuss@sources.redhat.com
Subject: [ECOS] Re: Half Duplex RS485
Date: Wed, 23 Jan 2008 16:34:00 -0000 [thread overview]
Message-ID: <fn7q8f$brn$1@ger.gmane.org> (raw)
In-Reply-To: <OBEELMDOHGDFDEMJCJCJOEKCMIAA.laurie.gellatly@netic.com>
On 2008-01-22, Laurie Gellatly <laurie.gellatly@netic.com> wrote:
> My project has RS485 half duplex driven by UART0 of an
> LPC2112. At present I've modified pc_serial_start_xmit and
> pc_serial_stop_xmit to change a pin state so that the same
> wires can be used for transmit and receive.
>
> This does not see to work when the FIFO is enabled.
Then you probably did it wrong. :)
I imagine that RTS is shutting off too soon. The problem is
that pc_serial_stop_xmit() is called when the driver has no
more data to send _to_ the UART. That's not when you need to
shut off RTS. You need to shut off RTS when the UART is done
sending data and both the FIFO and shift register are empty.
You're probably shutting off RTS while the UART still has data
in the tx FIFO and the tx shift register.
> Has anyone else done RS485 half duplex?
Many, many times.
> Did you modify these routines or write your own?
I usually pick a UART that supports half-duplex operation, and
then just enabled that feature in the UART. [I use a custom
eCos serial driver that supports quite a few more advanced UART
features than the standard driver (e.g. flow control,
half-duplex, inter-byte timeouts, 9-bit modes, FIFO control,
etc.).
If you don't have a proper UART, you need to enable the tx
shift register empty interrupt and use that to trigger code
that de-asserts RTS. If you're using a broken UART that
doesn't have a tx shift register empty interrupt, then you'll
have to poll for the tx shift register empty status. If you're
using a really broken UART that doesn't have a _working_
shift-register empty status[1], then you may have to start a
timer that will wake you up at the point in time where RTS
needs to be changed.
> Did you get the FIFO to work?
When there was one, yes.
[1] There are broken UARTs (including a few PC chipsets) whose
shift-register empty bit gets set _before_ the stop bit has
been sent. In that case, you may need to use some sort of
time-delay to wait until after the stop bit has been sent
to toggle RTS. On a properly implimented RS-485 bus, there
should be pull-up and pull-down resisters so that the bus
idles in the mark state (same value as a stop bit), but to
be on the safe side you should leave the bus driver on
until after the stop bit has been sent.
--
Grant Edwards grante Yow! I'm also against
at BODY-SURFING!!
visi.com
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss
next prev parent reply other threads:[~2008-01-23 16:34 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-21 22:04 [ECOS] routing sockets / far end address resolution Daniel Paape
2008-01-22 9:19 ` [ECOS] Half Duplex RS485 Laurie Gellatly
[not found] ` <001001c85dd0$c8083160$6501a8c0@global.ds.honeywell.com>
2008-01-23 15:01 ` Wang Cui
2008-01-23 16:34 ` Grant Edwards [this message]
2008-01-23 21:12 ` [ECOS] " Laurie Gellatly
2008-01-23 22:03 ` Grant Edwards
2008-01-23 23:06 ` Laurie Gellatly
2008-01-23 23:44 ` Grant Edwards
2008-01-24 9:02 ` Daniel Néri
2008-01-25 1:33 ` wangcui
2008-01-25 2:00 ` Laurie Gellatly
2008-01-25 4:16 wangcui
2008-01-26 20:41 ` Laurie Gellatly
2008-01-28 10:34 ` wangcui
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='fn7q8f$brn$1@ger.gmane.org' \
--to=grante@visi.com \
--cc=ecos-discuss@sources.redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).