[常見問與答] 解決從序列埠登入到 Pi 3 的亂碼問題

購買產品:PL2303HX USB轉TTL傳輸線,PL2303HXD USB轉TTL傳輸線。

剛拿到 Pi 3 如果安裝 2016-02-26-raspbian-jessie 的映像檔後想使用序列埠連線,會發現出現亂碼,該怎麼辦? 這是因為原本 Pi 3 內建的硬體 UART 被 BCM2837 SoC 拿去給 Bluetooth 晶片組使用,而原本的 UART 輸出腳位(GPIOs 14 & 15)改成用 mini-uart port。意思是原本硬體 UART 有獨立的 clock divisor,因此 baud rate 可以維持在 115200,可是 mini-uart 使用系統核心時脈,實際只能跑到 72000 左右的 baud rate,因此當使用 115200 的 baud rate 連線就會出現亂碼。 解決的方法為: 步驟一,增加一個 pi3-disable-bt-overlaydevice tree overlay。這個 overlay 會停用藍牙,並且將 UART0/ttyAMA0 再設定給 GPIOs 14 & 15。 建議將 image 寫入 SD 卡後就直接修改 /boot/config.txt,在檔案最後增加兩行。

其中,force_turbo=1 是強制 CPU 的時脈維持 1.2GHz 的時脈。預設值為 0 時表示時脈為 ondemand,會隨著負載而調整。 而 dtoverlay=pi3-disable-bt 表示載入 pi3-disable-bt 這個 device tree overlay,將會停用藍牙並將 UART0/ttyAMA0 設定到 GPIOs 14 & 15 腳位。 其實做完步驟一以後就可以用 115200 的 baud rate 透過序列埠連線進 Pi 了。可是雖然載入 pi3-disable-bt-overlay,但藍牙的服務依然是開啟的,因此還是要進入系統將藍牙服務停掉。

最後,因為使用 force_turbo=1 這個設定,整個 SoC 溫度會很高,因此再更新系統(包括 firmware 和 dtb)後就可以把這個設定註解掉,重開機生效。

更多資訊:

1. 要如何看 CPU 時脈? 可以用 cat 指令查看以下三個檔案如下,分別為最高時脈、目前時脈、最低時脈。

2. 如何看目前的 Device Tree? 首先要安裝 device tree compiler

再用 dtc 指令查看。

結果會像

參考資料: * CONFIG.TXT * DEVICE TREES, OVERLAYS AND PARAMETERS * Raspberry Pi Device Tree Overlays * Raspberry Pi 3 UART Overlay Workaround * Raspberry Pi 3 compatibility (BT disable & serial port remap fix) * RPi Serial Connection * Raspberry Pi Serial Communication: What, Why, and a Touch of How * More on Raspberry Pi serial ports

相關教學

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

補貨通知我 我們將會在商品到貨的時候通知您。請在下方留下有效的Email。
Email 數量 我們不會將你的Email 告知任何人。