Bagaimana cara membuat serial bekerja pada Raspberry Pi3 (atau model yang lebih baru)

44

Konsol serial Pi3 saya menghasilkan sampah dan gagal merespons keyboard.

Milliways
sumber

Jawaban:

65

Jawaban ini masih benar, dan menjelaskan secara lebih rinci sifat dari perubahan tersebut, tetapi sebagian besar pengguna Raspbian saat ini hanya harus menjalankan sudo raspi-configPilih Interfacing Options / Seriallalu tentukan jika Anda ingin konsol Serial (mungkin tidak) kemudian jika Anda ingin perangkat keras Port Serial diaktifkan (mungkin Iya). Kemudian gunakan /dev/serial0dalam kode apa pun yang mengakses Port Serial.

BCM2837 pada Raspberry Pi3, Pi3B +, Pi3A +, PiZeroW memiliki 2 UART (seperti pendahulunya), namun untuk mendukung fungsionalitas Bluetooth, UART PL011 berfitur lengkap dipindahkan dari pin header ke chip Bluetooth dan mini UART tersedia di pin header 8 & 10.
(SOC pada Pi4 memiliki UART tambahan, tetapi 2 UART yang sama dengan BCM2837 digunakan untuk serial default pada pin 8 & 10 dan Bluetooth.)

Ini memiliki sejumlah konsekuensi bagi pengguna antarmuka serial.

Yang /dev/ttyAMA0sebelumnya digunakan untuk mengakses UART sekarang terhubung ke Bluetooth.
MiniUART sekarang tersedia di /dev/ttyS0.
Dalam perangkat lunak sistem operasi terbaru ada /dev/serial0yang memilih perangkat yang sesuai sehingga Anda dapat mengganti /dev/ttyAMA0dengan /dev/serial0dan menggunakan perangkat lunak yang sama pada Pi3 dan model sebelumnya.

Sayangnya ada sejumlah konsekuensi lain: -

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.

Tidak ada dukungan untuk paritas dan throughput terbatas, tetapi yang terakhir seharusnya tidak mempengaruhi sebagian besar penggunaan.

Ada satu fitur mematikan "Baudrate diturunkan dari jam sistem" yang membuat miniUART tidak berguna karena jam ini dapat berubah secara dinamis misalnya jika sistem beralih ke daya yang dikurangi atau dalam mode daya rendah.

Mengubah /boot/config.txtpenghapusan ini dengan menambahkan baris berikut di akhir: -

core_freq=250

Ini memperbaiki masalah dan tampaknya berdampak kecil. The SPI clock frequencydan ARM Timerjuga tergantung pada jam sistem.

Untuk beberapa alasan aneh, default untuk Pi3 menggunakan kernel 4.4.9 terbaru adalah untuk DISABLE UART. Untuk mengaktifkannya Anda perlu mengubah enable_uart=1di /boot/config.txt. (Ini juga memperbaiki core_freqsehingga ini tidak lagi diperlukan.)

Terakhir, jika Anda tidak menggunakan Bluetooth (atau menggunakan kegunaan yang tidak menuntut), dimungkinkan untuk menukar port kembali di Device Tree. Ada a pi3-miniuart-btdan pi3-disable-btmodul yang dijelaskan dalam /boot/overlays/README.

