Hacker les chargeurs Dell, ou comment utiliser d'anciens chargeurs sur des nouveaux modèles

16 janv. 2022

Bonjour à tous !

Aujourd'hui je vous propose un hack un peu particulier : il s'agit de rendre utilisables des chargeurs Dell ancienne génération sur des machines récentes.

Contexte

Au fablab on a depuis longtemps un parc de portables Dell un peu ancien (et récemment on en a encore reçu en don) et en gros on a beaucoup plus de chargeur que ce qu'on a besoin.

Un exemple de vieux chargeur

Ma compagne ❤ a acheté un Dell il y a deux ans, et les formats de prise ne sont pas les mêmes, et à naviguer entre la maison, le bureau, les clients ... Avoir plusieurs chargeurs permet de gagner en confort et d'éviter de se retrouver à plat avec le chargeur oubliée à la maison ...
Donc on regarde, et la bon c'est pas donné les chargeurs ... 💲💲💲 En plus y'en a plein au fablab qui vont finir à la poubelle, c'est bien dommage pour la planète 🌍 !

Juste un problème de format prise ?

Première étape de ma démarche : ça se ressemble, les voltages et ampérages sont compatibles, je dois bien pouvoir trouver un embout pour faire la conversion ...
Et oui on en trouve ! Pour vraiment pas cher en plus. Ni une ni deux, commande est passée, colis réceptionné, on branche et là ... Rien 😥

Le genre d'adaptateur qui ne marche pas


Hum ... je commence à creuser dans Google et effectivement il y a un hic et indice pour les lecteurs, c'est lié à ce petit pin qu'on voit au centre de la prise :

C'est cet ID_PIN qui va me donner du fil à retordre 

Le secret de la puce mémoire

En fait ce petit pin permet à l'ordinateur d'aller lire une puce mémoire dans le chargeur qui lui donne des infos sur sa puissance, son voltage, son numéro de série ...


L'idée (pas idiote) de ce principe c'est qu'avec ça votre PC adaptera par exemple sa charge en fonction de ce que peut fournir le chargeur (pas con dans l'idée, ça évite potentiellement de le cramer).
Sauf que dans notre cas : pas de puce pas de charge 😅

