[Raspberry Pi] 啟用Raspberry Pi 3B+ 序列埠功能

Introduction

對於Raspberry Pi 3B+來說,它的UART有三種功能:
  1. 供內部藍牙使用
  2. 控制終端使用(serial console)
  3. 與其他設備進行序列通訊(serial communication)

Raspberry Pi 3B+有兩個UART(Universal Asynchronous Receiver/Transmitter,Universal是指可以自定義傳輸格式與baud rate,Asynchronous是指不依賴CPU時鐘),分別為PL011 UART與mini UART,PL011使用獨立的硬體(ARM PrimeCell PL011)去控制傳輸的baud rate,所以傳輸的性能與穩定度都很好,但是mini UART的baud rate是使用系統核心時脈計算出來的,只能算半軟體的URAT,就算設定到115200bps實際上只有72000bps左右而已,相較之下效能與穩定度都不足。

PL011 UART在系統中是/dev/ttyAMA0,mini UART是/dev/ttys0,Raspberry Pi 3B+有兩個序列埠口為serial0與serial1,serial0是GPIO埠口,使用GPIO 14(pin 8)與GPIO 15(pin 15),serial1是藍芽;在系統預設中,serial0是關閉的,serial1是指向/dev/ttyAMA0,所以無論是想用序列埠口作為serial console或者與其他設備做serial communication,首先要做的是啟用serial0這個序列埠口。
2020-04-22_111924.png-啟用Raspberry Pi 3B+ 序列埠功能

Enable Serial Port

本篇使用的硬體為Raspberry Pi 3B+,映像檔版本為2018-11-13-raspbian-stretch-lite;要啟用serial0可以使用raspi-config或者修改/boot/config.txt兩種方式。

使用raspi-config

  1. 進入Raspberry Pi Software Configuration Tool
    sudo raspi-config
  2. 選擇5 Interfacing Options並按下Enter鍵。
    2020-04-22_111944.png-啟用Raspberry Pi 3B+ 序列埠功能
  3. 選擇P6 Serial並按下Enter鍵。
    2020-04-22_111952.png-啟用Raspberry Pi 3B+ 序列埠功能
  4. 預設啟動serial interface會做為serial console使用,選擇Yes並按下Enter鍵;若要將serial interface作為通訊用則選擇No。
    2020-04-22_112000.png-啟用Raspberry Pi 3B+ 序列埠功能
  5. 最後會提示serial interface已啟動,重新啟動Raspberry Pi 3B+便可啟動serial interface。
    2020-04-22_112005.png-啟用Raspberry Pi 3B+ 序列埠功能

修改/boot/config.txt

  1. 開啟/boot/config.txt檔
    sudo vi /boot/config.txt
  2. 文件最後加上enable_uart=1,儲存文件後重新啟動Raspberry Pi 3B+便可啟動serial interface。
    2020-04-22_112035.png-啟用Raspberry Pi 3B+ 序列埠功能

上述兩種方法任一種執行完後,在/dev中可以看到serial0啟用了並指向/dev/ttyS0,此時就可以使用,此時就可以從GPIO埠口以serial的方式登入Raspberry Pi 3B+,預設的baud rate是115200。
2020-04-22_112127.png-啟用Raspberry Pi 3B+ 序列埠功能

Use PL011 For Serial Communication

如果進一步希望serial0可以使用PL011(/dev/ttyAMA0)來確保穩定的傳輸,可以編輯/boot/config.txt,加上dtoverlay=pi3-miniuart-bt,若希望進一步停用藍芽可再加上dtoverlay=pi3-disable-bt。
2020-04-22_112349.png-啟用Raspberry Pi 3B+ 序列埠功能

重啟系統後再觀察/dev中的內容,就會發現serial0是指向/dev/ttyAMA0了。
2020-04-22_112350.png-啟用Raspberry Pi 3B+ 序列埠功能

留言