How do I access the UART pins on 40-pin GP bus?
I follow the instruction on the wiki to install ubuntu and updated the kernel on Up Squared
$ uname -a Linux ***** 4.15.0-37-generic #40~upboard03-Ubuntu SMP Wed Dec 12 16:21:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
I use a jumper cable to connect pin 8 and pin 10 and follow the instruction on the UP2 pinout wiki and see that my UART node is ttyS5.
$ ls /sys/bus/pci/devices/0000\:00\:18.?/dw-apb-uart.*/tty/ | grep tty /sys/bus/pci/devices/0000:00:18.0/dw-apb-uart.8/tty/: ttyS4 /sys/bus/pci/devices/0000:00:18.1/dw-apb-uart.9/tty/: ttyS5
then I do a simple read-write. It will just hang at the cat command.
$ echo "hello world" > /dev/ttyS5 $ cat -v < /dev/ttyS5
Am I missing some steps to get the UART pins working?
Here are some additional information on the things I tried:
$ stty -F /dev/ttyS5 -a speed 9600 baud; rows 0; columns 0; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0; -parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc
running linux-serial-test as suggest by another UART post:
$ ./linux-serial-test -s -e -p /dev/ttyS5 -b 9600 Linux serial test app Error setting RS-232 mode: Inappropriate ioctl for device No data received for 2.0s. No data transmitted for 2.0s. No data received for 3.0s. No data transmitted for 3.0s. No data received for 4.0s. No data transmitted for 4.0s. /dev/ttyS5: count for this session: rx=4096, tx=8191, rx err=0 /dev/ttyS5: TIOCGICOUNT: ret=0, rx=4096, tx=4096, frame = 0, overrun = 0, parity = 0, brk = 0, buf_overrun = 0 No data received for 2.0s. No data transmitted for 2.1s. No data received for 3.0s. No data transmitted for 3.1s. No data received for 4.0s. No data transmitted for 4.1s. No data received for 2.0s. No data transmitted for 2.0s. /dev/ttyS5: count for this session: rx=8192, tx=12287, rx err=0 /dev/ttyS5: TIOCGICOUNT: ret=0, rx=8192, tx=9215, frame = 0, overrun = 0, parity = 0, brk = 0, buf_overrun = 0
Comments
-
Hi @mchau ,
You must run the linux-serial-test at 115200
Please try again with the next steps:
To test the UART, connect a jumper between pins:
UART1_TX - UART1_RX
UART1_RTS - UART1_CTS
(see https://up-community.org/wiki/Pinout_UP2)Stress test: sudo ./linux-serial-test -s -e -p /dev/ttyS5 -b 115200
You will see something like:
/dev/ttyS5: count for this session: rx=53248, tx=61439, rx err=0
/dev/ttyS5: TIOCGICOUNT: ret=0, rx=53248, tx=57344, frame = 0, overrun = 0, parity = 0, brk = 0, buf_overrun = 0
/dev/ttyS5: count for this session: rx=114688, tx=122879, rx err=0
/dev/ttyS5: TIOCGICOUNT: ret=0, rx=114688, tx=118784, frame = 0, overrun = 0, parity = 0, brk = 0, buf_overrun = 0
/dev/ttyS5: count for this session: rx=176128, tx=184319, rx err=0
/dev/ttyS5: TIOCGICOUNT: ret=0, rx=176128, tx=180224, frame = 0, overrun = 0, parity = 0, brk = 0, buf_overrun = 0Test flow control: sudo ./linux-serial-test -s -e -p /dev/ttyS5 -c -l 250
You will see somthing like:
No data received for 2.0s. No data transmitted for 2.0s.
No data received for 3.0s. No data transmitted for 3.0s.
No data received for 4.1s. No data transmitted for 4.1s.
No data received for 5.1s. No data transmitted for 5.1s.
No data received for 6.2s. No data transmitted for 6.2s.
/dev/ttyS5: count for this session: rx=0, tx=4095, rx err=0
/dev/ttyS5: TIOCGICOUNT: ret=0, rx=196608, tx=197631, frame = 0, overrun = 0, parity = 0, brk = 0, buf_overrun = 0
No data received for 7.2s. No data transmitted for 7.2s.
No data received for 8.3s. No data transmitted for 8.3s.
No data received for 9.3s. No data transmitted for 9.3s.
No data received for 11.3s. No data transmitted for 11.3s.
No data received for 12.3s. No data transmitted for 12.3s.
/dev/ttyS5: count for this session: rx=0, tx=4095, rx err=0
/dev/ttyS5: TIOCGICOUNT: ret=0, rx=196608, tx=197631, frame = 0, overrun = 0, parity = 0, brk = 0, buf_overrun = 0More info: https://github.com/cbrake/linux-serial-test