Dans la technique plus profonde, le protocole utilisé est le OneWire, assez connu des bidouilleurs Arduino, et la puce est une DS2501 ou DS2502 (je vais même parler que de DS2502 maintenant, étant l'upgrade de la DS2501 on ne trouve plus cette dernière sur le marché).
Le principe est bête comme choux : le PC interroge la mémoire et récupère une chaine de caractère qui donne les infos que j'évoquais avant. Et y'a pas vraiment plus ! Pas de cryptage, pas de sur-couche ... Et visiblement pas de contrôle du numéro de série.
Même la chaîne est assez explicite, en voici une pour un chargeur 19.5V 90W et 4.6A :

DELL00AC090195046CN09T2157161543835EAL03

On retrouve bien 1950 pour la tension (en mV) 46 pour l'ampérage et 090 pour la puissance de 90W. Ensuite (de ce que j'ai trouvé dans d'autres articles) CN09T2157161543835EA est le n° de série et L03 le numéro de version.

Donc en théorie, il suffit juste de créer un système qui donne les bonnes réponses au PC pour que notre recyclage soit possible.

Deux stratégies possibles

Pour réaliser ce hack deux approches sont possibles :

  • réutiliser celle de Dell en "intercalant" une puce mémoire qui renverra le bon code
  • utiliser un microcontrôleur pour se fera passer une puce mémoire.

La première a l'avantage d'être très simple au niveau circuit, avec le désavantage qu'il faut au préalable avoir un programmateur spécial pour y mettre ce dont on a besoin.
La seconde est plus lourde électroniquement : microcontrôleur et circuit d'alimentation pour passer du 19.5V au 5V ou au 3V principalement. C'est donc potentiellement plus cher, plus gros, et plus compliqué à assembler (et puis avec la pénurie mondiale c'est dur à approvisionner).

J'ai donc retenu la première option, ce qui m'oblige donc à concevoir le programmateur car j'ai rien trouvé de prêt (ou alors ça coutait un bras). Si la seconde vous intéresse, en bas vous trouverez des liens sur des projets similaires qui m'ont aidé, dont un utilisant justement cette approche.

En gros je veux faire ça mais en plus propre

Le plan de bataille

Pour que ça soit plus clair pour tout le monde, résumons un peu ce qu'on va devoir faire :

  • Etape 1 : fabriquer un programmateur de puce mémoire DS2502.
  • Etape 2 : fabriquer un circuit qui va permettre d'un côté d'y brancher un vieux chargeur, et qui ressortira de l'autre côté avec une prise pour ordinateur "moderne", et entre les deux intercalera notre puce mémoire.
  • Etape 3 : programmer la puce avec le programmateur pour qu'elle renvoi les bonnes infos
  • Etape 4 : souder la puce au circuit de l'étape 2.
  • Étape 5 : brancher son Dell et s'ouvrir une bière 🥂 (faut pas déconner on en aura bavé).

Le programmateur de puce mémoire

Là on attaque la partie la plus touchy : la programmation de ces puces est un peu excentrique. Il faut respecter un protocole dédié, qui passe notamment par la génération de pic de tension à 12V.

J'ai donc repris des schématiques trouvées sur le net et créer un shield pour Arduino Nano permettant de programmer nos nouvelles puces mémoire préférées auquel j'ai ajouté :

  • le formfactor Arduino Nano : il faut un microcontrôleur pour gérer la programmation, autant utiliser des carte à 3€ déjà assembler pour le faire !
  • Des boutons : ça permettra par exemple de déclencher la programmation d'une puce sans avoir besoin d'être connecté à un PC.
  • Des leds : pareil, si j'utilise des boutons par exemple ça permettra de voir si la programmation est ok ou pas.
  • Un step-up (=élévateur de tension) 5V -> 12V qui évite de faire appel à une alimentation externe supplémentaire pour générer ce fameux pic de tension de 12V.
Le genre de schéma trouvé sur le net que j'ai odieusement copié

Et voici le résultat :

A gauche le circuit du programmateur, à droite spoiler alert : c'est l'adaptateur final

📘 Vous l'avez surement remarqué, j'ai utilisé la plupart du temps des composant montés en surface (CMS ou SMD en anglais). N'ayez pas peur de vous lancer dans cette technique de montage de composant, c'est pas si dur ! Faut juste une buse à air chaud pour commencer ou un plateau chauffant + de la pâte à souder et une pince brucelle. De plus vous n'êtes pas obligé de tout monter : leds et boutons sont facultatifs (vous pouvez déclencher la programmation par le port série par exemple), vous pouvez brancher une alimentation externe 12V au lieu de passer par un step-up.

Un code de démo est dispo (lui même inspiré de cet article) sur le Github. Alors je l'ai pas trop travaillé mais ça fait le job. Il y a aussi des message d'erreur qui remontent qui semble erronés parce que ça marche quand même ...
Bref c'est bon j'ai des DS2502 qui renvoient les mêmes infos qu'un chargeur d'origine.

🚧 N'oubliez pas une chose (pas comme moi au début) : c'est une mémoire OTP, One Time Programmable, c'est à dire qu'on ne peut écrire dessus qu'une fois (les puristes vont pester en lisant ça, car c'est pas exactement, mais partez de ce principe ça sera beaucoup plus simple !). Donc quand vous vous lancez dans l'écriture de la mémoire, c'est sans filet !

Maintenant je peux donc programmer des centaines de puces par heure grâce cette superbe invention💪 .

Le circuit final

Le DS2501/02 peut s'alimenter tout seul à partir de la ligne de communication. C'est une particularité qu'on retrouve sur d'autres composants OneWire assez pratique puisque ça évite de tirer un fil d'alimentation en plus.

En terme de composant y'a très peu de chose :

  • Un DS2502 (bah oui forcément).
  • Une résistance 130 Ohm et une diode zener 12V (pour protéger le DS2501/02 je pense, j'ai pas trouvé plus d'info sur cette partie qui n'est peut-être même pas nécessaire).
⚠️
UPDATE : comme quoi faut quand même se poser des questions parfois ... Après explosion du D2502 (oui oui) au bout de quelques mois, j'ai compris que sur le pin 1-wire était surement envoyé la tension du chargeur, soit ~19V. Avec 130 Ohms, et à supposer qu'aucune résistance ne soit présente côté PC, la loi d'Ohm nous donne 146 mA que doit se manger la zener ... Et effectivement, la zenner à un beau trou, et quand plus de zener, le DS se mange 19V, bien au-delà de sa spec max autorisée.
🤞
Fort de ces constatations, je recommanderais donc plutôt : zener 12V et résistance entre 5k et 20k
  • Une prise femelle "ancienne génération".
  • Une prise mâle "nouvelle génération".

Les prises c'est un peu chi**t 😡 : pour le mâle (celui avec la prise "moderne" donc) c'est pas trop compliqué : je voulais que ça soit "câblé" j'ai donc pris une prise câblée, j'ai donc que les fils à souder sur l'adaptateur.

Pour le femelle (celle dans laquelle on va venir brancher le chargeur "ancienne génération") c'est beaucoup plus complexe (surtout si vous voulez recoller exactement à mon circuit) : en gros on a l'impression que sur chaque laptop, Dell a mis un connecteur femelle différent ... 😕 Du coup, y'a des dizaines de références et pour que vous retrouviez le même que moi, vous êtes pas sortis de l'auberge ... Même moi j'ai du mal à retrouver le mien 😅 Mais ! Il semble que celui que j'ai utilisé corresponde à celui destiné à des Dell Latitude D600. Si vous tapez "Dell d600 latitude" sur Aliexpress, à l'écriture de cet article j'en trouve.

Du coup, vu le contexte j'ai pas trouvé d'empreinte toute prête pour le circuit et j'ai dû la dessiner moi-même, et sans datasheet ... Alors comme il est un peu complexe ce connecteur, forcement ça n'a pas été top. Je vous laisse juger par vous même :

🚧 Dans le Github vous trouverez ma première version (dont l'empreinte n'est pas bonne) et une version corrigée que je n'ai pas testé, à vous de voir ! Je vous tiendrai au courant si ça match 😉

Niveau budget on est donc dans les 10€ globalement. Après si vous en commander plus c'est sûr que vous aurez des prix plus bas. Mais ça vaut quand même sacrément le coup (et le coût du coup) 🤗

La blague du test final

On arrive au bout : circuits réceptionnés, quelques soudures et c'est prêt.
Et là reste une des dernière étapes, préparer un DS2502. Et là vient la blague : j'avais sourcé sur AliExpress 10 DS2502 à pas cher, et au moment de les programmer, et bin ... Ils étaient déjà flashés pour des chargeurs Dell ! Véridique 😮 !
Depuis l'annonce a disparue, mais pour le coup mon programmateur ne servait plus à rien ... Bref je soude la puce, je branche et :

Yaaatttaaa !

Montage final

Bonus final : mise en boîte

Bah ouais on va pas laisser ce circuit à poil c'est dégueulasse. Donc petite CAO sous OnShape, impression 3D et voilààà :

Quand même plus beau nan ? :)

Bon c'est pas non plus foufou ce que j'ai fait mais ça a le mérite de faire le boulot sans que j'ai eu à y passer 3 jours.

Fichiers STL dans le Github et accès aux sources (Onshape) si vous voulez le modifier.

Conclusion

Et voilà ! Des chargeurs qui ne finiront pas à la poubelle et qui nous rendront bien service :)

