Jak wykonać pracę seryjną na Raspberry Pi3 (lub nowszym modelu)


Odpowiedzi:


65

Ta odpowiedź jest nadal poprawna i wyjaśnia bardziej szczegółowo charakter zmian, ale większość użytkowników obecnego Raspbian powinna po prostu uruchomić sudo raspi-configWybierz, Interfacing Options / Seriala następnie określić, czy chcesz mieć konsolę szeregową (prawdopodobnie nie), a następnie, czy chcesz włączyć sprzęt portu szeregowego (prawdopodobnie tak). Następnie użyj /dev/serial0w dowolnym kodzie, który uzyskuje dostęp do portu szeregowego.

BCM2837 na Raspberry Pi3, Pi3B +, Pi3A +, PiZeroW ma 2 UART (podobnie jak jego poprzednicy), jednak w celu obsługi funkcji Bluetooth w pełni funkcjonalny PL011 UART został przeniesiony z pinów nagłówka do układu Bluetooth, a mini UART udostępniony na piny nagłówka 8 i 10.
(SOC na Pi4 ma dodatkowe UART, ale te same 2 UART co BCM2837 są używane do domyślnego portu szeregowego na pinach 8 i 10 oraz Bluetooth.)

Ma to szereg konsekwencji dla użytkowników interfejsu szeregowego.

/dev/ttyAMA0Poprzednio używany do dostępu UART teraz łączy się z Bluetooth.
MiniUART jest teraz dostępny na /dev/ttyS0.
W najnowszej wersji oprogramowania systemu operacyjnego jest /dev/serial0który wybiera odpowiedniego urządzenia, dzięki czemu można zastąpić /dev/ttyAMA0z /dev/serial0i korzystać z tego samego oprogramowania na PI3 i wcześniejszych modeli.

Niestety istnieje wiele innych konsekwencji:

The mini UART is a secondary low throughput UART  
  intended to be used as a console.
The mini Uart has the following features:
• 7 or 8 bit operation.
• 1 start and 1 stop bit.
• No parities.
• Break generation.
• 8 symbols deep FIFOs for receive and transmit.
• SW controlled RTS, SW readable CTS.
• Auto flow control with programmable FIFO level.
• 16550 like registers.
• Baudrate derived from system clock.

Nie ma obsługi parzystości i przepustowość jest ograniczona, ale ta ostatnia nie powinna wpływać na większość zastosowań.

Istnieje jedna funkcja zabójcy „Baudrate pochodna od zegara systemowego”, która sprawia, że ​​miniUART jest bezużyteczny, ponieważ zegar ten może zmieniać się dynamicznie, np. Gdy system przejdzie w tryb obniżonej mocy lub w tryb niskiej mocy.

Modyfikowanie /boot/config.txtusuwa tę zależność, dodając na końcu następujący wiersz: -

core_freq=250

To rozwiązuje problem i wydaje się, że ma niewielki wpływ. SPI clock frequencyI ARM Timersą również zależne od zegara systemowego.

Z jakiegoś dziwnego powodu domyślnym ustawieniem Pi3 przy użyciu najnowszego jądra 4.4.9 jest WYŁĄCZ UART. Aby ją włączyć należy zmienić enable_uart=1w /boot/config.txt. (To także rozwiązuje core_freqproblem, więc nie jest to już konieczne).

Wreszcie, jeśli nie korzystasz z Bluetooth (lub masz mało wymagające zastosowania), możesz zamienić porty z powrotem w drzewie urządzeń. Istnieje moduł pi3-miniuart-bti pi3-disable-bt, które są opisane w /boot/overlays/README.


Dziękuję @Milliways za wspaniałe wyjaśnienie. Czego jednak nie wybrałem ... Mam moduł radiowy, który łączy się z moją maliną za pomocą UART i preferuje szybkość transmisji wynoszącą 9600. Więc to powinno działać, jeśli ustawię, core_freq=250a następnie skonfiguruję prędkość transmisji w skrypcie ma python? Byłoby również świetnie, gdybyś mógł spojrzeć na: raspberrypi.stackexchange.com/questions/47379/… Dziękuję!
Georg,

