Mehrere PCIe-Geräte in einem einzigen M.2-Steckplatz

Ich habe einen M.2-Steckplatz mit M-Schlüssel auf meinem Laptop und mehrere M.2-PCI-e-Geräte, die ich gleichzeitig verwenden möchte. Ich habe nach einem M.2-Switch oder einer Art Splitter gesucht, konnte aber nichts finden, also habe ich beschlossen, meinen eigenen zu entwerfen und auch etwas PCI-Express-Erfahrung zu sammeln.

Ich habe versucht, die Spezifikationen für die physische Schicht von PCI Express nachzuschlagen, aber ich konnte nicht viele Informationen finden. Die meisten Artikel, die ich gefunden habe, beziehen sich auf die PCI-SIG-Website, die eine Mitgliedschaft mit einer Arbeits-E-Mail (die ich nicht habe) von einem der Mitgliedsunternehmen benötigt. Also habe ich versucht, so viel wie möglich selbst zu lernen.

Soweit ich herausfinden konnte, stellt ein M.2 M-Key-Steckplatz 4x PCI-e-Lanes bereit. Die Geräte, die ich habe, sind eine Kombination aus A/E-, E- und M-Tasten. Die A/E- und E-Key-Geräte erfordern 1 oder 2 PCIe-Lanes. Keine der Karten, die ich habe, benötigt die M.2-spezifischen Funktionen wie USB oder DisplayPort. Ich bin auch völlig in Ordnung mit den M-Key (x4) Geräten, die auf 2 Spuren oder sogar einer einzigen Spur mit reduzierter Geschwindigkeit laufen. Ich habe auch gelernt, dass jede PCI-e-Lane ein differenzielles Sende- und Empfangspaar hat und dass es einen Referenztakt gibt, der vom Host bereitgestellt wird. Also frage ich mich;

  • Wenn ich ein Board entwerfe, das die 4 Spuren auf dem M-Key-Steckplatz auf 2 Spuren auf einem M.2 E-Key (bei den passenden Pin-Nummern) plus 2 weitere Spuren auf einem M.2 M-Key (mit die anderen 2 Spuren N/C) und die Referenzuhr auf beiden Steckplätzen verwenden, würde das funktionieren?
  • Muss ich die Referenzuhr puffern oder kann ich sie einfach zusammenbinden?
  • Da der I2C-Bus offen ist, kann ich sie einfach alle zusammenbinden? (Dasselbe gilt für SMBus)
  • Was macht die CLKREQ#-Zeile in PCI Express? Soweit ich herausfinden konnte, behauptet die PCIe-Karte diese Linie, wenn sie einen Referenztakt benötigt. Kann ich es einfach herunterziehen und alle Karten die ganze Zeit getaktet halten? Oder kann ich ein ODER-Gatter verwenden, damit alle eingesteckten Karten den Referenztakt erhalten, wenn eine eingesteckte Karte eine Uhr benötigt?
  • Welche Funktion haben die WAKE#- und PERST#-Leitungen?
  • Gibt es weitere PCIe-Signale außer den TX/RX-Paaren REFCLK, WAKE, PERST, CLKREQ?
  • Gibt es eine bestimmte Einschaltsequenz für PCI Express?
  • Wird der Host alle Geräte separat erkennen und auflisten, oder benötigt er dafür spezielle BIOS- oder UEFI-Firmware-Unterstützung?
  • Gibt es noch etwas, was ich beachten sollte?

Ich betrachte dies eher als eine Lernerfahrung als nur als eine Lösung für meine Bedürfnisse, daher schätze ich jede Hilfe, die ich bekommen kann. Danke schön!

