Close

UART for Serial Console or HAT on Raspberry Pi 3

It seems the recently launched Raspberry Pi 3 behaves differently with regards to the UART interface on the GPIO header. In this guide I go through the steps I took to get the UART working for serial console or HAT communication.

I am assuming you are using a recent Raspbian Jessie image (2016-03-18 or more recent) on Raspberry Pi 3, that the file system has been expanded and that enough space is left for the software updates to be installed.

Let’s go!

Update Software

The first thing you’ll need to do is to ensure all software components are up-to-date.

Update the repository and upgrade the installed packages:

pi@raspberrypi:~ $ sudo apt-get update && sudo apt-get upgrade -y

Update the firmware:

pi@raspberrypi:~ $ sudo rpi-update

Reboot to apply the changes:

pi@raspberrypi:~ $ sudo reboot

Enable UART

A new property has been introduced to enable the UART on the Pi. This property will put the core frequency to a minimum, ensuring stability. It’s possible to put the core frequency to maximum as well, assuming the power supply is powerful enough and the Pi 3 is properly cooled (heatsink!).

Enabling UART with minimum core frequency:

pi@raspberrypi:~ $ sudo nano /boot/config.txt

# Enable UART
enable_uart=1

Enabling UART with maximum core frequency:

pi@raspberrypi:~ $ sudo nano /boot/config.txt

# Enable UART
enable_uart=1
force_turbo=1

More information on this newly introduced property can be found here: https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=141195

Below are two screenshots: on the left, console before update, on the right, after the update and enable. The results are clearly better!

Screen Shot 2016-03-24 at 20.13.42 Screen Shot 2016-03-24 at 20.23.49

Disable Console

In case you would like to connect a HAT using the UART interface, it’s recommended to disable the console.

To disable the console, edit the following file as follows:

pi@raspberrypi:~ $ sudo nano /boot/cmdline.txt

#dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

Reboot to apply the change:

pi@raspberrypi:~ $ sudo reboot

You can verify something is being sent/received by the HAT’s UART with the commands below.

Set the baudrate of the interface, for example 57600:

pi@raspberrypi:~ $ sudo stty -F /dev/ttyS0 57600

Dump the data of the serial interface:

pi@raspberrypi:~ $ sudo hexdump -C < /dev/ttyS0
00000000 0a 07 01 eb a5 00 55 00 0a 07 01 eb a5 00 00 70 |......U........p|
00000010 00 01 80 9d c1 00 01 ff ff ff ff 2d 00 4e 55 00 |...........-.NU.|
00000020 0a 55 00 0a 07 01 eb a5 00 00 70 00 01 80 9d c1 |.U........p.....|
00000030 00 01 ff ff ff ff 36 00 8e 55 00 0a 07 01 eb a5 |......6..U......|
00000040 00 00 70 00 01 80 9d c1 00 01 ff ff ff ff 2d 00 |..p...........-.|
00000050 4e 55 00 0a 07 01 eb a5 00 00 70 00 01 80 9d c1 |NU........p.....|

If you see data, your HAT's UART should be working and can now be used in your script/application.

The screenshot below demonstrates my EnOceanPi HAT providing data to OpenHab using the GPIO's UART:

IMG_1142 Screen Shot 2016-03-24 at 21.58.19

 

 

 

© Frederick Vandenbosch, 2014-2021. Unauthorised use and/or duplication of this material without express and written permission from this blog’s author and owner is strictly prohibited. Excerpts and links may be used, provided that full and clear credit is given to Frederick Vandenbosch with appropriate and specific direction to the original content.