ฉันจะทำให้อนุกรมทำงานบน Raspberry Pi3, Pi3B +, PiZeroW ได้อย่างไร


คำตอบ:


65

คำตอบนี้ยังคงเป็นที่ถูกต้องและอธิบายในรายละเอียดมากขึ้นลักษณะของการเปลี่ยนแปลง แต่ผู้ใช้ส่วนใหญ่ของ Raspbian ปัจจุบันก็ควรจะทำงานsudo raspi-configเลือกInterfacing Options / Serialแล้วระบุถ้าคุณต้องการอนุกรมคอนโซล (อาจจะไม่ได้) แล้วถ้าคุณต้องการอนุกรมฮาร์ดแวร์พอร์ตเปิดการใช้งาน (อาจ ใช่). จากนั้นใช้/dev/serial0รหัสใดก็ได้ที่เข้าถึงพอร์ตอนุกรม

BCM2837 บน Raspberry Pi3, Pi3B +, PiZeroW มี 2 UART (เช่นเดียวกับรุ่นก่อน) อย่างไรก็ตามเพื่อรองรับการใช้งานบลูทู ธ ทำให้ PL011 UART ที่โดดเด่นครบถ้วนถูกย้ายจากหมุดส่วนหัวไปยังชิปบลูทู ธ และ mini UART ทำขึ้นบนหมุดหัว 8 และ 10

สิ่งนี้มีผลที่ตามมาจำนวนมากสำหรับผู้ใช้อินเตอร์เฟสแบบอนุกรม

/dev/ttyAMA0ก่อนหน้านี้ใช้ในการเข้าถึง UART ตอนนี้เชื่อมต่อกับบลูทู ธ
miniUART พร้อมใช้งานแล้วในวัน/dev/ttyS0นี้
ในซอฟต์แวร์ระบบปฏิบัติการล่าสุดจะมีตัว/dev/serial0เลือกอุปกรณ์ที่เหมาะสมเพื่อให้คุณสามารถแทนที่/dev/ttyAMA0ด้วย/dev/serial0และใช้ซอฟต์แวร์เดียวกันใน Pi3 และรุ่นก่อนหน้า

น่าเสียดายที่มีผลอื่น ๆ อีกหลายอย่าง: -

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.

ไม่มีการสนับสนุนสำหรับพาริตี้และปริมาณงานมี จำกัด แต่สิ่งหลังไม่ควรส่งผลต่อการใช้งานส่วนใหญ่

มีคุณสมบัตินักฆ่าเดียว "Baudrate ที่ได้จากนาฬิกาของระบบ" ซึ่งทำให้ miniUART ไร้ประโยชน์เนื่องจากนาฬิกานี้สามารถเปลี่ยนแบบไดนามิกได้เช่นหากระบบเข้าสู่โหมดพลังงานลดลงหรือในโหมดพลังงานต่ำ

การแก้ไขการ/boot/config.txtลบการพึ่งพานี้โดยการเพิ่มบรรทัดต่อไปนี้ในตอนท้าย: -

core_freq=250

วิธีนี้ช่วยแก้ไขปัญหาและดูเหมือนว่าจะมีผลกระทบเพียงเล็กน้อย SPI clock frequencyและARM Timerยังขึ้นอยู่กับเวลาของระบบ

ด้วยเหตุผลที่แปลกประหลาดบางอย่างค่าเริ่มต้นสำหรับ Pi3 ที่ใช้เคอร์เนล 4.4.9 ล่าสุดคือ DISABLE UART เพื่อเปิดใช้งานคุณจะต้องเปลี่ยน ในenable_uart=1 /boot/config.txt(วิธีนี้แก้ไขได้ด้วยcore_freqดังนั้นจึงไม่จำเป็นอีกต่อไป)

ในที่สุดหากคุณไม่ได้ใช้บลูทู ธ (หรือมีการใช้งานที่ไม่ต้องการมาก) ก็เป็นไปได้ที่จะสลับพอร์ตกลับในทรีอุปกรณ์ มีความเป็นpi3-miniuart-btและโมดูลที่อธิบายไว้ในpi3-disable-bt/boot/overlays/README


ขอบคุณ @Milliways สำหรับคำอธิบายที่ดี สิ่งที่ฉันไม่ได้ไป แต่ ... ฉันมีวิทยุโมดูลที่เชื่อมต่อกับราสเบอร์รี่ของฉันโดยใช้ UART 9600และมันชอบบอดอัตรา ดังนั้นควรทำงานถ้าฉันตั้งcore_freq=250แล้วกำหนดอัตราการส่งข้อมูลของฉันในสคริปต์ ma python? นอกจากนี้ยังจะดีถ้าคุณสามารถดูได้ที่: raspberrypi.stackexchange.com/questions/47379/…ขอบคุณ!
Georg

ฉันได้ลอง / dev / serial0 และ enable_uart = 1 ใน /boot/config.txt ด้วยรหัส wiringPi ที่ใช้ในการทำงานกับ raspberry pi 2 แต่ก็ยังไม่สามารถเริ่มการสื่อสารแบบอนุกรมได้ (เงื่อนไขการส่งคืนคือ -1) ฉันยังลอง / dev / S0 เพื่อประโยชน์ ฉันจะพลาดอะไรไป (ยังเป็นพอร์ตอนุกรมอิสระจาก raspi-config) (ทุกอย่างรวมถึงราสเบียนเป็นข้อมูลล่าสุด)
ozgeneral

