Using RS232/UART on Grisp2 Board

Hey Folks,

I am attempting to use the UART port on the Grisp2 board as a RS232 port for connecting to an external network switch. I have connected the PmodRS232 to, Pmod board facing upwards, and connected to the bottom row of the Pmod connector (which I THINK is the correct pinout). I have the JP1 on the board removed to disable flow control e.t.c

However when using circuits.UART I am unable to read anything from the port, which I believe should be “ttymxc3”, I have even just looped the TX back into the RX on the RS232 connector and directly on the UART header and still have nothing coming back on the port.

There’s a very strong possibility that I’ve misunderstood the port mapping on this though, and I can see a reference to /dev/ttyS3 in the linux/imx6ul-grisp2.dts‎ file, that might imply that I need to configure that port to be UART rather than GPIO, but I’m not really sure how to go about that?

Any help/guidance greatly appreciated!

Thanks

The UART on GRiSP2 is a UART 3A Pmod (the double row)

Description here https://digilent.com/reference/_media/reference/pmod/pmod-interface-specification-1_2_0.pdf

The signals corresponding to the single row UART Pmod are pin 1-6 which is actually the upper row. You can see pin 1 marked on the PCB

2 Likes

Thanks for the pointer, can’t believe I didn’t notice that 1 on the board, apologies!

However, this still doesn’t seem to be working, have looped together pins 2/3 (top row, second and third from the right as you look at the PMOD), and I am still not getting anything back on the port when I send on either ttymcx0 or ttymcx3

iex(livebook@nerves-1157.local)1> {:ok, pid} = Circuits.UART.start_link

{:ok, #PID<0.3555.0>}

iex(livebook@nerves-1157.local)2> Circuits.UART.open(pid, "ttymxc3", speed: 9600, active: true)

:ok

iex(livebook@nerves-1157.local)3> flush

:ok

iex(livebook@nerves-1157.local)4> Circuits.UART.write(pid, "Hello there\r\n")

:ok

iex(livebook@nerves-1157.local)5> flush

:ok

iex(livebook@nerves-1157.local)15> Circuits.UART.open(pid, "ttymxc0", speed: 9600, active: true)

:ok

iex(livebook@nerves-1157.local)16> flush

:ok

iex(livebook@nerves-1157.local)17> Circuits.UART.write(pid, "Hello there\r\n")

:ok

iex(livebook@nerves-1157.local)18> flush

:ok

iex(livebook@nerves-1157.local)19>

I was able to reproduce the issue. It turns out that Linux didn’t know to configure the pins going to the UART PMOD connector to UART mode. I fixed that in nerves_system_grisp2 v0.7.1. If you update that dependency, I believe it should work.

4 Likes