TEMPEST en série dans un petit port…

USB et DB9 sont dans un bateau…

Alors donc, voilà… Pour un projet, au boulot, nous avons dû acheter du matos TEMPEST… Outre son prix exorbitant (mais certainement justifié – ne serait-ce que par le poids du métal), l’engin de marque SILTEC nous a, au déballage, réservé quelques surprises…

Ses connecteurs sont, en effet, pour le moins… particuliers. Le but étant de bénéficier d’un blindage le plus efficace possible, à défaut de pouvoir se payer une cage de Faraday, il est somme toute assez logique de trouver, en lieu et place du connecteur RJ45 habituel pour la connexion réseau, des connecteurs à baïonnette pour fibre optique, de type ST (norme CEI 61754-2). En revanche, un truc auquel nous ne nous attendions pas, ce sont les connecteurs DB9, au nombre de 4, et surmontés chacun du logo USB :

USB DB9

Perplexe, je me suis demandé pendant quelques secondes s’il ne s’agissait pas tout simplement de connecteurs RS232 « classiques », mais l’explication ne tient pas la route. Tout simplement, déjà, parce que dans ce cas il n’y a aucune raison pour qu’un logo USB orne chacun de ces connecteurs, mais aussi parce qu’une DB9 sur un châssis est généralement un connecteur mâle, et que par ailleurs le clavier et la souris sont clairement des modèles récents (donc a priori USB, pas PS/2 ou série), et sont malgré tout affublés du connecteur DB9 complémentaire.

USB tombe à l’eau…

Damned. On n’avait pas prévu ça. Surtout que, comme @H_miser qui se pose la question sur twitter, j’ai aussi, finalement, quelques doutes sur la réelle supériorité du blindage d’une prise DB9 et je commençais sérieusement à me demander pour quelle raison ce choix avait été fait… Un coup d’œil au catalogue nous permet de dénicher un hub « prévu pour », et là, en regardant la bête, la raison d’être des connecteurs DB9 apparaît clairement :

Vous avez remarqué, je suppose, que ce périphérique est muni d’un couvercle. Celui-ci est destiné à éviter toute émission de signal compromettant : on insère la clé USB ou la carte mémoire, on ferme le couvercle hermétiquement, on branche le bouzin sur le port DB9, et là, on peut commencer à bosser…

Le « level » noté après la référence du boîtier correspond au niveau de protection souhaité. Le niveau B exige que les signaux compromettants soient inexploitables au-delà de 20 mètres, le A, lui, est beaucoup plus strict puisque ces signaux doivent être inexploitables à moins de 1 mètre de la machine.

Les prises utilisées sur le châssis du PC ont donc vraisemblablement pour but principal de « dé-standardiser » la connectique afin d’empêcher, ou tout au moins de rendre malaisée, la connexion directe de clés USB ou d’autres périphériques non blindés « intrinsèquement ». Je n’ai pas encore eu entre les mains le hub en question, mais je suppose (et je crois d’ailleurs le distinguer sur la photo) qu’il comporte un mécanisme de verrouillage qui impose la fermeture du capot pour permettre le fonctionnement. Ce serait logique…

Demande de devis envoyé à notre fournisseur : 1 adaptateur coûte la bagatelle de… 980 € HT ! En d’autres termes (avec par avance toutes mes excuses pour ce jeu de mots laid), ça coûte une blinde, (d’ailleurs, si quelqu’un connaît l’étymologie de cette expression, ça m’intéresse 😉 ).

Qu’est-ce qui reste ?

En attendant, il faut qu’on avance. On doit nitrater le contenu du disque dur, où un Windows 7 version polonaise a été installé par défaut, et tenter de mettre en place une version qu’on comprend un peu mieux, et surtout, qu’on aura installée nous-mêmes… Dans ces phases de tests, on n’a pas forcément besoin de se protéger des Chinois du FBI, ni des grandes oreilles américaines, et j’envisage donc de faire un simple câble de conversion avec une DB9 mâle de récup (j’en ai plein mes poubelles), et en sacrifiant une rallonge USB. Aucune doc technique en ligne, bien entendu. Le souci, c’est que déjà, le catalogue, on l’a cherché un moment (d’ailleurs si vous faites une recherche Google sur « siltec catalogue » vous avez toutes les chances de tomber en premier lieu sur la version hébergée par Wikileaks 🙂 ), alors un « service manual », faut pas rêver. Et puis bon, en polonais… Au fait, je vous ai dit que j’étais nul en polonais ?