Milliways
sumber
Terima kasih @Milliways atas penjelasannya. Apa yang saya belum pergi ... Saya memiliki Radio-Modul yang terhubung ke raspberry saya menggunakan UART dan lebih suka baud-rate 9600. Jadi itu harus bekerja jika saya mengatur core_freq=250dan kemudian mengkonfigurasi baud rate saya di skrip ma python? Juga, akan lebih bagus jika Anda bisa melihat di: raspberrypi.stackexchange.com/questions/47379/… Terima kasih!
Georg
Saya telah mencoba / dev / serial0, dan enable_uart = 1 di /boot/config.txt, dengan kode wiringPi yang digunakan untuk bekerja dengan raspberry pi 2, namun masih gagal untuk memulai komunikasi serial (kondisi pengembalian -1). Saya juga mencoba / dev / S0 tetapi tidak berhasil. Apa yang mungkin saya lewatkan? (juga membebaskan port serial dari raspi-config). (semuanya termasuk raspbian terbaru)
ozgeneral
1
@ OE1 Jika Anda memiliki pertanyaan, tanyakan dalam pertanyaan baru, bukan dalam Komentar.
Milliways
Saya sedikit bingung. Bagaimana maksud Anda itu tidak mendukung paritas? Saya memiliki perangkat yang berbicara dengan pi3 saya dan harus memiliki paritas BAHKAN atau sistem saya tidak akan berbicara dengannya. Setelah mengikuti jawaban Anda dan jawaban naseer, saya bisa mendapatkan pi3 saya menjalankan program saya berbicara SUKSES ke perangkat ini yang diatur untuk BAHKAN paritas.
ThN
1
Bisakah Anda menambahkan bahwa konverter USB ke UART harus kompatibel dengan 3.3V dan tidak kompatibel dengan 5V.
MaNyYaCk
20

akhirnya ini berhasil untuk pi3 saya (os: debian jessie)

ikuti 6 langkah ini dengan hati-hati.

Langkah 1 - Instal Raspbian Jessie ke kartu SD dan boot Pi ketika terhubung ke jaringan Login melalui terminal atau desktop dan shell Konfigurasikan sistem dengan:

sudo raspi-config

Perluas filesystem dan aktifkan serial pada halaman lanjutan, keluar dan reboot.

Langkah 2 -ini tidak perlu jika Anda memiliki rilis baru jessie Perbarui sistem dengan:

sudo apt-get update

sudo apt-get upgrade

Langkah 3 - Pengaturan Device Tree seperti di bawah ini:

Tambahkan bagan perangkat ke /boot/config.txt untuk menonaktifkan bluetooth Raspberry Pi 3.

sudo nano /boot/config.txt

Tambahkan di akhir file

* jika Anda ingin mengubah port blutooth ke miniuart (buruk)

dtoverlay=pi3-miniuart-bt

* jika Anda ingin menonaktifkan blutooth (bagus)

dtoverlay=pi3-disable-bt

Keluar dari editor dan simpan perubahan Anda.

Langkah 4 - reboot pi

sudo reboot

langkah 5 -

a) untuk menonaktifkan Serial Console, edit file menggunakan

sudo nano /boot/cmdline.txt

hapus fase kata " console=serial0,115200" atau " console=ttyAMA0,115200"

Keluar dan simpan perubahan Anda

b) Mengaktifkan Konsol Serial, mengedit file menggunakan

sudo nano /boot/cmdline.txt

Ubah file menjadi yang berikut:

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

Keluar dan simpan perubahan Anda

Langkah 6 - reboot pi

sudo reboot

----------------- itu saja, bersenang-senang ---------------------------- ---

Mohammad Naseer
sumber
Pada RS2 ini berfungsi dan saya telah terhubung ke papan relay bluetooth dan mengirimkannya pesan melalui perintah AT. Tetapi bisakah saya menerima data dari Arduino dengan cara ini?
marciokoko
10

Jawaban Naseer benar tetapi sedikit rumit jika Anda baru saja mem-flash rasbian terbaru. Yang perlu saya lakukan, hanya menambahkan baris berikut ke config.txt saya (dari misalnya windows tempat Anda mencolokkan kartu SD pada partisi fat32):

dtoverlay=pi3-disable-bt

Kemudian colokkan, dan pi akan langsung mencetak barang pada pin konsol.

Arnout
sumber
Bagaimana ini bisa berhasil? Bluetooth UART bahkan tidak terhubung ke pin GPIO!
Dmitry Grigoryev
4
@DmitryGrigoryev Ini bekerja untuk saya pada PI saya 3.
ThN
2
Ini juga bekerja untuk saya, saya menemukan bahwa utas ini membantu mengklarifikasi beberapa masalah kecil: raspberrypi.org/forums/…
Chris