Hallo,
Das neue RPI 4 Modul "CM4" hat eine PCIe gen 2 verausgeführt. Ich kenne
mich mit PCIe garnicht so aus aber kann man PCIe Gen 3.0 am CM4
verwenden, also ich meine sind aktuelle PCIe devices Abwärtskompatibel?
mfg
Hallo,
ja, die höheren Versionen sind abwärtskompatibel. Der Bus/Protokoll
handelt das entsprechend aus, was der langsame Teilnehmer noch schafft.
Gruß,
pcie schrieb:> Das neue RPI 4 Modul "CM4" hat eine PCIe gen 2 verausgeführt. Ich kenne> mich mit PCIe garnicht so aus aber kann man PCIe Gen 3.0 am CM4> verwenden, also ich meine sind aktuelle PCIe devices Abwärtskompatibel?JEDER PCIe Link startet als Gen1 Link. Per Handshake wird dann auf die
nächsthöhere Generation geschaltet, solange beide Linkparner das dann
unterstützen. Sagt einer Stop, ist die Aushandlung zuende. Damit ist die
Rückwärtskompatibilität gegeben.
Beim Pi wirst Du eher ein Treiberproblem haben. Viele PCIe Devices sind
nicht beim Kernel dabei. Dazu gibt es noch das BAR-Problem. BAR sind die
Base Address Registers, d.h. die Register, wo der Kernel den Karten
Adressräume zuordnet. Der Pi hat standardmäßig einen relativ kleinen
Adressraum für PCIe-Karten, so dass Du beispielsweise keine
PCIe-Grafikkarten zum Laufen bekommen wirst, weil die ein 256MB-Fenster
haben wollen, und das gibts halt beim Pi nicht.
Manche Treiber enthalten auch x86-Spezialitäten, die es auf ARM so nicht
gibt. Das musst Du dann entsprechend per #ifdef anpassen.
fchk
Vielen Dank für eure Antworten.
Deine Erklärung, fchk war sehr Aufschlussreich. Du sagtest, dass man
wird ein Treiberproblem bekommen. Wo kann ich mir ansehen, welche
treiber im Kernel implementiert sind?
Mit geht es vorallem um eine PCIe-PCIe bridge, da ich noch 4 Lanes, für
4 Devices benötige. Diese sind 3 Mac-Controller (z.b. LAN7430) und eine
PCIe zu PCI bridge, z.b. der xio2001.
Beide Devices habe ich schonmal gefunden:
https://github.com/raspberrypi
Auf www.kernel.org finde ich keine BCM2711_defconfig :(
Schau mal hier:
https://github.com/geerlingguy/raspberry-pi-pcie-devices
Der Typ hat auch einen Youtube Kanal.
https://www.youtube.com/watch?v=x0wl3ZaOq_g
Er hat sehr viel Arbeit in diese Geschichten investiert. Das ist die
Top-Quelle.
fchk
PS: Für Dein Vorhaben ist ein Jetson Nano oder ein Xavier NX deutlich
besser geeignet. Der Jetson Nano hat PCIe Gen2 x4 (also 4 Lanes anstelle
nur einer beim Pi), und damit hast Du viermal so viel Bandbreite. Die
wird bei dreimal Gigabit Ethernet schon ein Problem. Du wirst die drei
Ports eher nicht mit voller Geschwindigkeit betreiben können. Beim Nano
kein Problem. Da solltest Du eine i340-basierte 4GBE-Netzwerkkarte mit
voller Last bereiten können.
Xavier NX hat noch deutlich mehr Rechenleistung und einen PCIe Gen2 x1
extra, den Du z.B. für Deine PCIe-PCI-Brige verwenden kannst.
Danke sehr fchk,
ich bleibe aber bei dem Cm4. Die Ethernetschnittstellen werden nicht
vollgebrummt. Außerdem ist der Preis bei RPI4 unschlagbar. Das NVIDIA
kostet 10x soviel. Und Wärmeentwicklung ist auch ein thema, da ist RPI4
im Vorteil.
Ich hab ein paar sachen im netz gesucht, Leistungsaufnahme. Ja das
NVIDIA ist schon sehr sehr schnell aber es braucht auch 15W und das ist
für meien Anwendung schon zuviel :)
Das RPI4 brauchte dagegen bei volllast 7W. Um welchen faktor das NVIDIA
bestimmte sachen schneller rechnet, dazu kannn ich nichts sagen.
Vermeintlich Wissender schrieb:> Der Bus/Protokoll> handelt das entsprechend aus, was der langsame Teilnehmer noch schafft.
Das klingt ein wenig so, als wäre PCIe noch ein paralleler Bus zu allen
Geräten. Dem ist allerdings nicht so. PCIe sind Point-to-Point
Verbindungen zwischen zwei Geräten. Dieser Link kann dementsprechend auf
den kleinsten gemiensamen Nenner der beiden Endstellen gebracht werden.
Das hat zur Folge, dass auch eine langsame PCIe Karte mit Gen 1 nicht
das komplette PCIe System lahmlegt.
(Die Aussage PCIe Bus kommt hauptsächlich aus der Software-Ecke, da es
die Leute tatsächlich geschafft haben, trotz der massiven Hardware- und
Topologieänderungen von PCI zu PCIe die Softwareabstraktion nahezu
identisch zu halten)
Wieviel Geräte lassen sich an einer einzelnen Lane anschliesen, wenn man
ständig mit PCIe-switches erweitert? Da gibt es doch sicherlich eine
begrenzung.
pcie schrieb:> Wieviel Geräte lassen sich an einer einzelnen Lane anschliesen, wenn man> ständig mit PCIe-switches erweitert? Da gibt es doch sicherlich eine> begrenzung.
PCIe ist immer und grundsätzlich eine Punkt-zu-Punkt Verbindung. Ein
Gerät an einem Ende, eines am anderen. Die Bridge ist auch ein Gerät.
Brigdes solltest Du eher nicht kaskadieren, sondern eher eine mit der
passenden Anzahl an Downlink-Ports nehmen.
Sowas z.B.
https://www.diodes.com/assets/Datasheets/PI7C9X2G608EL.pdf
Dazu brauchst Du noch EINEN Clock Buffer mit der passenden Anzahl an
Ausgängen, der RefClk an die einzelnen Downlinks verteilt.
Sowas z.B.
https://www.silabs.com/documents/public/data-sheets/Si53156.pdf
Oder aber Du nimmst Netzwerk-Controller mit mehreren Ports. Ein Intel
i350-AM4 wäre beispielsweise eine übliche Wahl. Marvell und Broadcom
haben da auch einiges im Angebot.
fchk
PS: Die offiziellen PCIe Standards solltest Du gelesen haben. Und beim
Leiterplattenentwurf sollten Dir Sachen wie Impedanzkontrolle, Length
Matching (auf 0.15mm innerhalb einer Differential Pairs) und die
üblichen Layout-Regeln bekannt sein.
> PS: Die offiziellen PCIe Standards solltest Du gelesen haben. Und beim> Leiterplattenentwurf sollten Dir Sachen wie Impedanzkontrolle, Length> Matching (auf 0.15mm innerhalb einer Differential Pairs) und die> üblichen Layout-Regeln bekannt sein.
- Skew kleinhalten bei Leiterpaaren
- diffs bei PCIe >= Gen. 2 auf 85 Ohm routen.
- single ended Signale bei PCIe >= gen. 2 auf 50 Ohm routen.
- bei Switch:
-> Clock auftrennen und mit Clock-expander verteilen
-> Längenmatching für jedes Lane. (schön gedenglischt)
-> Platz zwischen zwei Diff´s >= 2*w+s
-> AC-Coupling in alle Transmit diffs?
-> hab das an einem Beispiel vom LAN7430 gesehen, ich mutmaße
das jedes Transmit paar AC-mäßig entkoppelt wird. Auch das Transmit
zwischen Prozessor/PCIe host und PCIe switch?
-> müssen die Diff-Signal terminiert werden?
-> wieso befinden sich bei diesem Beispiel (siehe link unten) die
CAP´s im RX?
https://blog.mbedded.ninja/electronics/communication-protocols/pci-express-pcie/pcie-hardware-design-guide/pcie-edge-connector-schematic-symbol-and-example-design.png
pcie schrieb:> - Skew kleinhalten bei Leiterpaaren> - diffs bei PCIe >= Gen. 2 auf 85 Ohm routen.> - single ended Signale bei PCIe >= gen. 2 auf 50 Ohm routen.
hier hast Du nur clkreq, wake und perst, und die sind völlig unkritisch.
> - bei Switch:> -> Clock auftrennen und mit Clock-expander verteilen> -> Längenmatching für jedes Lane. (schön gedenglischt)> -> Platz zwischen zwei Diff´s >= 2*w+s> -> AC-Coupling in alle Transmit diffs?> -> hab das an einem Beispiel vom LAN7430 gesehen, ich mutmaße> das jedes Transmit paar AC-mäßig entkoppelt wird. Auch das Transmit> zwischen Prozessor/PCIe host und PCIe switch?
TX von einer Seite kommen zum RX auff der anderen Seite, und die
Kondensatoren (max 0402) kommen immer auf die TX-Seite.
> -> müssen die Diff-Signal terminiert werden?
nein
> -> wieso befinden sich bei diesem Beispiel (siehe link unten) die> CAP´s im RX?
Weil das RX von der Karte das TX vom Host ist, und am TX kommen die Cs
hin.
fchk
Hallo,
Wenn ich einen switch verwende, dann muss der CLK durch nen Buffer wie
z.b. den Si53156 aufgetrennt werden. Stimmt die grundsätzliche Struktur,
wie ich sie auf der Abbildung zeige?
Wie lang muss die Clockleitung zwischen Host und Switch sein? Ich
mutmaße das die Strecken L_CLK0a + L_CLK0b == L_{Rx, Tx} sein müssen.
Wie funktioniert das negotiation? Mal angenommen der Host gang Gen2, der
switch könnte Gen3 und drei devices an dem switch könnten Gen1, Gen2 und
Gen3. In diesem Fall würde die Kommunikation (mit dem Si53156) nur mit
Gen2 funktionieren, also das Device 1 dürfte nicht funktionieren können,
da es den höheren Takt nicht kann. Für so einen Fall bräuchte ich dann
ein Buffer mit PLL, der die Clocks anpasst, muss ich das dann händisch
per I2C machen oder kann das z.b. der P16C20800S übernehmen?
Bei meinem Projekt wird es aber so sein, dass ich einen Gen2 Host habe
und einen Gen2 Switch verwende. Die devices sind Gen4 oder Gen5. In
diesem Fall dürfte einer "dummer" Clockbuffer wie der Si53156
ausreichen.
pcie schrieb:> Wenn ich einen switch verwende, dann muss der CLK durch nen Buffer wie> z.b. den Si53156 aufgetrennt werden. Stimmt die grundsätzliche Struktur,> wie ich sie auf der Abbildung zeige?
Ja, alle differentiellen Signale sind immer Punkt-zu-Punkt Verbindungen,
da darfst Du keinerlei Verzweigungen oder Stichleitungen haben. Das gilt
auch für Refclk. Und: Refclk hat keine AC-Kopplung.
> Wie lang muss die Clockleitung zwischen Host und Switch sein? Ich> mutmaße das die Strecken L_CLK0a + L_CLK0b == L_{Rx, Tx} sein müssen.
Das ist unkritisch. Der eigentliche Bitclock läuft auf den TX und RX
Lanes mit. Und die TX Lanes müssen auch nicht mit den RX Lanes
abgeglichen sein. Schau in den PCIe Standard, da steht alles drin.
> Wie funktioniert das negotiation? Mal angenommen der Host gang Gen2, der> switch könnte Gen3 und drei devices an dem switch könnten Gen1, Gen2 und> Gen3. In diesem Fall würde die Kommunikation (mit dem Si53156) nur mit> Gen2 funktionieren, also das Device 1 dürfte nicht funktionieren können,> da es den höheren Takt nicht kann.
Falsch. Der PCIe RefClk ist immer konstant 100MHz, egal bei welcher PCIe
Generation. Die Anforderungen an die Stabilität des Clocks wird mit
jeder Generation höher, nicht aber die Frequenz.
fchk
Danke sehr fchk,
noch zwei Fragen: Wozu wird der refclock benötigt? Alle devices haben
eine eigene Taktquelle, außerdem ist der Takt in tx und rx mit
eingebettet.
Ich lese in den Artikel immer wieder, das man sogar die polarität
vertauschen und lanes vertauschen kann. Aber ich bin mir nicht sicher ob
das eine besonderheit von Gen4 doer höher ist oder ob das PCIe schon
immer konnte.
pcie schrieb:> noch zwei Fragen: Wozu wird der refclock benötigt? Alle devices haben> eine eigene Taktquelle, außerdem ist der Takt in tx und rx mit> eingebettet.
Die lokalen Oszilatoren können auseinanderdriften, und dann müsste man
in den Datenstrom Bits einfügen oder wegnehmen. Durch einen gemeinsamen
Referenztakt vermeidet man das. Der Receiver wird dadurch einfacher
realisierbar.
> Ich lese in den Artikel immer wieder, das man sogar die polarität> vertauschen und lanes vertauschen kann. Aber ich bin mir nicht sicher ob> das eine besonderheit von Gen4 doer höher ist oder ob das PCIe schon> immer konnte.
Das ist unabhängig von der Generation, aber ich bin mir nicht sicher, ob
alle Bausteine das unterstützen müssen. Die Idee dahinter ist, dass man
das Layout einfacher und aus HF-technischer Sicht besser hinbekommt,
denn Du solltest ja nach Möglichkeit möglichst keine Vias haben. Schau
in die Datenblätter der beteiligten ICs.
fchk
Hallo,
ich dachte mir, ich nutze diesen Thread weiter. Ich beschäfftige mich
gerade mit dem PI7C9X2G404EL. Im Datenblatt wird leider nicht geklärt
wohin IREF mit einem 475 Ohm Widerständ verbunden werden soll.
Frank K. schrieb:> alle differentiellen Signale sind immer Punkt-zu-Punkt Verbindungen
CAN, RS485, RS422 ...
PTP und differentielle Übertragung sind zwei paar Schuhe.
späte Korrektur schrieb:> Frank K. schrieb:>> alle differentiellen Signale sind immer Punkt-zu-Punkt Verbindungen>> CAN, RS485, RS422 ...> PTP und differentielle Übertragung sind zwei paar Schuhe.
Hier ging es ausschließlich um PCIe.
pcie schrieb:> Hallo,> ich dachte mir, ich nutze diesen Thread weiter. Ich beschäfftige mich> gerade mit dem PI7C9X2G404EL. Im Datenblatt wird leider nicht geklärt> wohin IREF mit einem 475 Ohm Widerständ verbunden werden soll.
Geht gegen GND.
Wenn Du Dich als Firma registrierst, bekommst Du Zugriff auf ein Design
Kit zu dem Teil. Da ist auch ein Demoboard als Orcad/Allegro Dateien und
als PDF Schaltplan dabei, sowie Errata, Design Guidelines etc.
fchk