Quelques notes pour conclure :

  • Les DS2502 existent en plusieurs formats, vous pouvez reprendre le circuit pour le mettre en SOT par exemple, et le programmer sur la carte en utilisant des pogopins (genre de contact à ressort destiné à faire des programmation à la volée).
  • Prochain chantier que je vais tenter dans le même genre : celui des PC Asus. En effet moi j'ai un Asus, et il se trouve que les voltages, puissances etc ... Sont également compatible avec mon Asus ROG (PC gamer). J'ai donc acheté un adaptateur sur Amazon qui avait des commentaires positifs. Et après tests, en effet ça fonctionne mais pas complètement (surtout avec mon PC qui pompe pas mal de jus) : en effet, comme sur les Dell on retrouve un pin central dans le connecteur, qu'on peut supposer destiné à jouer le même rôle que chez Dell. Mais comme c'est sûrement un protocole ou une information différemment formatées, le chargeur n'est pas reconnu. Ici Asus ne refuse pas complètement le chargeur, mais semble le considérer comme de faible puissance. Du coup dès que le PC "tire" un peu, le chargeur se déconnecte, puis se reconnecte etc ... Donc si vous avez un "petit" pc, ça doit le faire (mais peut-être le rechargement sera plus lent). Si vous êtes dans le même cas que moi, c'est vite soulant (même quand je joue pas, je me retrouve vite avec le CPU à 100% sur certaines applis). Histoire à suivre donc.

Comme d'hab si vous avez des questions : commentaires, Github ou en IRL au fablab LABSud (Montpellier) 😉


Liens utiles

Github

CAO 3D Onshape

Projets similaires

http://dravecky.net/?menu1pol=2&menu2pol=12&section=6&idc=104

https://en.maxchan.info/upgrading-my-old-dell-and-fixing-the-id-chip.html

http://forum.arcadecontrols.com/index.php?topic=118584.0

https://www.techinferno.com/index.php?/forums/topic/3907-guide-dell-330w-power-adapter-mod-for-the-m17x/

https://www.laboneinside.com/how-to-make-dell-charger/