A UART is available in the Broadcom SoC, and its RxD and TxD lines are available on the [[RPi_Low-level_peripherals|GPIO header]]. However, these use 0 and 3.3V logic levels, not the +/-12V used by [http://en.wikipedia.org/wiki/RS-232 RS-232] serial ports. If you wish to connect one of these, you need a board or adapter to convert the signal levels. See [http://codeandlife.com/2012/07/01/raspberry-pi-serial-console-with-max3232cpe/ this tutorial] for one example on how to build a 3.3V to RS-232 level converter with a breadboard, a MAX3232CPE IC and five 0.1 uF capacitors.

+

The Raspberry Pi serial port consists of two signals (a 'transmit' signal, TxD and a 'receive' signal RxD) made available on the [[RPi_Low-level_peripherals|GPIO header]]. To connect to another serial device, you connect the 'transmit' of one to the 'receive' of the other, and vice versa. You will also need to connect the Ground pins of the two devices together.

−

If your PC has a USB port, it is possible to connect a USB-to-serial cable which uses 3.3V logic levels (e.g. the [http://www.adafruit.com/products/954 Adafruit 954] or the [http://www.ftdichip.com/Products/Cables/RPi.htm FTDI TTL-232R-RPI] cables) directly to the GPIO pins.

+

The Broadcom chip at the heart of the Pi uses 0 and 3.3V logic levels, not the +/-12V used by [http://en.wikipedia.org/wiki/RS-232 RS-232] serial ports found on some older PCs. If you wish to connect one of these, you need a board or adapter to convert the signal levels. See [http://codeandlife.com/2012/07/01/raspberry-pi-serial-console-with-max3232cpe/ this tutorial] for one example on how to build a 3.3V to RS-232 level converter with a breadboard, a MAX3232CPE IC and five 0.1 uF capacitors.

−

If you have a serial connection using 5V logic levels, you should ideally have a circuit to convert between the voltage levels. See [http://www.element14.com/community/groups/raspberry-pi/blog/2012/07/18/look-ma-no-display-using-the-raspberry-pi-serial-console this tutorial] for an example circuit. For prototyping work, provided the connections are kept short you may connect the GPIO TxD directly to the 5V RxD, and the 5V TxD can be connected via a [http://en.wikipedia.org/wiki/Voltage_divider voltage divider] to the GPIO RxD. A 5V to 3V resistor divider can be built from a 2K2 (top) and a 3K3 (bottom) resistor.

+

If you wish to connect your Pi to a PC with a USB port, the simplest option is to use a USB-to-serial cable which uses 3.3V logic levels (e.g. the [http://www.adafruit.com/products/954 Adafruit 954] or the [http://www.ftdichip.com/Products/Cables/RPi.htm FTDI TTL-232R-RPI] cables). These can be simply plugged in directly to the GPIO header (see illustration).

+

+

If you wish to connect to a peripheral which has 0/5V signals, you should ideally have a circuit to convert between the voltage levels. See [http://www.element14.com/community/groups/raspberry-pi/blog/2012/07/18/look-ma-no-display-using-the-raspberry-pi-serial-console this tutorial] for an example circuit. For prototyping work, provided the connections are kept short you may connect the GPIO TxD directly to the 5V RxD, and the 5V TxD can be connected via a [http://en.wikipedia.org/wiki/Voltage_divider voltage divider] to the GPIO RxD. A 5V to 3V resistor divider can be built from a 2K2 (top) and a 3K3 (bottom) resistor.

+

+

+

== Connection to a PC ==

−

When this is done, you will need to set up a [http://en.wikipedia.org/wiki/Terminal_emulator terminal emulator] program on your PC as described below.

+

You can connect the Pi to a PC using a USB-serial cable, or (if it has an RS232 port) a level-converter circuit - see above for details. When this is done, you will need to set up a [http://en.wikipedia.org/wiki/Terminal_emulator terminal emulator] program on your PC as described below.

===Console serial parameters===

===Console serial parameters===

Line 30:

Line 33:

===Linux terminal set up===

===Linux terminal set up===

−

You will need to know the ''port name'' of your PC's serial port. On Linux this will be:

+

If your PC is running Linux, you will need to know the ''port name'' of its serial port:

−

* Built-in (standard) Serial Port: the Linux standard is '''/dev/ttyS0''', '''/dev/ttyS1''', and so on, but on the raspberry pi, it is /dev/ttyAMA0

+

* Built-in (standard) Serial Port: the Linux standard is '''/dev/ttyS0''', '''/dev/ttyS1''', and so on

** Some types of USB serial adapter may appear as '''/dev/ttyACM0''' ...

** Some types of USB serial adapter may appear as '''/dev/ttyACM0''' ...

You will need to be a member of the ''dialout'' group to access this port (for later releases the required group is ''tty''). You can check which is needed with:

You will need to be a member of the ''dialout'' group to access this port (for later releases the required group is ''tty''). You can check which is needed with:

−

ls -l /dev/ttyAMA0

+

ls -l /dev/ttyUSB0

and you will see something like "crw-rw----T 1 root dialout ..." which says root can 'create,read,write' and the group xxx can 'read,write' to the port and everyone else cannot access it.

and you will see something like "crw-rw----T 1 root dialout ..." which says root can 'create,read,write' and the group xxx can 'read,write' to the port and everyone else cannot access it.

Line 72:

Line 75:

Start ''GtkTerm'', select Configuration->Port and enter the values above in the labeled fields.

Start ''GtkTerm'', select Configuration->Port and enter the values above in the labeled fields.

−

===Windows terminal set-up===

===Windows terminal set-up===

Line 110:

Line 112:

==Connection to a microcontroller or other peripheral==

==Connection to a microcontroller or other peripheral==

−

The TxD and RxD signals can also be connected directly to similar signals on a microcontroller board like the Arduino provided the signals are all at 3V3 levels. It's still a good idea to put 2K2 series resistors in the lines to prevent damage when two outputs are connected together, which could also happen if a GPIO input pin is accidentally programmed as output.

+

The TxD and RxD signals can also be connected directly to similar signals on a microcontroller board like the Arduino provided the signals are all at 3V3 levels. Some Arduino variants use 5V levels, and should have level conversion (see 'Connections and Signal levels' above). Even at 3V3 levels, it's still a good idea to put 2K2 series resistors in the lines to prevent damage when two outputs are connected together, which could also happen if a GPIO input pin is accidentally programmed as output.

If your microcontroller uses 5V logic levels, level conversion is usually necessary - see 'Connecting to a PC' for details.

If your microcontroller uses 5V logic levels, level conversion is usually necessary - see 'Connecting to a PC' for details.

Line 140:

Line 142:

ps aux | grep ttyAMA0

ps aux | grep ttyAMA0

to search for <code>getty</code> processes using the serial port.

to search for <code>getty</code> processes using the serial port.

+

+

A tutorial on accessing the Pi's serial port from Python is available at [[Serial_port_programming]].

Connections and signal levels

Adafruit serial cable connected to Pi

The Raspberry Pi serial port consists of two signals (a 'transmit' signal, TxD and a 'receive' signal RxD) made available on the GPIO header. To connect to another serial device, you connect the 'transmit' of one to the 'receive' of the other, and vice versa. You will also need to connect the Ground pins of the two devices together.

The Broadcom chip at the heart of the Pi uses 0 and 3.3V logic levels, not the +/-12V used by RS-232 serial ports found on some older PCs. If you wish to connect one of these, you need a board or adapter to convert the signal levels. See this tutorial for one example on how to build a 3.3V to RS-232 level converter with a breadboard, a MAX3232CPE IC and five 0.1 uF capacitors.

If you wish to connect your Pi to a PC with a USB port, the simplest option is to use a USB-to-serial cable which uses 3.3V logic levels (e.g. the Adafruit 954 or the FTDI TTL-232R-RPI cables). These can be simply plugged in directly to the GPIO header (see illustration).

If you wish to connect to a peripheral which has 0/5V signals, you should ideally have a circuit to convert between the voltage levels. See this tutorial for an example circuit. For prototyping work, provided the connections are kept short you may connect the GPIO TxD directly to the 5V RxD, and the 5V TxD can be connected via a voltage divider to the GPIO RxD. A 5V to 3V resistor divider can be built from a 2K2 (top) and a 3K3 (bottom) resistor.

Connection to a PC

You can connect the Pi to a PC using a USB-serial cable, or (if it has an RS232 port) a level-converter circuit - see above for details. When this is done, you will need to set up a terminal emulator program on your PC as described below.

Console serial parameters

The following parameters are needed to connect to the Pi console, and apply on both Linux and Windows.

Speed (baud rate): 115200

Bits: 8

Parity: None

Stop Bits: 1

Flow Control: None

Linux terminal set up

If your PC is running Linux, you will need to know the port name of its serial port:

Built-in (standard) Serial Port: the Linux standard is /dev/ttyS0, /dev/ttyS1, and so on

USB Serial Port Adapter: /dev/ttyUSB0, /dev/ttyUSB1, and so on.

Some types of USB serial adapter may appear as /dev/ttyACM0 ...

You will need to be a member of the dialout group to access this port (for later releases the required group is tty). You can check which is needed with:

ls -l /dev/ttyUSB0

and you will see something like "crw-rw----T 1 root dialout ..." which says root can 'create,read,write' and the group xxx can 'read,write' to the port and everyone else cannot access it.

To find out if you, the current user, is in the group dialout, use the command:

Start GtkTerm, select Configuration->Port and enter the values above in the labeled fields.

Windows terminal set-up

Users of Windows Vista or later will need to download a terminal program, for instance PuTTY, or TeraTerm. Users of XP and below can choose between using PuTTY and the built-in Hyperterminal.

PuTTY users simply need to choose 'serial', select the correct COM port and set the speed, as shown in the dialog below.

If you are unsure of the COM port, run [Device Manager] and look under 'Ports'. USB-attached serial adapters should have the name of the adapter shown (the Adafruit cable comes up as 'Prolific USB-to_Serial Comm Port'.

Boot messages

If your connection is set up correctly, when the Pi is booted you should see many messages as the system comes up:

Unwanted serial garbage input

Note that on older software by accident the internal pullups of the RxD GPIO pins were not enabled, this could lead to lots of serial garbage being picked up if the GPIO pin was touched, or even if a finger was nearby. In extreme case this could lead to kernel warnings and other problems.

Connection to a microcontroller or other peripheral

The TxD and RxD signals can also be connected directly to similar signals on a microcontroller board like the Arduino provided the signals are all at 3V3 levels. Some Arduino variants use 5V levels, and should have level conversion (see 'Connections and Signal levels' above). Even at 3V3 levels, it's still a good idea to put 2K2 series resistors in the lines to prevent damage when two outputs are connected together, which could also happen if a GPIO input pin is accidentally programmed as output.

If your microcontroller uses 5V logic levels, level conversion is usually necessary - see 'Connecting to a PC' for details.

Preventing Linux using the serial port

The Broadcom UART appears as /dev/ttyAMA0 under Linux. There are several minor things in the way if you want to have dedicated control of the serial port on a Raspberry Pi.

Firstly, the kernel will use the port as controlled by kernel command line contained in /boot/cmdline.txt. The file will look something like this:

The console keyword outputs messages during boot, and the kgdboc keyword enables kernel debugging. You will need to remove all references to ttyAMA0. So, for the example above /boot/cmdline.txt, should contain:

Finally you will need to reboot the Pi for the new settings to take effect. Once this is done, you can use /dev/ttyAMA0 like any normal linux serial port, and you wont get any unwanted traffic confusing the attached devices.

The above instructions have been verified on Raspbian 'wheezy'; other distributions may be set up differently. To double-check, use

Handshaking lines

You can have the RTS0 signal on GPIO 17 (P1-11) if you set it to ALT function 3. Likewise, the CTS0 is available on GPIO 30 (P5-05), if it is set to ALT function 3. You can control the settings of IOs with gpio_setfunc