Làm cách nào để tôi thực hiện công việc nối tiếp trên Raspberry Pi3 (hoặc phiên bản mới hơn)


Câu trả lời:


65

Câu trả lời này vẫn đúng và giải thích chi tiết hơn về bản chất của các thay đổi, nhưng hầu hết người dùng Raspbian hiện tại chỉ nên chạy sudo raspi-configChọn Interfacing Options / Serialsau đó chỉ định nếu bạn muốn có bảng điều khiển Nối tiếp (có thể không) sau đó nếu bạn muốn bật phần cứng Cổng nối tiếp (có thể Đúng). Sau đó sử dụng /dev/serial0trong bất kỳ mã nào truy cập Cổng nối tiếp.

BCM2837 trên Raspberry Pi3, Pi3B +, Pi3A +, PiZeroW có 2 UART (như các phiên bản trước của nó), tuy nhiên để hỗ trợ chức năng Bluetooth, U011 PL011 đầy đủ tính năng đã được chuyển từ chân tiêu đề sang chip Bluetooth và UART mini chân tiêu đề 8 & 10.
(SOC trên Pi4 có thêm UART, nhưng 2 UART tương tự như BCM2837 được sử dụng cho nối tiếp mặc định trên chân 8 & 10 và Bluetooth.)

Điều này có một số hậu quả cho người dùng giao diện nối tiếp.

Các /dev/ttyAMA0trước đây sử dụng để truy cập các UART nay kết nối với Bluetooth.
Các miniUART hiện có sẵn trên /dev/ttyS0.
Trong phần mềm hệ điều hành mới nhất có một /dev/serial0mà lựa chọn thiết bị phù hợp để bạn có thể thay thế /dev/ttyAMA0với /dev/serial0và sử dụng phần mềm tương tự trên Pi3 và các mô hình trước đó.

Thật không may, có một số hậu quả khác: -

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.

Không có hỗ trợ cho tính chẵn lẻ và thông lượng bị hạn chế, nhưng điều này không ảnh hưởng đến hầu hết các mục đích sử dụng.

Có một tính năng sát thủ "Baudrate có nguồn gốc từ đồng hồ hệ thống" khiến cho miniUART trở nên vô dụng vì đồng hồ này có thể thay đổi linh hoạt, ví dụ nếu hệ thống chuyển sang chế độ giảm năng lượng hoặc ở chế độ năng lượng thấp.

Sửa đổi /boot/config.txtloại bỏ sự phụ thuộc này bằng cách thêm dòng sau vào cuối: -

core_freq=250

Điều này khắc phục vấn đề và dường như có ít tác động. Các SPI clock frequencyARM Timercũng phụ thuộc vào đồng hồ hệ thống.

Đối với một số lý do kỳ lạ, mặc định cho Pi3 sử dụng kernel 4.4.9 mới nhất là DISABLE UART. Để kích hoạt nó, bạn cần phải thay đổi enable_uart=1trong /boot/config.txt. (Điều này cũng sửa lỗi core_freqvì vậy điều này không còn cần thiết nữa.)

Cuối cùng, nếu bạn không sử dụng Bluetooth (hoặc có những cách sử dụng không mong muốn), có thể trao đổi các cổng trở lại trong Cây thiết bị. Có một pi3-miniuart-btpi3-disable-btmô-đun được mô tả trong /boot/overlays/README.


Cảm ơn bạn @Milliways vì lời giải thích tuyệt vời. Những gì tôi chưa đi mặc dù ... Tôi có Mô-đun Radio kết nối với quả mâm xôi của mình bằng UART và nó thích tốc độ truyền của 9600. Vì vậy, nó sẽ hoạt động nếu tôi thiết lập core_freq=250và sau đó cấu hình tốc độ baud của tôi trong kịch bản ma python? Ngoài ra, sẽ rất tuyệt nếu bạn có thể xem tại: raspberrypi.stackexchange.com/questions/47379/ khăn Cảm ơn bạn!
Georg

Tôi đã thử / dev / serial0 và enable_uart = 1 in /boot/config.txt, với mã dâyPi được sử dụng để làm việc với raspberry pi 2, nhưng vẫn không thể bắt đầu giao tiếp nối tiếp (điều kiện trả về là -1). Tôi cũng đã thử / dev / S0 nhưng không có kết quả. Tôi có thể thiếu gì? (cũng giải phóng cổng nối tiếp từ raspi-config). (tất cả mọi thứ bao gồm cả raspbian được cập nhật)
ozgeneral

