1. 程式人生 > >玩轉樹莓派3 -- 串列埠問題的解決

玩轉樹莓派3 -- 串列埠問題的解決

買到樹莓派3,想通過串列埠控制檯來玩一下

結果發現,串列埠是不能用的

這就意味著,開機過程當中,看不到那些字串列印,之後,也使用不了串列埠控制檯

查了一下網上的相關文章

主要原因是,樹莓派3帶有藍芽功能,而該藍芽模組是通過硬體串列埠UART0/ttyAMA0連線的

另外還有一個軟體串列埠 mini-UART (ttyS0),但不能產生穩定的頻率,因為,該軟體串列埠的頻率是與CPU頻率相關的

由於樹莓派官方,不僅沒有公佈這塊板子的電路圖,而且,也找不到CPU BCM2837的晶片手冊

所以,就不要從硬體角度去想著如何把這個問題搞得更透了

那就從軟體的角度去把這個問題解決

網上的相關文章,有很多,有一部分最終結果,也是能將串列埠控制檯能使用起來了,達到了目的

但問題在於,有些寫得很多,把不必要的部分也加進來

有些寫得看似很精簡,但按照這個方法去解決,又根本沒有達到目的

我將網上的一部分文章歸納了一下

一些步驟是都有提及的,一些步驟是有些文章有,有些文章卻沒有的

如果說這是一個時序邏輯,那如何把必要的步驟提取出來,然後按照一定的先後順序去實施,是問題解決的關鍵

歸納了一下,有這此步驟,是大家都提及的:

1.sudo systemctl disable hciuart

2.dtoverlay=pi3-disable-bt       --- /boot/config.txt

3.edit /lib/systemd/system/hciuart.service
        and replace ttyAMA0 with ttyS0
4.dtoverlay=pi3-miniuart-bt     --- /boot/config.txt

5./boot/cmdline.txt

所以問題來了,這5個步驟都需要嗎,以及這些步驟之間有時間先後嗎?

問題的解決,還是從最根本的/boot/overylays/README而來:

*******************************************************************************************************

Name:   pi3-disable-bt
Info:   Disable Pi3 Bluetooth and restore UART0/ttyAMA0 over GPIOs 14 & 15
        N.B. To disable the systemd service that initialises the modem so it
        doesn't use the UART, use 'sudo systemctl disable hciuart'.
Load:   dtoverlay=pi3-disable-bt
Params: <None>


Name:   pi3-miniuart-bt
Info:   Switch Pi3 Bluetooth function to use the mini-UART (ttyS0) and restore
        UART0/ttyAMA0 over GPIOs 14 & 15. Note that this may reduce the maximum
        usable baudrate.
        N.B. It is also necessary to edit /lib/systemd/system/hciuart.service
        and replace ttyAMA0 with ttyS0, unless you have a system with udev rules
        that create /dev/serial0 and /dev/serial1, in which case use
        /dev/serial1 instead because it will always be correct. Furthermore,
        you must also set core_freq=250 in config.txt or the miniuart will not
        work.
Load:   dtoverlay=pi3-miniuart-bt
Params: <None>

*******************************************************************************************************

其實在這個README當中,已經把如何硬體串列埠使用起來,寫得非常明確了。

不知道大家能用兩步解決嗎?

做工程師這麼多年,得出一個結論,做很多的專案固然是好事情

你會發現,有很多工程師,年紀也不小了,面試的時候,簡歷上也寫著做過好多專案,看似有非常豐富的工作經歷,閱歷也非常寬泛,知識面也很廣

但一碰到問題,他就心慌,就沒有任何頭緒,

這種情況的根本問題就是,他只顧做事情,沒有時間去思考,對問題從表象到ROOT CAUSE,有一次很好的鍛鍊。

所以,專案不在多,而在精!!!