Próbowałem / dev / serial0 i enable_uart = 1 w /boot/config.txt, z kodem wiringPi, który kiedyś działał z Raspberry pi 2, ale nadal nie inicjuje komunikacji szeregowej (warunek powrotu to -1). Próbowałem również / dev / S0 bezskutecznie. Czego mogę brakować? (uwolniono również port szeregowy z raspi-config). (wszystko w tym raspbian jest aktualne)
ozgeneral

1
@ OE1 Jeśli masz pytanie, zadaj je w nowym pytaniu, a nie w komentarzach.
Milliways,

Jestem trochę zdezorientowany. Co masz na myśli, że nie obsługuje parzystości? Mam urządzenie, z którym rozmawia pi3 i musi mieć NAWET parzystość, inaczej mój system nie będzie z nim rozmawiał. Po podążeniu za twoją odpowiedzią i naseerową odpowiedzią udało mi się uruchomić mój program pi3 BEZPIECZNIE, mówiąc do tego urządzenia, które jest ustawione na NAWET parzystości.
ThN

1
Czy możesz dodać, że konwerter USB na UART powinien być zgodny z napięciem 3,3 V, a nie 5 V.
MaNyYaCk

20

w końcu to działa dla mojego pi3 (os: debian jessie)

proszę dokładnie wykonać te 6 kroków .

Krok 1 - Zainstaluj Raspbian Jessie na karcie SD i uruchom Pi po podłączeniu do sieci Zaloguj się przez terminal lub komputer i powłokę Skonfiguruj system za pomocą:

sudo raspi-config

Rozwiń system plików i włącz serial na stronie zaawansowanej, zakończ i uruchom ponownie.

Krok 2 - nie będzie to konieczne, jeśli masz nową wersję jessie Zaktualizuj system za pomocą:

sudo apt-get update

sudo apt-get upgrade

Krok 3 - Ustawienia drzewa urządzeń, jak poniżej:

Dodaj drzewo urządzeń do /boot/config.txt, aby wyłączyć bluetooth Raspberry Pi 3.

sudo nano /boot/config.txt

Dodaj na końcu pliku

* jeśli chcesz zmienić port blutooth na port miniuart (zły)

dtoverlay=pi3-miniuart-bt

* jeśli chcesz wyłączyć blutooth (dobre)

dtoverlay=pi3-disable-bt

Wyjdź z edytora, zapisując zmiany.

Krok 4 - uruchom ponownie pi

sudo reboot

krok 5 -

a) Aby wyłączyć konsolę szeregową, edytuj plik za pomocą

sudo nano /boot/cmdline.txt

usuń słowo faza „ console=serial0,115200” lub „ console=ttyAMA0,115200

Wyjdź i zapisz zmiany

b) Aby włączyć konsolę szeregową, edytuj plik za pomocą

sudo nano /boot/cmdline.txt

Zmień plik na następujący:

dwc_otg.lpm_enable=0 console=tty1 console=serial0(or ttyAMA0),115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

Wyjdź i zapisz zmiany

Krok 6 - uruchom ponownie pi

sudo reboot

----------------- to wszystko, baw się dobrze ---------------------------- ---


Na rpi2 to działa i mam to podłączone do płyty przekaźników bluetooth i wysyłam wiadomości za pomocą poleceń AT. Ale czy mogę w ten sposób otrzymywać dane z arduino?
marciokoko

10

Odpowiedź Naseera jest poprawna, ale nieco skomplikowana, jeśli tylko sflashowałeś najnowszego rasbasa. Wszystko, co musiałem zrobić, to po prostu dodać następujący wiersz do pliku config.txt (np. Z systemu Windows, w którym podłączasz kartę SD na partycji fat32):

dtoverlay=pi3-disable-bt

Następnie podłącz go, a pi bezpośrednio wydrukuje rzeczy na pinach konsoli.


Jak to może działać? Bluetooth UART nie jest nawet podłączony do pinów GPIO!
Dmitrij Grigoryev,

4
@DmitryGrigoryev Działa dla mnie na moim PI 3.
ThN

2
To również działało dla mnie. Odkryłem, że ten wątek pomógł wyjaśnić kilka drobnych problemów: raspberrypi.org/forums/…
Chris,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.