9

How many serial ports are on the Pi 3? There is one on the GPIO pin that goes to ttyS0. Is there a separate one for USB? I have read somewhere about /dev/ttyUSB0. Is that a separate serial port?

Can I attach 2 different devices 1 at each ttyS0 and ttyUSB0 and read from them simultanously using python for example.

Place mentioning ttyUSB0: https://learn.adafruit.com/adafruit-ultimate-gps-on-the-raspberry-pi/setting-everything-up

bakalolo
  • 419
  • 1
  • 4
  • 16

2 Answers2

8

The Pi has 2 serial ports, but only 1 is accessible - the other is connected to Bluetooth. (It is possible to switch ports in Device Tree.)

See How do I make serial work on the Raspberry Pi3 , Pi3B+, PiZeroW for more detail.

You can add additional ports with a USB-serial adapter.

Milliways
  • 54,718
  • 26
  • 92
  • 182
  • Conscise answer (+1) but maybe just clarify that USB-serial adaptors are (depending on the driver etc.etc.) the `ttyUSBn` mentioned by the OP in the question? – Roger Jones Apr 19 '19 at 12:41
4

Question

How many serial ports are on the Rpi3

Answer

I have been playing with serial communication this couple of days. I googled and the found the following tutorial useful.

Raspberry Pi Serial (UART) Tutorial - Roland Pelayo 2018jun22 17,305 Views

I extracted what the author says below:

Technically, the Raspberry Pi has two UARTs: PL011 UART and mini UART. However, you only have one pair of TXD and RXD pins to work with.

The PL011 UART is the main UART for models without Bluetooth feature and is tied directly to the Linux console output. This means you can send Linux commands from your PC to the Raspberry Pi on this UART.

On the other hand, the mini UART becomes the Linux console UART for models with Bluetooth like the Raspberry Pi 3 and Raspberry Pi Zero W. For these models, the PL011 UART is tied directly to the Bluetooth module.

Whichever UART is assigned to the Linux console is accessible through /dev/serial0. Each UART can be accessed individually via /dev/ttyS0 for the mini UART and /dev/ttyAMA0 for the PL011 UART.

Generally, the PL011 UART is more reliable than the mini UART because the latter has smaller FIFOs, lacks flow control and has its baud rate reliant on the VPU clock speed.

My experiment results

I followed Roland Pelayo's instructions and have been doing experiments and found everything works as he suggests.

I used to use four TXS0104 logical level converters to demux one UART channel into 4. I select one one of the four channels by enabling TXS0104 converter I want. It works smoothly, except you can not use more than one UART channel at the same time.

I also tried the USB to TTL adapters for Rpi3B+ Raspbian version 2019Apr. I found both PL2302 and CH340 adapters can be detected without first installing drivers.

In other words, Raspbian version 2019apr already have Pl2303 and CH340 drivers preinstalled.

I also tried the CP2102 USB to TTL adapters, but many CP2102 modules are sadly not compatible to Win10 and ESP8266-12. I have not tried it on Rpi (see update below).

rpi3b+ usb ttl driver

NXP SC16IS750 I2C/SPI to UART Module Not Recommended for Newbies

SparkFun once sold a NXP I2C/SPI to UART module. I thought it too good to be true to be able to have as many UART channels as I wanted. But then I found the datasheet has some "special features" which are perhaps OK for hackers to deal with, but too hard for newbies to handle. I tried hard for a couple of days before giving up. SparkFun has now discontinued this module for a reason.

The other modules AdaFruit are recommending are TXS/TXB0108 modules. I have been using TSX/TSB0104s for demultiplexing UART/I2C/SPI channels and found them OK, if not too greedy to entertain too many channels at the same time. Actually I found many I2C modules (including MCP23017) when grouped more than two, become unstable and difficult to troubleshoot. Perhaps I have not learnt all the tricks in fiddling the I2C pull up resistors. Anyway, trying just one is OK for newbies.

Another thing is that I tested both TSX and TSB versions and found TSB more reliable. I also noticed that AdaFruit only sells TSB now and no loner TSX. This are the puzzles I never solved.

TSX0104E

Update 2019apr20hkt1628

I checked out more than 20 very old USB to TTL adaptors which have been collecting dust for over 10 years. I bought some of them for WinXP and found they no longer working for Win7. I also bouoght some for Win7, and found them no good for Win10. Just now I tried all these old guys for my Rpi3B+ Raspian 2019Apr to see if I had any luck. Surprisingly I found the following:

Bad = 5 (not sure which driver) Good HL340 = 5 Good PL2302 = 7

testing usb to ttl adapters

test usb to ttl

References

AdaFruit TXB0108 8-channel Bi-directional Logic Level Converter - $8.00

TXB0108 Datasheet - TI

TXS0104E Datasheet - TI

Amazon SC16IS750 I2C/SPI to UART Module

SparkFun SC16IS750 I2C/SPI-to-UART Module

SC16IS750 I2C/SPI to UART Datasheet - NXP

The 6 Best Arduino GPS Modules - Josh Darling 2019jan

tlfong01
  • 4,384
  • 3
  • 9
  • 23