Où sommes nous ?

Retour

Adaptateur RS-232 pour la console du Banana

Le BananaPI dispose de plusieurs ports série comme nous avons pu le voir avec notre montage de téléinformation. L'un d'entre eux à un rôle particulier : l'uart0 / J11, qui est utilisé comme console.
Pour ceux qui l'ignore, il s'agit d'un terminal privilégié des systèmes multi-utilisateurs qui reçoit les messages issus du kernel (debug) dont ceux générés au boot, avant même que syslog ne démarre. Et lorsque l'on bidouille le dit kernel , ce qui arrive souvent avec Gentoo ne serait-ce que pour tester une nouvelle version ou changer des options, avoir accès à ces informations est tous simplement indispensable.

L'utilisation de cette console n'est pas réservée aux systèmes headless, car un kernel peut planter avant même d'avoir initialisé la console graphique sur un écran LCD ou sur l'HDMI.

Indispensable entre autre lorsque le système ne boote pas après une mise-à-jour système ou sur une SD nouvellement gravée.

Problème avec les signaux électriques

Les signaux délivrés par le Banana utilisent une logique 0 / 3,3v et non +/-12v classiques des RS-232 de PC. Il faut donc utiliser un convertisseur de niveau.

Note : le montage décrit ci-dessous fonctionne, mais ne fournit aucune protection. Si l'on a à acheter des composants, si l'on n'est pas sûr de la qualité des signaux du terminal connecté, un montage à base de MAX3232CPE est préférable.

Voir en bas de cette page.

Le plus courant est d'utiliser un câble Série TTL -> USB, mais il faut pouvoir se permettre d'attendre 3 semaines qu'il vient de HongKong (n'encourageons pas les distributeurs européens dans leurs marges à fois 15 ou fois 20, trop, c'est trop !). Le petit montage décrit dans ce billet ne prendra que quelques minutes à souder, ne coutera que quelques €uros (rien dans mon cas, c'est une fois plus de la récup) ... mais il faut avoir une machine qui dispose encore d'une RS-232.

Etage sortant

Voici le schéma transformant les signaux sortant du Banana (donc au 3,3v) en niveau RS-232.

Comment ça marche ?

Reste plus qu'à calculer la valeur des résistances.

Un peu de théorie

Voici une explication que m'a donné gwgidaz sur le forum de futura-sciences (site que je recommande chaudement) :

Tant que la tension collecteur est nettement supérieure à VCE sat , le transistor fonctionne en "linéaire" : Le courant collecteur est beta fois supérieur au courant de base.
Au fur et à mesure qu'on augmente le courant base, le courant collecteur augmente , et la tension sur la résistance collecteur augmente. Il vient un moment où la tension sur la résistance collecteur devient presque égale à la tension d'alimentation. Alors, il ne reste presque plus rien pour le transistor: Ce dernier ne peut plus amplifier convenablement en courant, et son beta s'écroule. On dit qu'il est saturé.

Donc, le phénomène de saturation dépend des valeurs des résistances ! On peut saturer un transistor avec des courants collecteur très faibles, il suffit de placer des résistances base et collecteur élevées. Mais si on utilise une résistance collecteur élevée, la sortie du transistor ne pourra plus fournir le courant nécessaire pour faire fonctionner le système qu'il est censé attaquer.

Ce qui donne

J'utilise comme transistor un C1740 récupéré sur un écran HS : un petit tour dans son datasheet donne les informations suivantes.

Ic = 50 mA
Ib = 5 mA
Vce(sat) = 0.4v
Vbe(sat) = 1v

J'ai donc mis RC=1kΩ ce qui correspond à Ic=4,6 mA ( (5v - Vcesat)/Rc ) et me donne Rb=5kΩ. Rp est une résistance de protection (5kΩ) qui ... protège notre circuit en cas de problème avec le cable de la RS-232.

Etage entrant

L'étage entrant ressemble à son frère ...

La diode D1 est ajoutée pour protéger le transistor des signaux négatifs issus de la RS-232 : en effet, un niveau haut peut être représenté par une tension pouvant descendre jusqu'à ... -25v, tension qui détruirait à coup sûr la jonction Base-Eméteur. Dans ce cas, la diode devient passante et limite cette tension à environ 0,6v (chute de tension de la diode).

Calcul des résistances

Pour ne pas trop charger le PMU du Banana, j'ai décidé de limiter Ic à 5 mA ce qui fait que Rc = 580Ω : (3,3v - Vcesat)/Ic

La plage de valeur des tensions d'un niveau bas d'une RS-232 allant de +3v à +25v il est difficile de faire des calculs empiriques. Bref, j'ai choisie Rb=10k ce qui permet d'avoir un Ic suffisant pour saturer même avec de base tensions. A augmenter si la RS délivre du 25v.

Côté logiciel

Par défaut, la connection série se fait à 115200 bauds, 8 bits, sans parité, 1 bit de stop. On peut le configurer par un :

stty 115200 cs8 -parenb -cstopb -hupcl -F /dev/ttyS0

On peut évidemment visualiser les informations par un simple

cat /dev/ttyS0

mais, on préférera le classique minicom, ce qui permettra d'interagir avec la carte.

login ...

A la fin des scripts d'init, le système initialise getty pour les liaisons séries (il s'agit du programme qui affiche l'invite de login) ... il faut vérifier que la vitesse configurée correspond bien à celle de la console. Faute de quoi, plus rien ne s'affichera jusqu'au prochain reboot, que ce soit la mire de login ou les messages lors du shutdown.

Il faut donc vérifier la ligne suivante dans le fichier /etc/inittab

s0:12345:respawn:/sbin/agetty -L 115200 ttyS0 vt100

Le résultat

Voici ce que ça donne pour Torchwood.

Avec un MAX3232CPE

Le montage à base de transistor fonctionne ... mais reste extrêmement sensible aux parasites. Avec une console à 115200 bd (vitesse par défaut d'uBoot), la connexion est erratique jusqu'à parfois afficher ... n'importe quoi. C'est pourquoi, je profite de la refonte de mon système pour sécuriser ma console et passer au MAX3232.

D'une simple alimentation 3,3V et de 5 condensateurs, le MAX3232CPE converti les signaux RS-232 pour qu'ils soient acceptables par les UART de nos microcontroleurs en 3,3V donc.

Il propose 2 étages de conversion, mais nous n'en utiliserons qu'un seul pour la console : le second pourrait être utilisé pour un second terminal sur l'UART7 exposé sur le port J12 du BananaPI. Dans mon cas, je réserve cet UART pour la téléinfo.

Convertisseur USB -> RS-232 (CH 340)

Pour quelques centimes, ce circuit très courant permet d'exposer la console de notre PI sur un port USB de l'hôte. Pas besoin de soudure, on branche, ça marche.

Et parmi tous les modèles disponibles, j'ai choisi le minimaliste HW-624.

Basculé en 3.3v

Les modèles les plus évolués disposent d'un régulateur embarqué et d'un cavalier permettant de choisir le voltage. Sur le HW-624, point de régulateur, juste un ""Solder Jumpers" qui permet de sélectionner soit le 5 volt fourni par l'USB, soit une tension fournie par le SBC ... ici du 3.3 volt.

La carte est configurée par défaut sur l'USB : il va donc falloir jouer du fer à souder pour obtenir le 3.3 volt !

L'autre inconvénient est que cette tension n'est fournie que lorsque le SBC est allumé, du coup il en va de même de l'exposition du port USB. Il va donc falloir avoir de bons réflexes pour intercepter l'u-boot du PI.


Visitez :
La liste de nos voyages
Nos sorties Ski et rando
Copyright Laurent Faillie 2001-2024
N'oubliez pas d'entrer le mot de passe pour voir aussi les photos perso.
Contactez moi si vous souhaitez réutiliser ces photos et pour les obtenir avec une plus grande résolution.
Visites durant les 7 derniers jours Nombre de visites au total.

Vous pouvez laissez un commentaire sur cette page.