啟用樹莓派3B串列埠通訊能力

weixin_34075268發表於2017-08-28

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\rx串列埠對映給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

相關文章