2 points par GN⁺ 2024-04-30 | 1 commentaires | Partager sur WhatsApp
  • Après avoir installé NixOS sur un Terramaster F2-221, un SSD USB externe étant devenu un obstacle, l’auteur a fabriqué lui-même un backplane afin d’intégrer un SSD de démarrage NVMe en interne
  • Le backplane d’origine du F2-221 était centré sur les circuits SATA et d’alimentation, et l’analyse de photos du F5-422 a permis de comprendre comment Terramaster étendait les baies avec deux contrôleurs SATA ASM1061
  • Les paires différentielles PCIe ont été suivies en recoupant les photos du F5-422, la fiche technique de l’ASM1061 et l’emplacement des condensateurs de couplage, mais certaines broches n’ont jamais été confirmées et le pinout PCIe2 n’a pas non plus été vérifié
  • Le prototype de PCB reliait directement un slot M.2 NVMe à une ligne PCIe x1 Gen 2 ; le BIOS affichait Patriot P300 128GB et les disques durs fonctionnaient aussi normalement
  • La version finale F3 Backplane a été simplifiée pour utiliser directement le rail 3,3 V et, après plusieurs semaines de démarrage sur NVMe et de btrfs scrub sans erreur, le projet KiCad a été publié sur GitHub

Le point de départ : se débarrasser du SSD USB externe

  • Le Terramaster F2-221 étant un NAS x86_64 standard basé sur un Intel J3355, l’installation de NixOS à la place du TOS par défaut était en soi simple
  • Comme les deux connecteurs SATA étaient déjà utilisés par des disques durs de 4 To, il fallait connecter un SSD USB externe comme support pour le système d’exploitation
  • Il fallait réserver de la place pour le SSD externe autour du NAS, derrière l’étagère, et faire attention au câble à chaque fois que des objets étaient déplacés ; un stockage interne est donc devenu nécessaire
  • La carte mère disposait bien d’un connecteur USB interne pour le bootstrap de TOS, mais comme il était en USB 2.0, il ne convenait pas comme SSD de démarrage

Comparaison des backplanes F2-221 et F5-422

  • La carte mère du F2-221 possédait un connecteur de type PCIe x4 dans lequel venait s’enficher le PCB du backplane, mais le backplane d’origine ne comportait pas de circuit intégré de conversion PCIe-SATA
  • Les connecteurs SATA étaient câblés directement au connecteur PCIe edge, et le brochage réel était un pinout non standard, pas du PCIe standard
  • L’Intel J3355 fournissant deux ports SATA et six lignes PCIe Gen 2, il était probable que les modèles 4 baies et 5 baies de Terramaster augmentent le nombre de ports SATA via des lignes PCIe
  • Sur les photos haute résolution du test du Terramaster F5-422, deux circuits intégrés ASMedia ASM1061 ont été identifiés
    • L’ASM1061 est un contrôleur SATA basé sur PCIe Gen 2 x1 et fournit deux ports SATA
    • Sur le F5-422, il a été déterminé que le premier ASM1061 était relié aux ports 3 et 4 du backplane, et le second au port 5
  • Au dos de la carte mère du F2-221, il a aussi été confirmé que des broches semblant correspondre à des signaux PCIe sur le backplane du F5-422 étaient effectivement câblées

Rétro-ingénierie des signaux PCIe

  • Les lignes PCIe ont été suivies à partir des photos du backplane du F5-422 et de la fiche technique de l’ASM1061, mais plusieurs paires différentielles passaient par des vias vers des couches internes, ce qui rendait difficile de distinguer TX, RX et REFCLK
  • L’un des indices vérifiables était qu’une broche du connecteur PCIe était reliée au PERST# de l’ASM1061
  • Le fait que, traditionnellement en PCIe, des condensateurs de couplage soient placés sur les paires différentielles TX a servi à déterminer le sens des signaux
    • La paire différentielle reliée au TX de l’ASM1061 devait avoir des condensateurs de couplage côté backplane
    • Du point de vue du CPU et de la carte mère, cette paire différentielle devenait donc RX
    • La paire différentielle reliée au RX de l’ASM1061 a été déduite de l’emplacement des condensateurs de couplage côté carte mère
  • REFCLK a été supposé être la paire différentielle restante la plus proche de TX et RX pour chaque interface PCIe x1
  • En important la photo du backplane du F5-422 dans KiCad, les pistes externes ont été suivies jusqu’aux vias et les possibilités de routage sur les couches internes comparées, ce qui a permis de valider approximativement le pinout PCIe1
  • Certaines broches n’étaient pas connectées sur le backplane F2-221 d’origine, ou partaient vers des couches internes, ce qui n’a pas permis d’en confirmer la fonction
  • Le pinout PCIe2 n’a pas été vérifié