1
@ OE1 Nếu bạn có câu hỏi, hãy hỏi nó trong một câu hỏi mới, không phải trong Nhận xét.
Milliways

Tôi hơi bối rối. Làm thế nào để bạn có nghĩa là nó không hỗ trợ ngang giá? Tôi có một thiết bị mà pi3 của tôi nói chuyện và nó phải có tính chẵn lẻ hoặc hệ thống của tôi sẽ không nói chuyện với nó. Sau khi làm theo câu trả lời của bạn và câu trả lời của người theo dõi, tôi đã có thể nhận được pi3 của mình khi chạy chương trình nói chuyện THÀNH CÔNG với thiết bị này được đặt cho tương đương NGAY.
ThN

1
Bạn có thể thêm rằng bộ chuyển đổi USB sang UART phải tương thích 3,3V và không tương thích với 5V.
MaNyYaCk

20

cuối cùng điều này cũng có tác dụng với pi3 của tôi (os: debian jessie)

hãy làm theo 6 bước cẩn thận

Bước 1 - Cài đặt Raspbian Jessie vào thẻ SD và khởi động Pi khi được kết nối với mạng Đăng nhập qua thiết bị đầu cuối hoặc máy tính để bàn và vỏ Cấu hình hệ thống với:

sudo raspi-config

Mở rộng hệ thống tập tin và kích hoạt nối tiếp trên trang nâng cao, thoát và khởi động lại.

Bước 2 - điều này sẽ không cần thiết nếu bạn có bản phát hành mới của jessie Cập nhật hệ thống với:

sudo apt-get update

sudo apt-get upgrade

Bước 3 - Cài đặt cây thiết bị như dưới đây:

Thêm cây thiết bị vào /boot/config.txt để tắt bluetooth Raspberry Pi 3.

sudo nano /boot/config.txt

Thêm vào cuối tập tin

* nếu bạn muốn thay đổi blutooth thành cổng miniuart (xấu)

dtoverlay=pi3-miniuart-bt

* nếu bạn muốn tắt blutooth (tốt)

dtoverlay=pi3-disable-bt

Thoát khỏi trình chỉnh sửa lưu các thay đổi của bạn.

Bước 4 - khởi động lại pi

sudo reboot

bước 5 -

a) để vô hiệu hóa Bảng điều khiển nối tiếp chỉnh sửa tệp bằng cách sử dụng

sudo nano /boot/cmdline.txt

xóa pha từ " console=serial0,115200" hoặc " console=ttyAMA0,115200"

Thoát và lưu các thay đổi của bạn

b) để Kích hoạt Bảng điều khiển nối tiếp chỉnh sửa tệp bằng cách sử dụng

sudo nano /boot/cmdline.txt

Thay đổi tệp thành như sau:

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

Thoát và lưu các thay đổi của bạn

Bước 6 - khởi động lại pi

sudo reboot

----------------- đó là tất cả, vui chơi ---------------------------- ---


Trên rpi2, nó hoạt động và tôi đã kết nối với bảng chuyển tiếp bluetooth và gửi tin nhắn qua các lệnh AT. Nhưng tôi có thể nhận dữ liệu từ một arduino theo cách này không?
marciokoko

10

Câu trả lời của Naseer là đúng nhưng hơi phức tạp nếu bạn chỉ chớp nhoáng những người mới nhất. Tất cả những gì tôi cần làm chỉ là thêm dòng sau vào config.txt của tôi (ví dụ: cửa sổ nơi bạn cắm thẻ SD trên phân vùng fat32):

dtoverlay=pi3-disable-bt

Sau đó cắm nó vào, và pi sẽ trực tiếp in các thứ trên các chân của bàn điều khiển.


Làm thế nào điều này có thể làm việc? Bluetooth UART thậm chí không được kết nối với chân GPIO!
Dmitry Grigoryev

4
@DmitryGrigoryev Nó hoạt động với tôi trên PI 3.
ThN

2
Điều này cũng hiệu quả với tôi, tôi thấy rằng chủ đề này đã giúp làm rõ một vài vấn đề nhỏ: raspberrypi.org/forums/ mẹo
Chris
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.