RS-485 Polarity: Difference between revisions

From BACnet Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
 
(38 intermediate revisions by the same user not shown)
Line 1: Line 1:
RS-485 comprises two signals, one that 'tracks' the logic levels (high voltage == 1, low voltage == 0). The other signal does the opposite. The meaning of these two signals has been polluted by chip and box vendors, which leads to a lot of confusion. A lot of further confusion arises when one considers the UART logic levels vs signal levels and labels. This article attempts to resolve the status without adding to the confusion
RS-485 comprises two signals, one that 'tracks' the UART logic levels (high voltage == 1, low voltage == 0). The other signal does the opposite. The meaning of these two signals has been polluted by chip and box vendors, which leads to a lot of confusion. A lot of further confusion arises when one considers the UART logic levels vs signal levels and labels. This article attempts to resolve the status, hopefully without adding to the confusion.


Our terminology:


{| class="wikitable"
 
'''Identifying 'A' and 'B' signals'''
 
Remember that UARTs output a logic '1' (high voltage) for idle state! This signal will go to 0v for the start bit.
 
The A signal is the wire that, when in the idle state, is at a slightly higher voltage than the 'B' signal. This difference in voltage measurements is the result of the biasing and termination resistors of the circuit. See [https://en.wikipedia.org/wiki/RS-485#/media/File:Rs485-bias-termination.svg Wikipedia]
 
 
'''Identifying 'Mark/Idle' and 'Space' '''
 
Look at the data bits. The idle condition is always the 'mark' condition. The start bit is always a 'space'. Drawings on the internet are in conflict with each other and cannot be relied upon.
 
 
{| class="wikitable" style="text-align: center;"
|+ Nominal Terminology
|+ Nominal Terminology
|-
|-
! Our Terminology !! Description !! Logic levels !! Data (UART) Representation
! Our Terminology !! Description !! Terminonlogy !! Data (UART) Representation !! When Idle
|-
|-
| T+ || Tracking || High voltage (typically +5 or +3.3) || 1
| A || Tracking UART value || Non-Inverting || A is high when UART emitting 1, A is low when UART emitting 0 || High
|-
|-
| T-|| Non-tracking || Low voltage (close to 0v) || 0
| B || Non-tracking || Inverting || B is low when UART emitting 1, B is high when UART emitting 0 || Low
|}
|}




Labeling found in the field


{| class="wikitable"
{| class="wikitable" style="text-align: center;" 
|+ Manufacturer's Labeling
|+ Manufacturer's Labeling
|-
|-
! Comment !! Tracking !! Non-tracking !! Class !! Manufacturer examples
! Non-inverting !! Inverting !! Class !! Manufacturer examples
|-
| A || B || Nominal || BITS, FieldServer
|-
|  + || - || Symbol || BACnet Specification
|-
|  RT+ || RT- || || EnOcean SmartServer IoT
|-
|  + || - || Symbol || FT-Click, BASRouter LX, Onicon F-4300
|-
|  B+ || A- || || MBS UBR-01 Mk II
|-
|-
| Our terminology || T+ || T- || Nominal || BITS
| 485+ || 485- || Symbol || FieldServer
|-
|-
| || + || - || Symbol || FT-Click, BASRouterLX
| U+ || U- || || [https://en.wikipedia.org/wiki/RS-485#Waveform_example Wikipedia]
|-
|-
|  || B+ || A- || || MBS UBR-01 MkII
| B || A || || [https://en.wikipedia.org/wiki/RS-485#Signals Wikipedia. See, what a fiasco]
|-
|-
| || U+ || U- || || [https://en.wikipedia.org/wiki/RS-485 Wikipedia]
| A+ || B- || || [https://www.waveshare.com/product/iot-communication/wired-comm-converter/usb-to-rs485.htm Waveshare USB to RS-485]
|-
|-
| TI convention|| A || B || || [https://e2e.ti.com/cfs-file/__key/telligent-evolution-components-attachments/13-143-00-00-00-26-49-60/RS485-_2D00_-Polarity-Conventions.pdfs TI Polarity Conventions]
| A || B || || [https://e2e.ti.com/cfs-file/__key/telligent-evolution-components-attachments/13-143-00-00-00-26-49-60/RS485-_2D00_-Polarity-Conventions.pdf TI Polarity Conventions]
|}
|}


Line 35: Line 56:
TI has a very definitive [https://e2e.ti.com/cfs-file/__key/telligent-evolution-components-attachments/13-143-00-00-00-26-49-60/RS485-_2D00_-Polarity-Conventions.pdf document], but one that has to be read carefully in terms of terminology. Read this document with the following table in mind. Note, according to TI (and our opinion), the [https://en.wikipedia.org/wiki/RS-485 Wikipedia article] on bus states is WRONG ! :
TI has a very definitive [https://e2e.ti.com/cfs-file/__key/telligent-evolution-components-attachments/13-143-00-00-00-26-49-60/RS485-_2D00_-Polarity-Conventions.pdf document], but one that has to be read carefully in terms of terminology. Read this document with the following table in mind. Note, according to TI (and our opinion), the [https://en.wikipedia.org/wiki/RS-485 Wikipedia article] on bus states is WRONG ! :


{| class="wikitable"
{| class="wikitable" style="text-align: center;"
|+ RS-485 Bus State Terminology
|+ RS-485 Bus State Terminology
|-
|-
! UART bit !! Logic level !! A-B (T+ - T-) result !! Legacy !! RS-485 state !! RS-485 A volt !! RS-485 B volt
! UART input/output !! Logic level !! A vs B !! Legacy !! RS-485 Bus State !! RS-485 Bus Logic State !! RS-485 A volt !! RS-485 B volt
|-
|-
| 1 || high|| A > B|| Mark/Idle || On (0) || high || low
| 1 || high|| A > B|| Mark/Idle || On || 0 || high || low
|-
|-
| 0 || low || A < B || Space || Off (1) || low || high
| 0 || low || A < B || Space || Off || 1 || low || high
|}
|}

Latest revision as of 08:01, 10 November 2023

RS-485 comprises two signals, one that 'tracks' the UART logic levels (high voltage == 1, low voltage == 0). The other signal does the opposite. The meaning of these two signals has been polluted by chip and box vendors, which leads to a lot of confusion. A lot of further confusion arises when one considers the UART logic levels vs signal levels and labels. This article attempts to resolve the status, hopefully without adding to the confusion.


Identifying 'A' and 'B' signals

Remember that UARTs output a logic '1' (high voltage) for idle state! This signal will go to 0v for the start bit.

The A signal is the wire that, when in the idle state, is at a slightly higher voltage than the 'B' signal. This difference in voltage measurements is the result of the biasing and termination resistors of the circuit. See Wikipedia


Identifying 'Mark/Idle' and 'Space'

Look at the data bits. The idle condition is always the 'mark' condition. The start bit is always a 'space'. Drawings on the internet are in conflict with each other and cannot be relied upon.


Nominal Terminology
Our Terminology Description Terminonlogy Data (UART) Representation When Idle
A Tracking UART value Non-Inverting A is high when UART emitting 1, A is low when UART emitting 0 High
B Non-tracking Inverting B is low when UART emitting 1, B is high when UART emitting 0 Low


Manufacturer's Labeling
Non-inverting Inverting Class Manufacturer examples
A B Nominal BITS, FieldServer
+ - Symbol BACnet Specification
RT+ RT- EnOcean SmartServer IoT
+ - Symbol FT-Click, BASRouter LX, Onicon F-4300
B+ A- MBS UBR-01 Mk II
485+ 485- Symbol FieldServer
U+ U- Wikipedia
B A Wikipedia. See, what a fiasco
A+ B- Waveshare USB to RS-485
A B TI Polarity Conventions


TI has a very definitive document, but one that has to be read carefully in terms of terminology. Read this document with the following table in mind. Note, according to TI (and our opinion), the Wikipedia article on bus states is WRONG ! :

RS-485 Bus State Terminology
UART input/output Logic level A vs B Legacy RS-485 Bus State RS-485 Bus Logic State RS-485 A volt RS-485 B volt
1 high A > B Mark/Idle On 0 high low
0 low A < B Space Off 1 low high