Reconstitution du circuit d’alimentation

  • Une face du backplane du F2-221 ne comportait pas de circuit intégré pour les signaux PCIe, mais de nombreux circuits d’alimentation composés principalement de MOSFET, de diodes, de résistances et de condensateurs
  • Des gros plans ont servi à identifier les composants et les pistes, puis le schéma a été recréé dans KiCad
  • Le circuit a été compris comme une architecture de load switch à démarrage progressif, un par rail d’alimentation de chaque port SATA
    • Le F2-221 en comporte quatre au total : 2 ports SATA × 2 rails d’alimentation
    • Le F5-422 en comporte dix au total pour ses 5 baies
  • La broche P4, l’une des broches de masse du connecteur SATA, est tirée à la masse lors de la connexion d’un disque dur et sert de broche enable pour le load switch
  • Cette architecture semble destinée à réduire les étincelles entre le connecteur et le disque lors du hot-plug d’un disque dur, causées par le fort courant d’appel initial
  • Pour éviter de souder de nombreux composants discrets, le circuit intégré de load switch avec démarreur progressif intégré onsemi NCP45521-L a été choisi

Pourquoi choisir le NVMe plutôt qu’un SSD SATA

  • Au départ, l’idée était d’ajouter des ports SATA avec un ASM1061 et de fixer un SSD SATA dans le boîtier
  • Il y avait de la place pour un connecteur M.2 entre les rails de fixation du backplane ; l’espace était très étroit, avec moins de 1 mm de marge de chaque côté, mais l’installation était possible
  • Pour utiliser un SSD M.2 SATA, il fallait un contrôleur convertissant le PCIe en SATA
    • Une approche comme celle du F5-422, avec un ASM1061, était possible
    • Mais comme il était difficile d’acheter l’IC ASM1061 seul, il aurait fallu dessouder l’IC d’une carte PCIe équipée d’un ASM1061
  • Le NVMe étant lui-même basé sur PCIe, il est possible de connecter directement les lignes PCIe à un slot M.2 M-key sans contrôleur séparé
  • Les SSD NVMe utilisent généralement quatre lignes PCIe Gen 3 ou plus, mais comme cette conception n’emploie qu’une seule ligne PCIe Gen 2, la vitesse ne devait pas être supérieure à celle du SATA
  • Malgré cela, l’absence de contrôleur, le routage plus simple et le choix plus large de SSD NVMe rendaient le NVMe plus adapté à cet usage
  • Le SSD effectivement utilisé, un Patriot P300 128GB, a été acheté localement pour 14,90 €
  • Comme il n’était pas certain que le BIOS puisse démarrer directement depuis le NVMe, une solution de repli consistant à placer la partition de boot sur une clé USB 2.0 interne a aussi été envisagée