Un petit appel à mes followers sur Twitter ne me donne pas de réponse directe, mais l’info est retweetée et @vincib me fait remarquer  qu’il n’y a pas grand risque à tester la prise. C’est vrai… Il y a des jours où, à force d’être dans le bouillon, je manque singulièrement de bon sens. A moins que ça ne soit un début d’Alzheimer…

Le lendemain, me voici donc armé :

  • d’une rallonge USB ;
  • d’une prise DB9 mâle ;
  • d’un fer à souder ;
  • de soudure RoHS (et puis quoi encore ? J’ai du stock à épuiser, moi… Et honnêtement, vous avez déjà tenté de souder avec de la brasure sans plomb ? Hmmm ?) ;
  • de tresse à dessouder ;
  • d’un multimètre ;
  • d’un oscillo portable Philips PM97 (qui au final n’aura pas beaucoup aidé), et…
  • d’une résistance de 1,5 kΩ.

J’allais oublier de mentionner la dose d’inconscience de culot nécessaire pour aller renifler le derrière d’un machin qui vaut dans les… euh, non, finalement, ça je le garde pour moi, ça frise l’indécence.

… Le DB9 !

Alors déjà, l’USB, comment ça marche ? Au niveau électrique, un connecteur type A est relativement simple : 4 broches, dont 1 alim (5 V), une masse, et 2 broches de données (D+ et D-) qui fonctionnent en mode différentiel.

Un p’tit coup de voltmètre pour trouver le 5 V (la référence de masse étant prise sur le châssis) : c’est la broche 1. Pas d’autre candidate.

Un p’tit coup d’Ohmmètre maintenant, pour trouver la masse : elle est sur la broche 2. C’est la seule qui présente une impédance nulle par rapport au châssis. Toutes les autres broches ont une impédance élevée voire infinie, aucun doute à avoir, donc.

Après, ça se complique un petit peu : comment trouver les broches de données ? C’est là que la résistance de 1,5 kΩ entre en jeu…

D’après la spécification USB 2.0, les broches D+ et D- de chaque prise « upstream » (ce terme, désignant une prise qui, dans une connexion, est plus près de l’UC, est parfaitement arbitraire et me fait un peu penser aux « sens des retours » et « sens des départs » dont nous abreuve régulièrement notre Bison Fûté national et toutes les télés et radios qui s’en font le relais) doivent être équipées de résistances de rappel (« pull-down ») d’environ 15 kΩ. Donc, lorsqu’aucun périphérique n’est connecté, D+ et D- sont au niveau bas (0V).

Comment se fait la détection d’un périphérique ? Tout simplement par la mise de l’une des 2 broches de données à un niveau électrique situé, d’après la spécification, entre 3,0 V et 3,6 V, typiquement 3,3 V. Laquelle des broches ? Eh bien tout dépend du type de périphérique. Un périphérique « low speed » mettra la broche D- à 3,3 V, et un périphérique « full speed » se signalera, lui, en mettant la broche D+ à ce niveau, comme indiqué sur le schéma ci-dessous, extrait de la page 141 (sur 650) de la spec :

full-and-low-speed-usb

Bon, alors, OKER, si j’avais voulu m’enquiquiner un peu, j’aurais fait un pont diviseur ayant les caractéristiques souhaitées, c’est à dire (avec R1 connectée au 5 V, R2 au 0 V, et le 3,3 V au point de connexion entre R1 et R2) :

  • R2/(R1+R2) = 3,3/5 (équation 1)
  • (R1*R2)/(R1+R2) = 1500 (équation 2)

