Pour ceux qui veulent utiliser le port série du Raspberry Pi, la chose ne parait pas forcément simple, surtout depuis l’apparition du module Bluetooth qui a entrainé une modification dans la gestion des ports. Cet article traduit avec l’accord d’ABElectronics permet de mieux comprendre le fonctionnement.
Au sommaire :
Les ports série du Raspberry Pi
Les modèles B, B+ et Pi Zero W de Raspberry Pi 3 contiennent deux contrôleurs UART qui peuvent être utilisés pour la communication série, les mini UART et le PL011. Par défaut, le mini UART est mappé au TXD (GPIO 14) et au RXD (GPIO 15) sur le connecteur GPIO 40 broches et l’UART PL011 est utilisé pour le module Bluetooth/Wireless. Mais ces deux modules peuvent être reliés au port GPIO.
Le mini UART
Le port mini UART est accessible via le périphérique /dev/ttyS0 sous Linux. Un des problèmes rencontrés avec le contrôleur mini UART est que sa vitesse de transmission est liée à la fréquence centrale du CPU. Or la fréquence du CPU change en fonction de la charge du processeur, ce qui fait varier la vitesse de transmission du contrôleur UART. Cela occasionne des problèmes car les appareils connectés au port série attendent une vitesse de transmission constante pendant la communication.
Pour résoudre ce problème, la fréquence du noyau CPU doit être rendue fixe, ce qui peut soit limiter la vitesse du Raspberry Pi, soit augmenter la consommation d’énergie et la chaleur produite (en fonction de la vitesse à laquelle la fréquence d’horlogedu noyau est réglée).
L’UART PL011
Le contrôleur mini UART possède un tampon FIFO plus petit que celui du contrôleur UART PL011 (un vrai contrôleur hardware). Cela peut causer des problèmes à des vitesses de transmission élevées car la perte de caractères devient plus probable.
Le contrôleur UART PL011 n’est pas dépendant de la fréquence du CPU. Cela signifie que la vitesse de transmission reste la même quelle que soit la vitesse CPU. Le contrôleur UART PL011 intègre également d’autres fonctions qui ne sont pas présentes dans le mini UART, comme la détection d’erreur de trame, la détection de perte de connexion, la gestion du temps d’interruption de réception et le support des bits de parité.
Le principal inconvénient lorsqu’on utilise le contrôleur UART PL011, c’est qu’il désactive le module Bluetooth. Il devient alors impossible d’utiliser les fonctions Bluetooth des Raspberry Pi 3 et Zero W.
Il vaut mieux utiliser le contrôleur UART PL011 dans toutes les situations où une connexion de données fiable est nécessaire, ou lorsque la consommation d’énergie et la vitesse du processeur sont une priorité.
Si vous avez besoin d’utiliser le module Bluetooth sur le Raspberry Pi, il faut alors utiliser le mini contrôleur UART.
Utilisation du port Mini UART
Depuis la sortie de Raspbian Stretch en novembre 2018, le mini port UART peut être activé en utilisant l’utilitaire raspi-config.
Etape 1 – Installez Raspbian Stretch ou une version ultérieure sur une carte SD et démarrez le Pi une fois connecté à un réseau.
Connectez vous en terminal (en mode texte ou ouvrez un terminal sur le bureau)
Démarrez l’utilitaire de configuration système avec :
1 |
sudo raspi-config |
Étape 2 – Sélectionnez « 5 options d’interface« .
Etape 3 – Sélectionner « P6 Série ».
Etape 4 – Un écran vous demande si vous souhaitez qu’un écran de login soit accessible via le port série. Si vous voulez contrôler le Raspberry Pi depuis un terminal connecté au port série, sélectionnez Oui. Si vous utilisez le port série pour contrôler d’autres périphériques série, sélectionnez Non.
Etape 5 – Si vous avez sélectionné Non, un autre écran vous demandera si vous souhaitez que le matériel du port série soit activé. Sélectionnez Oui.
Etape 6 – Sur l’écran principal de configuration de raspi-config, sélectionnez « Terminer » et redémarrez votre Raspberry Pi. Le port série mini UART doit maintenant être activé.
Utilisation du port UART PL011
Pour les versions de Raspbianpostérieures au 18 mars 2016, il existe un fichier dans le device tree appelé pi3-miniuart-bt qui ordonne au Raspberry Pi de désactiver le module Bluetooth et de relier l’UART PL011 aux broches 14 et 15 du connecteur GPIO.
Etape 1 – Connectez vous en terminal (en mode texte ou ouvrez un terminal sur le bureau)
Etape 2 : Réglage du device tree comme ci-dessous :
Ajoutez pi3-miniuart-bt au fichier /boot/config.txt pour désactiver le module Bluetooth.
1 |
sudo nano /boot/config.txt |
Ajouter à la fin du fichier
1 |
dtoverlay=pi3-miniuart-bt |
Etape 3 : Quittez l’éditeur en sauvegardant vos modifications (CTRL X) et ensuite :
1 |
sudo reboot |
Désactivation de la console série
La console série sur Raspbian Stretch est activée par défaut. Pour utiliser le port UART avec des périphériques série, vous devez désactiver la console.
Etape 1 : Pour désactiver la console série, vous devez éditer le fichier /boot/cmdline.txt
1 |
sudo nano /boot/cmdline.txt |
Étape 2 : Trouvez le texte suivant et supprimez-le :
1 |
console=serial0, 115200 |
Etape 3 : Quittez l’éditeur en sauvegardant vos modifications (CTRL X) et ensuite :
1 |
sudo reboot |
Maintenant que la console série est désactivée, vous pouvez accéder au port série UART via /dev/ttyAMA0.
Conclusion
J’espère que cet article va clarifier les choses pour ceux qui s’arrachent les cheveux quand il faut utiliser le port série du RaspberryPi.
Un grand merci à ABElectronics qui a accepté la traduction de cet article pour les lecteurs de framboise314 🙂
Vous pouvez relire mon précédent article à ce sujet sur https://www.framboise314.fr/le-port-serie-du-raspberry-pi-3-pas-simple/
Sources
https://www.abelectronics.co.uk/kb/article/1035/raspberry-pi-3-and-zero-w-serial-port-usage
http://infocenter.arm.com/help/topic/com.arm.doc.ddi0183f/DDI0183.pdf
Intéressant.
Merci
merci 🙂
juste pour signaler une coquille : « UART PL011 n’est pas … » dépendant
Article intéressant.
Bonjour
Merci je regarde ?
J’utilise Deepl pour les traducs et je relis pour améliorer le texte… mais parfois j’en rate des bouts ?
Bonjour Francois,
Merci pour cet article très interessant, comme d’habitude 😉
Je ne comprend pas très bien la derniere partie : « Désactivation de la console série »
Ceci est vrai si on l’a activé dans raspi-config, afin de controler le Raspberry Pi avec un autre pc relié en série, non ?
J’avais suivi ton tuto sur la nadhat, il y a quelques mois, et il n’y avait pas des details la dessus, mais tout fonctionne parfaitement.
Une idée ?
Merci par avance 🙂
Bonne continuation
Après quelques recherches, je n’ai toujours rien trouvé la dessus.
Personne n’a une idée ?
Bonjour Damien
Par défaut le noyau envoie des infos sur le port série pour debuggage
Si on n’en a pas besoin on peut désactiver
Bonjour,
Merci pour votre reponse.
Je comprend mieux.
Si on ne le desactive pas, le raspberry risque donc d’envoyer des infos au peripherique connecté ?
c’est ça et la ligne série est connectée en console. Il faut la libérer si on veut l’utiliser
Merci pour ces infos 🙂
Bonjour,
Dans un projet pour le partage d’alectricité entre particuliers (sunshare), nous essayons de développer un shield pour décoder la téléinformation linky avec le raspberry. j’avais deja une extension en usb mais voulais simplifier le montage……pa ta tra….le signal est mal décodé par le port série meme avec la modif proposée. grosse déception.
merci de l’info qui m’a beaucoup aidé. Merci aussi pour l’article sur sunshare.
A bientot.
Salut à tous.
Si je comprends bien, le port série s’utilise avec un câble RS232.
Sur PC, c’est ce que l’on nomme « port com ».
N’est-ce pas en voie de disparition et est remplacé par du USB ?
@+
Oui et non
Pour le grand public, l’USB remplace tout (ou presque)
Mais en electronique, on aime les choses simple, qui fonctionnent à tous les coups. Et on a rarement besoin de gros debits.
Les protocoles les plus simples sont presque toujours utilisés pour quasiment tous les equipements.
Bonjour,
est-il possible de gérer deux ports séries ?
par exemple, si on veut mettre un GPS et un module Sigfox. Les deux communicants avec le raspi sur le port série, comment gérer tout ça ?
avec un adaptateur USB ?
on a un ballon à envoyer et à récupérer surtout !! 😉
Merci !
Et bravo pour le site !!
Bonjour
a ma connaissance il y a un seul port RxTx UART sur le Raspberry Pi
il est possible d’utiliser des adaptateurs USB – Série comme celui ci
https://www.amazon.com/dp/B0007T27H8/?tag=stackoverfl08-20
c’est à tester
ou cette carte qui convertit un bus spi ou i2c en port série
https://www.sparkfun.com/products/retired/9981
mais je n’ai pas testé non plus
encore ceci
https://www.kickstarter.com/projects/202549516/uart-hat-extra-124-uart-for-raspberry-pi-zero-b-2b/posts/1752029
http://www.pridopia.co.uk/rs-pi-i2c-uart.html
http://www.pridopia.co.uk/rs-pi-i2c-4uart-v2.html
tenez moi au courant
Bonjour,
Je cherche depuis un petit bout de temps comment faire communiquer ma RPi zero w avec une Arduino, et cet article m’a l’air de bien résumer ce que j’ai trouvé au cours de mes recherches.
Mais même en suivant ces consignes, cela ne fonctionne pas… Est-ce bien le bon protocole pour faire communiquer ces deux cartes entre elles, ou est-ce que je me serais trompé d’article ?
Merci d’avance !
Bonjour,
En effet, c’est bien le bon protocole.
Pour te simplifier la vie, je te conseil dans un premier temps de connecter le Raspberry Pi Zero et l’Arduino avec un câble usb (et un adaptateur si c’est un zero) àfin d’eviter les conversions 3.3v-5v et les possibles problèmes.
Et je te conseil de lire cet article : https://www.framboise314.fr/envoyer-de-lhexadecimal-sur-le-port-serie-du-raspberry-pi/
Il suffit d’adapter un peu le code python et de choisir le port serie de l’arduino sur le Pi.
Et tu peux chercher sur Qwant : arduino raspberry rs232 ou arduino raspberry uart
Il y a pleins d’exemples
Don courage
Ping : Montage d'une interface Zeta | F5NLG – SvxLink –
Ah ! Voilà un article fort utile !
J’utilisais le Mini UART sans le savoir depuis le début et j’avais un comportement…inconsistant.
Pas étonnant au vu de ce que je viens de lire.
Merci pour l’info !
Merci 👍
Bonjour Monsieur, merci pour votre article très instructif, j’aurais néanmoins une petite question. J’utilise une raspberry pi Zero WH, et je voudrais savoir si la commande : « dtoverlay=pi3-miniuart-bt » doit être modifié pour la partie pi3.
Dans l’attente de votre réponse, je vous souhaite une bonne journée.
J’ai la même question tu as la réponse ?
Sinon pour j’ai mis dtoverlay=pi0-miniuart-bt et si fonctionne pas je ferai un essai avec dtoverlay=pi3-miniuart-bt et encore après si besoin dtoverlay=pi0w-miniuart-bt