Fabrication et test du PCB prototype

  • Le nouveau PCB devant s’adapter à la structure de fixation du backplane dans le boîtier, l’emplacement du connecteur PCIe edge et des trous de vis devait être précis
  • La taille du PCB et la limitation du flux d’air devaient aussi être prises en compte, de sorte que le prototype était important non seulement pour la validation électrique, mais aussi pour vérifier l’ajustement mécanique
  • Le PCB d’origine a été mesuré à la règle et au pied à coulisse ; la distorsion optique d’une photo de face a été réduite, puis l’image importée dans KiCad pour aligner connecteurs, trous de vis et contour
  • Sur le prototype, les broches non identifiées ont été sorties sur des points de test, et comme le rail 3,3 V a été découvert tardivement, un convertisseur buck transformant le 5 V en 3,3 V a été ajouté
  • Un PCB 4 couches a été commandé chez JLCPCB et reçu quelques semaines plus tard
  • C’était la première soudure de boîtiers DFN, avec des composants très petits, mais les courts-circuits entre alimentation et masse ont été vérifiés et la qualité des soudures inspectée avec des gros plans pris au smartphone
  • Une fois inséré dans le NAS et démarré, Patriot P300 128GB est apparu dans la liste des options de démarrage du BIOS, ce qui permettait de démarrer directement depuis le NVMe
  • La ligne CLKREQ, qui inquiétait, n’a pas été trouvée, mais elle semblait être maintenue à l’état bas en permanence quelque part sur la carte mère, et REFCLK fonctionnait
    • CLKREQ sert généralement au SSD à demander l’horloge de référence lorsqu’il en a besoin
    • Dans cette conception, l’ASPM ne fonctionne pas, mais comme il s’agit du disque de démarrage d’un serveur toujours allumé, cela n’a pas été jugé problématique
  • Les disques durs ont également fonctionné normalement après connexion
  • Le prototype conçu pour les tests et le débogage fonctionnant tel quel, la fonction des broches non identifiées n’avait plus vraiment d’importance

Version finale F3 Backplane

  • Le prototype fonctionnait normalement, mais il restait des points de test et il était légèrement de travers dans le boîtier ; une version finale V1.0 a donc été refaite
  • Dans la version finale, le convertisseur buck a été supprimé et le connecteur M.2 a été relié directement au rail 3,3 V du connecteur PCIe
  • La position a été légèrement ajustée pour réduire l’inclinaison du prototype, les points de test ont été supprimés et un logo a été ajouté
  • Le nom F3 Backplane a été choisi pour signifier qu’il ajoute une unité au F2
  • Le PCB final, commandé à nouveau chez JLCPCB et reçu ensuite, a lui aussi fonctionné normalement comme le prototype
  • Un btrfs scrub complet a été exécuté sur les disques durs et aucune erreur ne s’est produite
  • Le système a fonctionné pendant plusieurs semaines depuis le SSD NVMe sans aucun hiccup
  • La soudure des connecteurs SATA a été difficile et grossière, car aucun thermal relief n’avait été ajouté au plan de masse interne, mais ce problème a été corrigé dans le dépôt GitHub

Performances et ressources publiées

  • Le résultat hdparm du SSD NVMe est le suivant
/dev/nvme0n1:
 Timing cached reads:   4554 MB in  2.00 seconds = 2279.68 MB/sec
 Timing buffered disk reads: 1222 MB in  3.00 seconds = 407.22 MB/sec
  • Ce n’est pas une vitesse élevée pour un SSD NVMe, mais c’est le résultat attendu avec une seule ligne PCIe Gen 2
  • Les performances sont suffisantes pour un disque de démarrage
  • Le projet KiCad est publié sur GitHub

