6
\$\begingroup\$

I'm just looking for a historical answer as to why TTL and RS232 don't transition logically in the same directions. The signals are the same, but basically level-shifted and inverted.

Was there a technological reason behind this, was it a mistake, or was there hardware that inverted that was cheap and easy to come by to drive the outputs for RS232 communication?

Thank you for helping to satisfy a curious question.

\$\endgroup\$

2 Answers 2

13
\$\begingroup\$

This is partly speculation, but here goes:

Originally, asynchronous serial interfaces were current loops. In order to make things like detecting wiring faults easier, the "idle" state was defined as current flowing, and the "start" bit was a brief interruption of the current.

The first devices were strictly electromechanical, but as soon as digital electronics became common enough, there was a desire to use the teletypes for I/O. It would make sense, then, that the logic that drives the current loop would be "on", or high for the same condition, because that would be the obvious way to drive, say, an NPN transistor.

Now, switch to voltage signaling. The telephone line sits at a negative voltage with respect to ground, because it was discovered early on that this reduced electrolytic corrosion in the wires caused by moisture.

So, for the same reason, the "idle" state in RS-232 was defined to be the negative voltage, because that is the state that the line is in most of the time.

Therefore, the translation between logic and RS-232 needed to be inverting.

\$\endgroup\$
3
  • 3
    \$\begingroup\$ Darn good "speculation". \$\endgroup\$
    – user105652
    Jul 17, 2020 at 2:03
  • \$\begingroup\$ Ditto. Sounds like solid reasoning \$\endgroup\$ Jul 17, 2020 at 4:17
  • 3
    \$\begingroup\$ Careful - just because something sounds true doesn't mean it is. That's how we got to the "post-truth era" \$\endgroup\$ Jul 17, 2020 at 17:17
2
\$\begingroup\$

It could come from the preceeding current loop interfaces, where the current does not flow in the active logic 0 state and flows in the idle logic 1 state.

If there is a wire disconnection or unpowered transmitter, the current flow stops so this is seen as too long logic 0 state by the receiver. Most UARTs can detect this and signal this break condition to software layers.

Note that while MIDI is also a current loop interface, it works the opposite way, current flows in the active logic 0 state. I wasn't thinking beyond MIDi in my original answer, so it didn't reflect the original current loop interfaces.

\$\endgroup\$
1
  • \$\begingroup\$ @DaveTweed Thanks, it was an obvious logic error and indeed logic 1 idle is when current flows to detect line break. I mixed up it with how MIDI current loop works as they are more familiar to me. \$\endgroup\$
    – Justme
    Jul 17, 2020 at 7:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.