Dieser Bus ist nicht dafür ausgelegt, auf diese Weise zu funktionieren, selbst wenn Sie sie dazu bringen können, ohne zu explodieren, zusammengesteckt zu werden, wird die Software wahrscheinlich versagen. Dieser m.2-Steckplatz muss einem einzelnen Gerät gehören.
Sie benötigen eine PCI-e-Bridge, um die Lanes für Sie aufzuteilen. Wahrscheinlich so etwas wie das, was unter dem Kühlkörper in diesem Gerät ist.
@brhans Das sieht nur aus wie ein einfacher Multiplexer, ich möchte stattdessen die 4 Spuren für verschiedene Geräte aufteilen und die volle Bandbreite für alle 4 Spuren nutzen können.
PCIe ist extrem fortschrittlich. Leg dich nicht damit an, wenn du fragen musst, ob du es muxen kannst oder nicht. Sie müssen sich zu etwas wie PCIe hocharbeiten.
@DKNguyen Ich habe PCIe-Riser in voller Größe gesehen, die einen 16x-Steckplatz mit minimaler Schaltung (ein Taktpuffer und ein paar zusätzliche Komponenten) in zwei 8x-Steckplätze aufteilen, und ich frage mich, warum das mit M.2 M nicht möglich wäre Schlüssel, der im Grunde nur ein PCIe x4-Port ist. Da ich mich dazu hocharbeiten sollte und ich es als Lernerfahrung betrachte; Gibt es Quellen, auf die Sie mich verweisen können?
Bei so etwas wie PCIe spielt auch die Art und Weise, wie der Trace geroutet und aufgebaut wird, eine Rolle. Das ist, als würde man auf eine Antenne schauen und denken, es sei einfach, weil es nur ein Stück Metall ist. Es ist das Zeug, das da ist, aber Sie bemerken es nicht, weil es integriert und nahtlos ist, was Sie schließlich erwischt. Das PCB-Layout und die Übertragungsleitung.
@DKNguyen Danke für die Antworten. Ich möchte mehr lernen, wo soll ich anfangen?
Übertragungsleitungen und Hochgeschwindigkeits-Leiterplattenlayout.
@özg Die von Ihnen erwähnten x16-zu-Dual-x8-Konverter sind ein völlig anderes Szenario. Sie verwenden etwas namens Slot Bifurcation, um die Aufteilung der Lanes eines einzelnen Slots in zwei Geräte zu ermöglichen. Dies beruht auf allen Spuren, die zum Prozessor-Root-Komplex zurückgehen, und auf spezieller CPU- und BIOS-Unterstützung - die Verzweigung funktioniert nur, wenn die CPU über einen Root-Port verfügt, der als einzelner x16-Steckplatz oder x8/x8 oder x8/x4 verdrahtet werden kann /x4-Modi. Dies ist nicht etwas, das M.2-Steckplätzen nicht zur Verfügung steht, und daher benötigen Sie einen aktiven PCIe-Switch, dessen Datenblätter normalerweise unter NDA stehen.

Antworten (1)

Jenseits der physikalischen Schicht haben Sie Kernelsysteme auf sehr niedriger Ebene auf CPU-Ebene, für die Sie komplexe Treiber schreiben müssten, vielleicht sogar das BIOS neu schreiben müssten.

Der I2C-Bus wird für einige spezifische Low-Level-Systeme verwendet und ist oft nicht auf Verbraucherprodukten implementiert, sondern nur auf High-End-Motherboards.

Da der I2C-Bus offen ist, kann ich sie einfach alle zusammenbinden? (Dasselbe gilt für SMBus)

Nein, dies könnte einige der Chips auf dem Motherboard deaktivieren, da die Leitung möglicherweise für andere Zwecke (z. B. Stromversorgungssteuerung usw.) gemeinsam genutzt wird.

Welche Funktion haben die WAKE#- und PERST#-Leitungen?

Wake dient dazu, den Computer von der Hardware aufzuwecken.

Wird der Host alle Geräte separat erkennen und auflisten, oder benötigt er dafür spezielle BIOS- oder UEFI-Firmware-Unterstützung?

Das tut es, aber es weiß nicht unbedingt, wie es mit ihnen kommunizieren soll, daher ist der Fahrer erforderlich.

Gibt es noch etwas, was ich beachten sollte?

Die Geschwindigkeit des Busses macht es schwierig, mit einer MCU zu arbeiten, und normalerweise sind FPGA / teure kundenspezifische Chips erforderlich. Es gibt auch viel IP und nicht viele Informationen sind verfügbar.