The Raspberry Pi 3 added all sorts of features to the Pi, including a much faster speed adjustable CPU, built-in WiFi, and Bluetooth interfaces.
Some of the hardware interfaces on the Pi continue to have limited functionality. Such is the situation with the RPi 3’s serial port. The primary serial port, which has a fully adjustable and stable baud rate generator, was dedicated to the Bluetooth interface. That meant that the “User” serial I/O port was assigned to the secondary serial port. This is a major issue as that serial port lacks an independent baud rate generator, but uses the system clock instead. The problem with that is the system clock is dynamically changing all the time based on CPU load (to provide bursts of higher speed clock rates without causing the system to overheat or draw too much power on a long-term basis).
Because of the variable system clock rate, the user serial I/O port is almost useless. For example, you can’t hook it up to a GPS Hat and expect it to work since the baud rate changes unpredictably.
There are two workarounds:
- Run at the slowest clock rate all the time, crippling the RPi3
- Disable the Bluetooth interface and assign it to the user serial port
More details here: https://forums.adafruit.com/viewtopic.php?f=50&t=94677
And here: https://openenergymonitor.org/forum-archive/node/12311.html
And here: http://raspberrypi.stackexchange.com/questions/45570/how-do-i-make-serial-work-on-the-raspberry-pi3
https://github.com/raspberrypi/firmware/issues/553
https://github.com/RPi-Distro/repo/issues/22