Même les moins matheux d’entre vous auront reconnu un système d’équations. Je vous fais grâce de la démonstration, mais le résultat donne à peu près R1=2250 Ω et R2=4500 Ω. Comme ces valeurs n’existent pas dans les séries normalisées, on prendra des valeurs approchantes, 2,2 kΩ et 4,7 kΩ dans la série E12, par exemple, même si elle n’existe plus (au fait, je vous ai dit que j’étais un vieux c.. ?) et a été remplacée par la série E24.

Tout ça c’est pour vous dire qu’en théorie, il aurait vraiment fallu se faire braire, mais la différence la plus intéressante entre la théorie et la pratique, c’est qu’en théorie c’est pareil, mais en pratique, c’est différent. Et en pratique, le pont diviseur… ben on s’en fout, mais alors d’une force… Tout ce qu’on risque, c’est que notre détection ne marche pas, car les broches D+ et D- sont bel et bien prévues pour supporter du 5 V, donc aucun risque de destruction.

Au final, lorsqu’on fait le test avec une simple résistance de 1,5 kΩ, ça marche bien, tout au moins sur ce PC. Il m’a suffi de mettre l’une des pattes de la résistance dans la broche 1 (5 V) du connecteur, et d’essayer de mettre l’autre patte successivement dans toutes les autres broches (sauf la 2 dont on sait déjà qu’il s’agit de la masse), pour provoquer une réaction de la bête (qui détectait la connexion d’un périphérique USB) lors de l’introduction dans les broches 3 et 4.

Il reste un dernier problème : laquelle est D+, et laquelle est D- ? Le message affiché par Windows est le même, qu’il s’agisse d’un périphérique « low speed » ou « full speed ». Sous Linux, peut-être, aurais-je eu plus d’informations, avec l’apparition d’un « new full-speed USB device » ou d’un « new low-speed USB device » dans les logs. Il y a certainement un moyen également sous Windows, mais je ne le connais pas (au fait, je vous ai dit que j’étais une burne en Windows ?).

Du coup, que faire ? J’ai bien tenté d’utiliser mon oscillo, mais ce qui passe sur les lignes de données en l’absence de périphérique réel n’est pas vraiment exploitable. Du coup, j’ai forcé la chance. Je n’avais pas joué au Loto depuis, euh… En fait je ne me souviens pas avoir jamais joué, mais là aussi, ça peut être Alzheimer.

J’ai donc fabriqué un câble en prenant une hypothèse : D+ (fil vert) sur la broche 3, D- (fil blanc) sur la broche 4. Mesdames et Messieurs les jurés, à ce stade de l’histoire, je réclame votre indulgence. Je suis sûr que ce câble me vaudrait d’être pendu haut et court par n’importe quel électronicien (avec ledit câble, d’ailleurs), mais à ma décharge (électrique),  j’avais pas mes yeux…

adaptateur-usb

Et puis franchement, moi, il me va bien ce câble. Surtout que pour une fois, Murphy ne s’est pas manifesté, et que la clef USB que j’ai introduite dans le connecteur femelle USB type A a été détectée immédiatement… Si j’avais eu tout faux (inversion de D+ et D-), le périphérique n’aurait pas fonctionné, car le code NRZI utilisé par l’USB n’aurait pas pu être correctement interprété, et de plus, la détection du type de périphérique (full speed vs. low speed) aurait aussi échoué car activant la mauvaise broche… En revanche, la manip était électriquement totalement sûre, aucun risque de cramer quoi que ce soit, c’est juste une histoire d’interprétation des données dans les couches supérieures.

La morale de l’histoire…

Vous allez me dire qu’il y a peu de chances qu’un jour vous soyez confrontés au même type de matériel. Honnêtement, je ne peux pas vous donner tort… Mais peut-être serez-vous confrontés à un problème de port USB défaillant, ou de connecteur au brochage inconnu sur une carte-mère. Et puis au final, même si ça ne sert à personne, au moins, la prochaine fois, moi, je saurai où trouver l’info ! 😉

Ce contenu a été publié dans Bidouille. Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *