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 plantera avant même d'avoir initialisé la sortie graphique.

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.

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.


Visitez :
La liste de nos voyages
Nos sorties Ski et rando
Copyright Laurent Faillie 2001-2017
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.