1 commentaires

 
GN⁺ 2024-04-30
Avis sur Hacker News
  • Comme méthode pour souder un boîtier DFN, c’est quasiment complètement délirant, mais ça a l’air amusant
    Ça peut marcher d’une façon étrange, mais il ne faut pas s’attendre à une fiabilité constante ; ça suffit sans doute pour un projet ponctuel

    • En réalité, les 8 essais se sont tous bien passés
      Heureusement, la pastille inférieure du boîtier DFN allait jusqu’aux deux bords, ce qui l’a rendu possible ; je ne pense pas que cette méthode fonctionnerait avec un QFN
    • Je ne comprends pas pourquoi il faudrait « trop » de pâte à braser
      J’ai fait plusieurs fois des opérations similaires avec de la soudure classique : il suffit d’en mettre une quantité un peu généreuse sur chaque pad, sans aller jusqu’à provoquer des courts-circuits
      Appliquer du flux, si possible un flux à base de colophane qui tient longtemps même à l’étape de chauffe suivante, chauffer toute l’empreinte au pistolet à air chaud, puis poser délicatement le circuit intégré
      Ainsi, on n’a pas besoin d’envoyer longtemps de l’air chaud sur l’IC pour chauffer l’ensemble
    • Je trouve que c’est une méthode tout à fait valable
      Si l’on met toujours quelques vias dans le pad thermique et qu’on laisse le cuivre exposé de l’autre côté, les vias ne sont pas bouchés par le masque de soudure et absorbent l’excès de soudure
      Pour des travaux SMD à très petit budget, on peut aussi chauffer le pad thermique au fer à souder depuis l’autre côté
      On peut appuyer sur la puce, mais il faut faire attention à l’alignement avec les pads
      Sur les QFN, à part de grosses gouttes de soudure qui se forment sur le bord extérieur, j’ai rarement vu des ponts de soudure
      Les alliages de soudure et les masques de soudure actuels empêchent assez bien les ponts, et la soudure a fortement tendance à adhérer au métal plutôt qu’à rester entre le corps du boîtier et le masque de soudure
    • Si l’on fait dépasser davantage les pads vers l’extérieur depuis sous la puce, le soudage à la main devient beaucoup plus facile en cas de besoin
  • J’aimerais qu’il y ait davantage de standardisation dans les builds de NAS grand public
    Cela fait des années que je demande à ASUSTOR s’ils envisagent de faire un backplane ou un adaptateur compatible Mini-ITX
    Ce serait bien de pouvoir, quelques années plus tard, ne remplacer que le backplane, ou d’insérer un SBC dans un format du type Pico-ITX
    Je n’aime pas le fait qu’au bout de 5 ou 10 ans, il devienne difficile de mettre correctement à niveau un NAS
    Si l’on pouvait seulement changer la carte mère, on pourrait faire passer beaucoup de NAS 1 Gbit/s à 2,5 Gbit/s ou 10 Gbit/s, et continuer à utiliser le châssis plus longtemps au lieu de l’envoyer à la décharge

    • Ce serait bien que Framework se lance dans ce domaine
      Jeter aussi le châssis de NAS et le backplane alors que seule la partie calcul est obsolète, c’est un énorme gâchis
      Il pourrait aussi y avoir des synergies avec la carte mère du Laptop 13, avec un TDP de niveau ordinateur portable et même la possibilité d’ARM
      Cela dit, le marché des appliances NAS ne semble pas très grand, limité aux « prosumers » et aux petites entreprises, et la différenciation se fait davantage par le logiciel que par le matériel
      Si les gens achètent du Synology, ce n’est pas pour le matériel mais pour DSM
      Il me semble avoir lu quelque part que Framework n’avait pas de projet d’intégration verticale, et c’est dommage
      Ce serait bien d’avoir un OS pris en charge par Framework où des aspects comme l’économie d’énergie ou le ressenti du touchpad fonctionnent bien dès le départ
    • J’aurais aimé que le FLASHSTOR d’ASUSTOR soit une carte d’extension NVMe 6/12 baies, plutôt qu’un ensemble intégré carte mère + switch PCIe + CPU soudé + RAM soudée
      J’aimerais pouvoir simplement brancher ce genre de chose dans un PC standard, mais les produits que j’ai trouvés sont soit des modèles à 4 ports, soit beaucoup trop chers
    • Il suffit d’acheter une carte Supermicro, de fabriquer soi-même le backplane ou d’utiliser un modèle du commerce, puis d’ajouter des cartes d’extension selon ce que la carte mère peut gérer
    • Mais dans ce cas, le fabricant ne pourrait plus vendre un châssis et une carte mère à 100 dollars pour 500 dollars
      Tu as déjà donné toi-même la réponse
  • La profondeur et l’effort que les gens sont prêts à y consacrer m’impressionnent toujours
    C’est encore plus vrai pour les travaux où l’on perd vraiment de l’argent si l’on se rate, comme modifier une guitare ou du matériel
    J’ai l’impression qu’avant de me lancer directement dans ce genre de projet, il faudrait que je me fasse la main ailleurs avec un fer à souder ou des outils de menuiserie
    Je me demande aussi pourquoi le marché des petites boîtes faciles à hacker, où l’on peut bidouiller plus facilement le matériel ou le logiciel, n’est pas plus important
    J’aimerais qu’il existe un NAS à prix grand public dont on puisse retirer le système d’exploitation pour le remplacer par un OS ou un noyau standard
    Peut-être que je suis simplement trop intimidé par l’idée de modifier des objets physiques réels

    • J’ai construit moi-même un NAS pour 1 000 £ au total
      Il a 24 To de disques physiques, 16 To utilisables (Raid Z2), tourne sous Ubuntu LTS Server, et je lance les conteneurs dont j’ai besoin dans Docker via Portainer
      Ce n’est pas une interface graphique à clics utilisable par n’importe qui, et il faut créer soi-même des montages SMB dans le terminal, mais c’est assez simple à maintenir
      Côté matériel : carte mère Asrock Rack C246 WSI Mini ITX, 32 Go de RAM ECC, Intel i3-9100T, six disques NAS IronWolf 4 To, châssis rack 2U peu profond, et SSD de démarrage Samsung 850 Evo 1 To
      La consommation au repos est de 23 W, donc suffisamment basse, et elle monte à 65 W en charge
      Les disques sont mis en veille après 10 minutes d’inactivité, et même ainsi le nombre annuel de cycles load/unload est d’environ 10 000, ce qui reste correct par rapport aux 600 000 cycles annoncés
    • Ce n’est peut-être pas du niveau de prix grand public, mais Supermicro fabrique du matériel assez bon pour les NAS
      On peut y mettre ses propres disques et installer l’OS de son choix
      J’ai une machine configurée avec 183 To qui fait tourner TrueNAS (ZFS), et elle est excellente
      En gros, c’est une boîte x86 standard avec beaucoup d’emplacements de disques, un backplane, des ports SAS/SATA et une grosse capacité côté contrôleur
      Le marché de l’occasion est aussi assez actif
      Cela dit, comme c’est destiné aux gens qui veulent mettre plus de 10 disques dans un même châssis, c’est difficile à qualifier de matériel grand public
    • Je me demande s’il existe de bonnes options aujourd’hui
      Je pense régulièrement à acheter un NAS, mais je ne veux pas utiliser un OS propriétaire de fournisseur qui pourrait scanner mes données à cause d’intégrations cloud inutiles ou hostiles
      Je n’aime pas non plus l’idée qu’il puisse rester une backdoor avec un mot de passe codé en dur
    • Il existe un barebone NAS qui prend en charge deux disques durs 3,5 pouces, deux M.2 NVMe et deux ports LAN 2,5 GbE
      Aucune idée de la qualité du BIOS, et il n’y a pas de RAM, mais il est extensible jusqu’à 32 Go, et vous apportez votre propre OS
      Le modèle Intel Alder Lake N100 est à 189 $ : https://aoostar.com/products/aoostar-r1-2bay-nas-intel-n100-...
      Le modèle Ryzen 5700 est à 299 $ : https://aoostar.com/products/aoostar-r7-2-bay-nas-amd-ryzen-...
    • Si l’on est prêt à mettre les mains dedans, il y a pas mal d’options
      Certains utilisent un Raspberry Pi comme NAS ; c’est lent, mais ça fonctionne pour des sauvegardes locales bon marché
      On peut aussi rooter de vieux NAS intégrés comme le DNS-320 pour y faire tourner une distribution relativement récente basée sur Debian, qui reçoit des correctifs de sécurité
      En revanche, le CPU et la RAM sont très limités, donc il faut être à l’aise avec la ligne de commande
      Une autre solution consiste à acheter un vieux serveur HP Proliant (autour de la gen8), à y mettre quatre disques durs de 16 To et à démarrer sur un cinquième disque
  • Je suis intrigué par le passage disant que « ce header USB n’est qu’en USB 2.0, donc ce n’est pas une option pour cet usage »
    Je ne mets pas en doute cet excellent projet, mais j’aimerais comprendre pourquoi l’USB 2.0 ne convient pas pour l’OS d’un NAS
    À part lire au démarrage et écrire occasionnellement un peu de données, est-ce qu’il fait autre chose ?

    • Je fais tourner un NAS sur un disque de démarrage USB 2.0, et le seul problème est que systemd-journald n’a pas été conçu en pensant aux disques lents
      Quand on lance des opérations journalctl sur six mois de fichiers de logs, cela prend une à deux minutes à cause des schémas d’accès aux fichiers pas optimaux de journalctl
    • Je ne l’ai pas écrit dans l’article, mais je fais aussi tourner quelques services légers sur cette machine, et avec une clé USB 2.0, c’était lent au point d’être agaçant
      Bien sûr, je ne nierai pas que la vraie raison pour laquelle j’ai fait ça était simplement que bricoler était amusant
  • On dirait que je suis un mauvais hacker
    J’avais le même problème : devoir brancher un disque externe sur mon NAS, et je l’ai simplement fixé au-dessus avec du Velcro

    • Pour ce genre d’usage, le pistolet à colle est ce qu’il y a de plus pratique
  • Ça a l’air beaucoup plus élégant que le boîtier « custom » que j’ai fabriqué en Lego pour y mettre mon NAS maison
    J’avais branché quatre disques durs USB sur un hub, lui-même connecté à un Nvidia Jetson
    Je voulais en faire un ensemble intégré, et les faux Lego étant tellement bon marché, c’était facile d’expérimenter
    C’était amusant aussi, mais celui-ci a l’air bien plus professionnel, donc je suis un peu jaloux

  • Impressionnant et élégant
    C’est remarquable d’être arrivé jusque-là avec seulement des suppositions, un peu d’essais-erreurs, des vérifications de continuité, et une façon assez légère de remplacer l’IC de commutation de charge

    • J’ai rassemblé une quantité énorme d’informations sur divers forums et sur Stack Exchange, et certaines choses ont dû être acceptées comme des faits à contrecœur
      Mais au final, ça a fonctionné
  • C’est une solution vraiment chouette
    J’utilise le modèle 5 baies du même NAS, et j’ai installé TrueNAS Scale sur une clé USB Samsung branchée sur l’USB interne
    J’ai choisi un modèle très utilisé pour les dashcams Tesla, en me disant qu’il aurait au moins une certaine endurance
    Jusqu’ici j’en suis satisfait, mais les performances CPU restent vraiment insuffisantes, donc je prévois de passer à quelque chose de plus puissant

    • Le manque de performances CPU est bien réel
      J’ai aussi envisagé de remplacer la carte mère par un carrier custom pour module de calcul ARM, ou par le nouveau Lattepanda mu, mais je pense qu’il faut d’abord que j’utilise ce nouveau projet dans lequel j’ai mis autant d’efforts
  • C’est bien réalisé, et j’aime ce genre de projet où les gens gardent le contrôle direct de leur propre matériel
    Le fait de l’avoir documenté publiquement mérite aussi d’être salué une fois de plus
    Je me demande toutefois s’il n’y aura pas un problème de circulation d’air
    Il y a un grand trou au centre du PCB d’origine et du PCB modifié, probablement destiné à faire passer l’air au-dessus des disques
    Mais le disque NVMe le bouche
    Peut-être que suffisamment d’air passera autour des bords du NVMe pour refroidir correctement les disques classiques, avec en prime le NVMe le mieux refroidi au monde
    Malgré tout, l’espace semble vraiment très serré

    • C’est aussi un point qui m’inquiétait
      Je ne m’y connais pas assez en aérodynamique pour en être certain, mais je pense qu’une certaine quantité d’air passera par le trou
      Le fait d’avoir poussé les entretoises à vis du SSD jusqu’au bord gauche du PCB visait aussi à laisser passer davantage d’air sur la droite
      En tout cas, jusqu’à présent, je n’ai pas constaté de dégradation des performances de refroidissement
  • Je n’en aurai pas d’usage direct, mais ça me réjouit quand même
    Voir quelqu’un creuser aussi profondément, apprendre, puis partager ce qu’il a appris, c’est vraiment appréciable et stimulant