1
@ OE1 หากคุณมีคำถามถามในคำถามใหม่ไม่ใช่ในความคิดเห็น
Milliways

ฉันสับสนเล็กน้อย คุณหมายความว่ามันไม่สนับสนุนความเท่าเทียมกันได้อย่างไร ฉันมีอุปกรณ์ที่ pi3 ของฉันพูดถึงและมันจะต้องมีเสมอแม้ระบบของฉันจะไม่คุยกับมัน หลังจากทำตามคำตอบและคำตอบของคุณฉันก็สามารถรับ pi3 ของฉันที่รันโปรแกรมของฉันพูดคุยกับอุปกรณ์นี้ซึ่งตั้งค่าไว้สำหรับเสมอเสมอ
THN

1
คุณสามารถเพิ่มตัวแปลง USB เป็น UART ได้ควรเป็น 3.3V ที่เข้ากันได้และไม่รองรับ 5V
MaNyYaCk

20

ในที่สุดสิ่งนี้ก็ใช้ได้กับ pi3 ของฉัน (ระบบปฏิบัติการ: debian jessie)

โปรดปฏิบัติตาม6 ขั้นตอนเหล่านี้อย่างระมัดระวัง

ขั้นตอนที่ 1 - ติดตั้ง Raspbian Jessie บนการ์ด SD และบูต Pi เมื่อเชื่อมต่อกับเครือข่ายเข้าสู่ระบบผ่านทางเทอร์มินัลหรือเดสก์ท็อปและเชลล์กำหนดค่าระบบด้วย:

sudo raspi-config

ขยายระบบไฟล์และเปิดใช้งานอนุกรมในหน้าขั้นสูงออกและรีบูต

ขั้นตอนที่ 2 - สิ่งนี้จะไม่จำเป็นถ้าคุณมีเจสซีรีลีสใหม่อัปเดตระบบด้วย:

sudo apt-get update

sudo apt-get upgrade

ขั้นตอนที่ 3 - การตั้งค่าทรีอุปกรณ์ดังต่อไปนี้:

เพิ่มทรีอุปกรณ์ใน/boot/config.txtเพื่อปิดใช้งานบลูทู ธ Raspberry Pi 3

sudo nano /boot/config.txt

เพิ่มที่ท้ายไฟล์

* ถ้าคุณต้องการเปลี่ยน blutooth เป็น miniuart port (ไม่ดี)

dtoverlay=pi3-miniuart-bt

* ถ้าคุณต้องการปิดการใช้งาน blutooth (ดี)

dtoverlay=pi3-disable-bt

ออกจากตัวแก้ไขการบันทึกการเปลี่ยนแปลงของคุณ

ขั้นตอนที่ 4 - รีบูต pi

sudo reboot

ขั้นตอนที่ 5 -

ก) เพื่อปิดการใช้งาน Serial Console แก้ไขไฟล์โดยใช้

sudo nano /boot/cmdline.txt

ลบคำว่า " console=serial0,115200" หรือ " console=ttyAMA0,115200"

ออกและบันทึกการเปลี่ยนแปลงของคุณ

b) เพื่อเปิดใช้งาน Serial Console แก้ไขไฟล์โดยใช้

sudo nano /boot/cmdline.txt

เปลี่ยนไฟล์เป็นสิ่งต่อไปนี้:

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

ออกและบันทึกการเปลี่ยนแปลงของคุณ

ขั้นตอนที่ 6 - รีบูต pi

sudo reboot

----------------- นั่นคือทั้งหมดขอให้สนุก ---------------------------- ---


ใน rpi2 ใช้งานได้และฉันเชื่อมต่อกับบอร์ดรีเลย์บลูทู ธ และส่งข้อความผ่านคำสั่ง AT แต่ฉันสามารถรับข้อมูลจาก Arduino ได้ด้วยวิธีนี้หรือไม่?
marciokoko

10

คำตอบของ Naseer นั้นถูกต้อง แต่ค่อนข้างละเอียดถ้าคุณเพิ่งจะใช้ rasbian รุ่นล่าสุด สิ่งที่ฉันต้องทำคือเพียงเพิ่มบรรทัดต่อไปนี้ใน config.txt ของฉัน (จากหน้าต่างที่คุณเสียบการ์ด SD บนพาร์ติชัน fat32):

dtoverlay=pi3-disable-bt

จากนั้นเสียบเข้ากับแล้ว pi จะพิมพ์ข้อมูลโดยตรงบนหมุดคอนโซล


ใช้งานได้อย่างไร? Bluetooth UART ไม่ได้เชื่อมต่อกับพิน GPIO!
Dmitry Grigoryev

4
@DmitryGrigoryev มันใช้ได้กับฉันใน PI ของฉัน 3
59

2
สิ่งนี้ใช้งานได้สำหรับฉันเช่นกันฉันพบว่าหัวข้อนี้ช่วยอธิบายปัญหาเล็ก ๆ น้อย ๆ : raspberrypi.org/forums/ …
Chris
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.