Reading inverted RS-232 data
-
Just some notes in case anyone has to read data from a serial RS-232 device that caused me some headache:
Serial UART and serial RS-232 data differ in voltage swing and polarity.
A Gpy expects to see 5 V as a logical "1" and 0 V as a logical "0".
But RS-232 defines about -15 V as a logical "1" and +15 V as logical "0" - what is completely invers.
Given You only want to read from an RS-232 device, one can use a simple solution of a diode (rectifier) and two resistors (voltage divider) to attach the TX wire of the serial device to the RX1 pin of a Gpy.
But there is still the problem of the inverted data bits polarity. There really should be a simple python solution like
uart.init(9600, bits=8, parity=None, stop=1, invert=UART.INV_RX | UART.INV_TX)as suggested by other authors.
Meanwhile, however, we can achieve the same goal by setting the required UART bits ourselves:
UART_CONF0_REG = machine.mem32[0x3FF50020] | (1<<22) | (1<<19) machine.mem32[0x3FF50020] = UART_CONF0_REGwill do the trick and voila! the RS-232 data is received correctly.
(By the way: 0xFF40020 is the serial console, 0xFF50020 is TX1/RX1 and 0xFF6E020 is tied to the LTE modem.)
-
@Elizar That#s a good hint. There is also a PR #362 outstanding since Nov. 2019 for UART inverted mode, which supports that in a more API consistent fashion. And that PR is compatible to the mainstream MicroPython.
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login