hallo allerseits, ich möchte mit einem FPGA ein paar Ethernet-Pakete versenden. Da mein Gerät immer mit einer einfachen Punkt-zu-Punkt Verbindung betrieben wird und immer im Vollduplex arbeitet, möchte ich mir den MAC sparen, da ich dann ja kein CSMA/CD benötige sondern einfach senden darf. Ich frage mich jetzt ein paar Dinge. Also, den PHY kriege ich schon mal ans Laufen, er baut einen Link auf und die Verbindung steht. Jetzt Frage ich mich: wenn ich ein Paket senden möchte, muss ich die Präambel auch an den PHY übertragen? macht das normalerweise der MAC? oder macht der PHY selbst eine Präambel? falls nein müsste ich also zuerst 6x 55 senden, und dann D5. Da Ethernet das LSB zuerst überträgt, muss ich also für D5 zuerst das Nibble 1010 an den MII Bus geben, dann 1011. Richtig? Aber ich muss immer nur die einzelnen Bytes beginnend beim LSB senden. Also wenn ich 01 02 03 04 senden will, dann muss mein MII nacheinander 1000 0000 0100 0000 1100 0000 0010 0000 senden. Auch richtig? Gibt es zum MII Interface irgendwo eine einigermassen übersichtliche Spezifikation, wo die Timings etc. ersichtlich sind? Im IEEE802.3 ist es natürlich beschrieben, aber dieses Dokument habe ich nicht :-( ausserdem ist es ziemlich umfangreich, mich interessiert im Moment aber nur MII. Gruss Tobias PS. ach ja, noch etwas fällt mir ein. Ich habe auf meinem FPGA-Board 2 PHYs. Ich habe gestern für einen Test mal die beiden MII über Kreuz miteinander verbunden. Also TXD an RXD, RX_DV an TX_EN und umgekehrt. Das hat funktioniert, ich konnte mit meinem Laptop anschliessend über dieses Konstrukt ins Netzwerk, aber die Verbindung war ziemlich langsam. Kann das daran gelegen haben, dass meine beiden PHYs asynchron zueinander liefen, und ich TX_EN asynchron zum Takt des jeweiligen PHY aktiviert hatte? Meines wissens müssen alle Eingangssignale synchron zum TX_CLK Takt sein, den der PHY ausgibt. Und die empfangenen Daten sind immer synchron zum RX_CLK. Ich nehme an, RX_CLK und TX_CLK können zueinander phasenverschoben sein? Da frage ich mich natürlich dann auch, wie ich die Daten gescheit in den FPGA bekomme. Theoretisch müsste dann mein FPGA ja mit >>25 MHz getaktet werden, damit ich eine saubere Flankenerkennung realisieren kann. Z.B. mit 50 MHz, aber ob das dann reicht?
:
Bearbeitet durch User
Welchen Phy hast Du und welches board? zwei PHYs deuten auf das Altera DE 115. Richtig? Das wäre dann der Alaska. Für den gibt es immer mal wieder eine halblegale SPEC zu laden. Ich habe auch sowas vor und mich mit den MODI befasst, stehe aber noch etwas auf dem Schlauch. Zu der TX-Problematik kann ich sagen, dass man das irgendwie setzen kann, um es zu timen - wie auch immer.
Ich habe einen Phy mal ohne gekauften MAC angeschlossen. Du musst die Präambel, also die 6 * 0x55 usw auch mit senden. wichtig ist auch, dass am Ende auch die CRC berechnet und mitgeschickt wird. Die war nicht so einfach zu erzeugen. Den 125 MHz Takt für den Phy hat der FPGA dann über eine PLL erzeugt. Und bei einem Marvel Alaska Chip muss dann noch eine um 90 Grad gedrehte Phase kommen. Ob due Nibbles oder Bytes schickst, hängt daran, ob der PHY mit MII oder RGMII angeschlossen ist. Und bei der Bitreihenfolge habe ich mit Wireshark geschaut, was da wirklich auf dem Bus liegt. Ich meine nicht, dass ich die Bits noch im Nibble gedreht habe. (ist schon länger her)
1. es ist 7 0x55 und dann 0xd5 als präambel 2. ohne crc32 - wert(4 bytes und der muss korrekt sein) am ende wirst du nix sehen - die ethernetkarte wird das paket ohne es an dein betriebssystem zu senden direkt verwerfen 3. dein paket muss mindestens 64 byte lang sein - kein einziges byte weniger oder bei wireshark wird auch nix auftauchen 4. is dein paket länger als 15xx (genaue zahl bitte nachschlagen) siehst du auch nix mehr 5. lsb/msb/übertragungsart / -timing sind alle von der konfiguration des phys abhängig -> dein phy wird wohl in einer grundkonfiguration sein, die meist über pull-up /pull-down - widerständen an irgendwelchen pins eingestellt wird -> also datenblatt vom phy checken -> datenblatt von deinem evalboard checken -> vergleichen und dann weißt du wie du die daten zum phy schicken musst.
Hallo zusammen danke erstmal für die Tipps. Nein, habe noch das DE115, somit auch nicht den Alaska Phy... Sondern das Cyclone V Board. Gibt es für MDIO etwa schon was fertiges?
PittyJ schrieb: > Ich habe einen Phy mal ohne gekauften MAC angeschlossen. D.h. direkt über den FPGA? > Du musst die Präambel, also die 6 * 0x55 usw auch mit senden. Das hatte ich mir gedacht. > wichtig ist auch, dass am Ende auch die CRC berechnet und > mitgeschickt wird. Und auch das hatte ich auf dem Schirm. Macht der Marvel eigentlich irgendwas an Daten alleine? > Die war nicht so einfach zu erzeugen. Ist das der Standard Ethernet CRC aus dem Internet? > Den 125 MHz Takt für den Phy hat der FPGA dann über eine PLL erzeugt. Ich bin nicht sicher, aber das auf meinem PCB so ist, muss ich gucken. > Und bei einem Marvel Alaska Chip muss dann noch eine um 90 Grad gedrehte > Phase kommen. Welches Signal muss gedreht werden? Du meinst 90 Grad verzögert für den Takt nach den Daten nehme ich an? Oder um -90 Grad, damit es quasi Taktende + Reserve ist? > Ob due Nibbles oder Bytes schickst, hängt daran, ob der PHY mit MII oder > RGMII angeschlossen ist. Was würdest Du empfehlen, ist einfacher?
Tobias Plüss schrieb: > > Im IEEE802.3 ist es > natürlich beschrieben, aber dieses Dokument habe ich nicht :-( > Dem kann abgeholfen werden, völlig legal: http://standards.ieee.org/about/get/802/802.3.html
Link vergessen. Beitrag "Ethernet GMII" > Ob due Nibbles oder Bytes schickst, hängt daran, ob der PHY mit MII oder > RGMII angeschlossen ist. Was würdest Du empfehlen, ist einfacher? MII ist einfacher.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.