Come faccio a far funzionare in serie il Raspberry Pi3 (o modello successivo)


Risposte:


65

Questa risposta è ancora corretta e spiega in modo più dettagliato la natura delle modifiche, ma la maggior parte degli utenti dell'attuale Raspbian deve semplicemente eseguire sudo raspi-configSeleziona Interfacing Options / Serialquindi specificare se si desidera una console seriale (probabilmente no), quindi se si desidera abilitare l'hardware della porta seriale (probabilmente sì). Quindi utilizzare /dev/serial0in qualsiasi codice che accede alla porta seriale.

Il BCM2837 su Raspberry Pi3, Pi3B +, Pi3A +, PiZeroW ha 2 UART (come i suoi predecessori), tuttavia per supportare la funzionalità Bluetooth l'UART PL011 completamente descritto è stato spostato dai pin di intestazione al chip Bluetooth e il mini UART reso disponibile su pin di intestazione 8 e 10.
(Il SOC su Pi4 ha UART aggiuntivi, ma gli stessi 2 UART di BCM2837 sono usati per il seriale predefinito sui pin 8 e 10 e Bluetooth.)

Ciò ha una serie di conseguenze per gli utenti dell'interfaccia seriale.

Il /dev/ttyAMA0precedentemente utilizzato per accedere a UART ora si collega a Bluetooth.
Il miniUART è ora disponibile su /dev/ttyS0.
Nella più recente del software del sistema operativo c'è un /dev/serial0che seleziona il dispositivo appropriato in modo da poter sostituire /dev/ttyAMA0con /dev/serial0e utilizzare lo stesso software sul Pi3 e modelli precedenti.

Sfortunatamente ci sono una serie di altre conseguenze: -

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.

Non esiste supporto per la parità e la velocità effettiva è limitata, ma quest'ultima non dovrebbe influire sulla maggior parte degli usi.

C'è una caratteristica killer "Baudrate derivato dall'orologio di sistema" che rende inutile il miniUART in quanto questo orologio può cambiare dinamicamente, ad esempio se il sistema passa a potenza ridotta o in modalità a bassa potenza.

La modifica di /boot/config.txtrimuove questa dipendenza aggiungendo la seguente riga alla fine: -

core_freq=250

Questo risolve il problema e sembra avere un impatto limitato. I SPI clock frequencye ARM Timerdipendono anche dall'orologio di sistema.

Per qualche bizzarra ragione, l'impostazione predefinita per Pi3 che utilizza l'ultimo kernel 4.4.9 è DISABILITARE UART. Per abilitarla è necessario modificare enable_uart=1in /boot/config.txt. (Questo risolve anche il problema, core_freqquindi non è più necessario.)

Infine, se non si utilizza il Bluetooth (o si hanno usi poco impegnativi) è possibile scambiare nuovamente le porte nella Struttura dei dispositivi. C'è un modulo pi3-miniuart-bte pi3-disable-btche sono descritti in /boot/overlays/README.


Grazie @Milliways per l'ottima spiegazione. Quello che non ho fatto però ... Ho un modulo radio che si collega al mio lampone usando UART e preferisce un baud rate di 9600. Quindi dovrebbe funzionare se imposto core_freq=250e quindi configuro la mia velocità di trasmissione nello script ma python? Inoltre, sarebbe fantastico se potessi dare un'occhiata a: raspberrypi.stackexchange.com/questions/47379/… Grazie!
Georg,

Ho provato / dev / serial0, e enable_uart = 1 in /boot/config.txt, con un codice cablaggio che funzionava con raspberry pi 2, ma non riesce ancora ad avviare la comunicazione seriale (la condizione di ritorno è -1). Ho anche provato / dev / S0 inutilmente. Cosa potrei perdere? (anche liberata la porta seriale da raspi-config). (tutto incluso raspbian è aggiornato)
ozgeneral

1
@ OE1 Se hai una domanda, ponila in una nuova domanda, non in Commenti.
Milliways,

Sono un po 'confuso. Come intendi che non supporta la parità? Ho un dispositivo con cui parla pi3 e deve avere ANCHE parità o il mio sistema non ci parla. Dopo aver seguito la tua risposta e la risposta del naseer, sono stato in grado di far funzionare il mio pi3 con il mio programma per parlare in MODALITÀ SUCCESSIVA con questo dispositivo impostato su PARI.
Giovedì

1
Potresti aggiungere che il convertitore da USB a UART dovrebbe essere compatibile con 3.3V e non con 5V.
MaNyYaCk,

20

finalmente questo ha funzionato per il mio pi3 (os: debian jessie)

seguire attentamente questi 6 passaggi .

Passaggio 1: installare Raspbian Jessie su una scheda SD e avviare il Pi quando connesso a una rete Accesso tramite terminale o desktop e shell Configurare il sistema con:

sudo raspi-config

Espandere il filesystem e abilitare seriale su pagina avanzata, uscire e riavviare.

Passaggio 2: questo non è necessario se si dispone di jessie new release Aggiornare il sistema con:

sudo apt-get update

sudo apt-get upgrade

Passaggio 3: impostazioni dell'albero dei dispositivi come di seguito:

Aggiungi la struttura dei dispositivi a /boot/config.txt per disabilitare il bluetooth Raspberry Pi 3.

sudo nano /boot/config.txt

Aggiungi alla fine del file

* se vuoi cambiare il blutooth alla porta miniuart (cattivo)

dtoverlay=pi3-miniuart-bt

* se vuoi disabilitare il blutooth (buono)

dtoverlay=pi3-disable-bt

Esci dall'editor salvando le modifiche.

Passaggio 4: riavviare il pi

sudo reboot

passaggio 5 -

a) per disabilitare la console seriale modificare il file usando

sudo nano /boot/cmdline.txt

rimuovere la parola fase " console=serial0,115200" o " console=ttyAMA0,115200"

Esci e salva le modifiche

b) per abilitare la console seriale modificare il file usando

sudo nano /boot/cmdline.txt

Modificare il file nel seguente:

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

Esci e salva le modifiche

Passaggio 6: riavviare il pi

sudo reboot

----------------- questo è tutto, divertiti ---------------------------- ---


Su rpi2 funziona e l'ho collegato a una scheda relè bluetooth e gli invia messaggi tramite comandi AT. Ma posso ricevere dati da un arduino in questo modo?
marciokoko,

10

La risposta di Naseer è corretta ma un po 'elaborata se hai appena mostrato l'ultima rasbian. Tutto quello che dovevo fare è solo aggiungere la seguente riga al mio config.txt (ad esempio da Windows in cui si collega la scheda SD sulla partizione fat32):

dtoverlay=pi3-disable-bt

Quindi collegalo e il pi stamperà direttamente le cose sui pin della console.


Come può funzionare? Bluetooth UART non è nemmeno collegato ai pin GPIO!
Dmitry Grigoryev,

4
@DmitryGrigoryev Funziona per me sul mio PI 3.
ThN

2
Questo ha funzionato anche per me, ho scoperto che questo thread ha contribuito a chiarire alcuni piccoli problemi: raspberrypi.org/forums/…
Chris,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.