Comment faire fonctionner en série le Raspberry Pi3 (ou un modèle ultérieur)


Réponses:


65

Cette réponse est toujours correcte et explique plus en détail la nature des modifications, mais la plupart des utilisateurs de Raspbian actuel doivent simplement exécuter sudo raspi-configSélectionnez, Interfacing Options / Serialpuis indiquez si vous souhaitez une console série (probablement non), puis si vous souhaitez activer le matériel du port série (probablement Oui). Puis utilisez /dev/serial0dans n'importe quel code qui accède au port série.

Le BCM2837 sur les Raspberry Pi3, Pi3B +, Pi3A + et PiZeroW dispose de 2 UART (tout comme ses prédécesseurs). Toutefois, pour prendre en charge la fonctionnalité Bluetooth, le PL011 UART entièrement équipé a été déplacé des broches d'en-tête vers la puce Bluetooth et le mini-UART a été mis à disposition le broches d'en-tête 8 et 10.
(Le SOC sur le Pi4 a des UART supplémentaires, mais les mêmes 2 UART que le BCM2837 sont utilisés pour la série par défaut sur les broches 8 et 10 et Bluetooth.)

Cela a un certain nombre de conséquences pour les utilisateurs de l'interface série.

L’ /dev/ttyAMA0ancien accès à l’UART se connecte maintenant à Bluetooth.
Le miniUART est maintenant disponible sur /dev/ttyS0.
Dans le dernier logiciel du système d'exploitation , il est un /dev/serial0qui sélectionne le dispositif approprié de sorte que vous pouvez remplacer /dev/ttyAMA0avec /dev/serial0et utiliser le même logiciel sur le Pi3 et les modèles précédents.

Malheureusement, il y a un certain nombre d'autres conséquences: -

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.

La parité n'est pas prise en charge et le débit est limité, mais ce dernier ne devrait pas affecter la plupart des utilisations.

Il existe une caractéristique "tuberculeuse dérivée de l'horloge système" qui rend le miniUART inutile, car cette horloge peut changer de manière dynamique, par exemple si le système passe en mode à puissance réduite ou en mode basse consommation.

La modification de la /boot/config.txtsupprime cette dépendance en ajoutant la ligne suivante à la fin: -

core_freq=250

Cela corrige le problème et semble avoir peu d'impact. Les SPI clock frequencyet ARM Timerdépendent également de l'horloge système.

Pour des raisons étranges, la valeur par défaut pour Pi3 utilisant le dernier noyau 4.4.9 est DÉSACTIVER UART. Pour l' activer , vous devez changer enable_uart=1dans /boot/config.txt. (Cela corrige aussi le core_freqcas, ce n'est plus nécessaire.)

Enfin, si vous n'utilisez pas Bluetooth (ou utilisez des applications peu exigeantes), il est possible de permuter les ports dans l'Arborescence de périphériques. Il existe un module pi3-miniuart-btet pi3-disable-btqui sont décrits dans /boot/overlays/README.


Merci @Milliways pour cette excellente explication. Ce que je n’ai pas fait, c’est un module radio qui se connecte à ma framboise à l’aide de l’UART et qui préfère un débit en bauds de 9600. Cela devrait donc fonctionner si je configure core_freq=250puis ma vitesse de transmission dans un script Python? Aussi, serait formidable si vous pouviez jeter un oeil à: raspberrypi.stackexchange.com/questions/47379/… Merci!
Georg

J'ai essayé / dev / serial0 et enable_uart = 1 dans /boot/config.txt, avec un code câblageIP qui fonctionnait avec framboise pi 2, mais ne parvient toujours pas à établir une communication série (la condition de retour est -1). J'ai aussi essayé / dev / S0 en vain. Que pourrais-je manquer? (libère également le port série de raspi-config). (tout y compris le Raspbian est à jour)
lundi

1
@ OE1 Si vous avez une question, posez-la dans une nouvelle question, pas dans les commentaires.
Milliways

Je suis un peu confus. Comment voulez-vous dire que cela ne supporte pas la parité? J'ai un appareil avec lequel ma pi3 parle et il doit avoir la parité MÊME sinon mon système ne lui parlera pas. Après avoir suivi votre réponse et la réponse de naseer, j’ai pu faire parler mon programme pi3 avec succès sur cet appareil dont la parité est réglée sur EVEN.
ThN

1
Pourriez-vous ajouter que le convertisseur USB vers UART devrait être compatible 3.3V et non compatible 5V?
MaNyYaCk

20

enfin cela a du travail pour ma pi3 (os: debian jessie)

veuillez suivre ces 6 étapes avec soin.

Étape 1 - Installez Raspbian Jessie sur une carte SD et démarrez le Pi lorsqu'il est connecté à un réseau Connectez-vous via un terminal, un ordinateur de bureau et un shell Configurez le système avec:

sudo raspi-config

Développez le système de fichiers et activez le port série sur la page avancée, quittez et redémarrez.

Étape 2 - cela ne sera pas nécessaire si vous avez la nouvelle version de Jessie. Mettez à jour le système avec:

sudo apt-get update

sudo apt-get upgrade

Étape 3 - Paramètres de l’arborescence de périphériques, comme ci-dessous:

Ajoutez une arborescence de périphériques à /boot/config.txt pour désactiver le bluetooth Raspberry Pi 3.

sudo nano /boot/config.txt

Ajouter à la fin du fichier

* si vous voulez changer le blutooth en miniuart (mauvais)

dtoverlay=pi3-miniuart-bt

* si vous voulez désactiver le blutooth (bon)

dtoverlay=pi3-disable-bt

Quittez l'éditeur en enregistrant vos modifications.

Étape 4 - redémarrez le pi

sudo reboot

étape 5 -

a) pour désactiver la console série, éditez le fichier à l'aide de

sudo nano /boot/cmdline.txt

supprimer le mot phase " console=serial0,115200" ou " console=ttyAMA0,115200"

Quitter et sauvegarder vos modifications

b) Activer la console série, éditez le fichier en utilisant

sudo nano /boot/cmdline.txt

Modifiez le fichier comme suit:

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

Quitter et sauvegarder vos modifications

Étape 6 - redémarrez le pi

sudo reboot

----------------- c'est tout, amusez-vous ---------------------------- ---


Sur rpi2 cela fonctionne et je l’ai connecté à une carte relais Bluetooth et lui envoie des messages via des commandes AT. Mais puis-je recevoir les données d'un arduino de cette façon?
Marciokoko

10

La réponse de Naseer est correcte mais un peu complexe si vous venez de flasher le dernier rasbian. Tout ce que j'avais à faire, c'était simplement d'ajouter la ligne suivante à mon fichier config.txt (par exemple, dans les fenêtres où vous branchez la carte SD sur la partition fat32):

dtoverlay=pi3-disable-bt

Ensuite, branchez-le, et le pi imprimera directement des éléments sur les broches de la console.


Comment cela peut-il fonctionner? Bluetooth UART n'est même pas connecté aux broches GPIO!
Dmitry Grigoryev

4
@DmitryGrigoryev Cela fonctionne pour moi sur mon PI 3.
Le

2
Cela a fonctionné pour moi aussi, j'ai trouvé que ce fil de discussion avait permis de clarifier quelques petits problèmes: raspberrypi.org/forums/…
Chris
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.