激活树莓派3B串口通信能力

2019-07-14 00:19发布

0x00 前言

首先介绍RPI3中的两个串口
  1. /dev/ttyAMA0:
    RPI3配备了蓝牙,为了保证蓝牙的正确使用,/dev/ttyAMA0则不再为GPIO串口服务,而是为蓝牙模块服务。
  2. /dev/ttyS0:
    被称为"mini uart",此串口代表了"Physical pin 8|10 BCM pin 14|15Wiring Pi pin 15|16".
    但是由于次串口波特率收到cpu频率影响,并不稳定,所以实际上无法被用来串口通信。
workaround思路:将ttyAMA0和ttyS0互换,那么gpio tx x串口映射给ttyAMA0,ttyS0则映射给蓝牙设备。
这样gpio 14、15串口就拥有了稳定,强大的通信功能。
而蓝牙串口则无法正常使用。

0x01 激活串口功能

$ sudo nano /boot/config.txt 改变使得:enable_uart=1.
若无此参数,则在最后一行添加:enable_uart=1.
重启设备。

0x02 查看串口别名

ls -l /dev 会发现:
lrwxrwxrwx 1 root root 7 Aug 28 07:41 serial0 -> ttyS0
lrwxrwxrwx 1 root root 5 Aug 28 07:41 serial1 -> ttyAMA0

0x02 禁用/dev/ttyS0的console功能

$ sudo systemctl stop serial-getty@ttyS0.service $ sudo systemctl disable serial-getty@ttyS0.service 并且修改cmdline.txt文件 $ sudo nano /boot/cmdline.txt 删除“console=serial0,115200”,保存并重启

0x03 交换串口

$ sudo nano /boot/config.txt 在最下面添加:dtoverlay=pi3-miniuart-bt
保存并重启。
此时查看串口别名则发现:
lrwxrwxrwx 1 root root 7 Aug 28 07:41 serial0 -> ttyAMA0
lrwxrwxrwx 1 root root 5 Aug 28 07:41 serial1 -> ttyS0
此时,ttyAMA0串口可以正常用于串口通信,ttyS0则无法被用于串口通信,蓝牙功能失效。

参考:

https://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/#History