Як зробити послідовну роботу з Raspberry Pi3 (або більш пізньою моделлю)


Відповіді:


65

Ця відповідь все ще правильна, і більш докладно пояснює характер змін, але більшість користувачів поточного Raspbian слід просто запустити sudo raspi-configSelect, Interfacing Options / Serialа потім вказати, чи потрібно послідовна консоль (можливо, ні), то якщо ви хочете, щоб апаратне забезпечення послідовного порту було увімкнено (можливо так). Потім використовуйте /dev/serial0будь-який код, який має доступ до послідовного порту.

BCM2837 на Raspberry Pi3, Pi3B +, Pi3A +, PiZeroW має 2 UART (як і попередники), однак для підтримки функціональності Bluetooth повнофункціональний PL011 UART був переміщений із штифтів заголовка до мікросхеми Bluetooth, а міні-UART став доступним на заголовки шпильками 8 та 10.
(SOC на Pi4 має додаткові UART, але такі ж 2 UART, як BCM2837, використовуються для серійних за замовчуванням на штифтах 8 та 10 та Bluetooth.)

Це має ряд наслідків для користувачів послідовного інтерфейсу.

/dev/ttyAMA0Раніше використовуваний для доступу до UART в даний час підключається до Bluetooth.
Тепер 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.

Немає підтримки паритету і пропускна здатність обмежена, але остання не повинна впливати на більшість застосувань.

Існує одна вбивча функція "Боудрат, похідний від системних годин", яка робить miniUART марним, оскільки цей годинник може динамічно змінюватися, наприклад, якщо система переходить у зменшену потужність або в режим низької потужності.

Змінення /boot/config.txtусуває цю залежність, додавши наступний рядок наприкінці: -

core_freq=250

Це вирішує проблему і, мабуть, мало впливає. SPI clock frequencyІ ARM Timerтакож залежить від внутрішнього годинника.

З якоїсь химерної причини за замовчуванням для Pi3, використовуючи останнє ядро ​​4.4.9, є ВИМКНЕННЯ UART. Щоб включити її потрібно змінити enable_uart=1в /boot/config.txt. (Це також виправляється, core_freqтому це більше не потрібно.)

Нарешті, якщо ви не користуєтесь Bluetooth (або не вимагаєте використання), можна поміняти порти назад у Дереві пристроїв. Існує pi3-miniuart-btі pi3-disable-btмодуль , які описані в /boot/overlays/README.


Дякую @Milliways за чудове пояснення. Що я ще не ходив ... У мене є радіомодуль, який підключається до моєї малини за допомогою UART, і він віддає перевагу швидкості передачі даних у діапазоні 9600. Так що це має спрацювати, якщо я встановити, core_freq=250а потім налаштувати свою швидкість передачі в сценарій ma python? Крім того, було б чудово, якби ви подивилися на: raspberrypi.stackexchange.com/questions/47379/… Дякую!
Георг

Я спробував / dev / serial0, та enable_uart = 1 в /boot/config.txt, з кодом wiringPi, який працював з малиною pi 2, але він все ще не вдається ініціювати послідовний зв’язок (умова повернення -1). Я також намагався / dev / S0 безрезультатно. Що я можу бракувати? (також звільнений послідовний порт від raspi-config). (все, включаючи raspbian, є актуальним)
ozgeneral

1
@ OE1 Якщо у вас є питання, задайте його в новому запитанні, а не в коментарях.
Міллівейс

Я мало розгублений. Як це означає, що він не підтримує паритету? У мене є пристрій, з яким розмовляє pi3, і він повинен мати ВІДНОСІМ паритет, або моя система не буде з ним розмовляти. Після вашої відповіді та відповіді naseer, я зміг домогтися того, щоб моя програма pi3 запустила свою розмову в програмі, Успішно на цей пристрій, встановлений для паритету ВСІМ.
Чт

1
Чи можете ви додати, що перетворювач USB в UART повинен бути сумісний з 3,3 В, а не 5 В.
MaNyYaCk

20

нарешті, це отримало роботу для мого pi3 (os: debian jessie)

будь ласка уважно виконайте ці 6 кроків .

Крок 1 - Встановіть Raspbian Jessie на SD-карту і завантажте Pi при підключенні до мережі Вхід через термінал або робочий стіл та оболонку. Налаштуйте систему за допомогою:

sudo raspi-config

Розгорніть файлову систему та увімкніть послідовне використання на розширеній сторінці, вихід та перезавантаження.

Крок 2 - це не буде необхідним, якщо у вас є новий реліз jessie Оновіть систему за допомогою:

sudo apt-get update

sudo apt-get upgrade

Крок 3 - Налаштування дерева пристрою, як показано нижче:

Додайте дерево пристрою до /boot/config.txt, щоб відключити Raspberry Pi 3 Bluetooth.

sudo nano /boot/config.txt

Додайте в кінці файлу

* якщо ви хочете змінити blutooth на порт miniuart (погано)

dtoverlay=pi3-miniuart-bt

* якщо ви хочете вимкнути blutooth (добре)

dtoverlay=pi3-disable-bt

Вийдіть із редактора, зберігаючи зміни.

Крок 4 - перезавантажте пі

sudo reboot

крок 5 -

а) відключити редагування файлу послідовної консолі за допомогою

sudo nano /boot/cmdline.txt

видалити фазу слів " console=serial0,115200" або " console=ttyAMA0,115200"

Вийдіть і збережіть свої зміни

б) увімкнути редагування файлу за допомогою послідовної консолі

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 - перезавантажте пі

sudo reboot

----------------- ось і все, веселось ---------------------------- ---


На rpi2 це працює, і я його підключив до плати Bluetooth-реле і надсилаю йому повідомлення за допомогою команд AT. Але чи можу я отримувати дані від ардуїно таким чином?
marciokoko

10

Відповідь Насера ​​правильна, але трохи витончена, якщо ви просто прошивали останню расьбію. Все, що мені потрібно було зробити, - це просто додати наступний рядок до мого config.txt (наприклад, з Windows, де ви підключаєте SD-карту до розділу fat32):

dtoverlay=pi3-disable-bt

Потім підключіть його, і пі буде безпосередньо друкувати речі на штифтах консолі.


Як це може працювати? Bluetooth UART навіть не підключений до штифтів GPIO!
Дмитро Григор’єв

4
@DmitryGrigoryev Це працює для мене на моєму PI 3.
ThN

2
Це спрацювало і для мене, я виявив, що ця тема допомогла з’ясувати кілька невеликих питань: raspberrypi.org/forums/…
Кріс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.