Guten Tag, ich arbeite gerade an einem Ethernet-Switch von Micrel (KSZ8895RQXIA) und möchte die Ports über die SPI-Schnittstelle konfigurieren aus Sicherheitsgründen. Noch eine zusätzliche Information: Es existiert kein EEPROM. Kommunikation zw. Ports Beispiel: - Port 3 (P3) mit P4 und P5 - P1 nur mit P3 Jedoch weiß ich nicht welche Register dafür interessant sind, da ich bisher keine Erfahrung damit gemacht habe. Im Datenblatt sehe ich unter Port Adressen keine Option wohin ich senden und woher ich empfangen möchte. Muss ich mit der statischen MAC Tabelle arbeiten? Auch weitere hilfreiche Links sind gefragt. Aktuellste Datenblatt: ww1.microchip.com/downloads/en/DeviceDoc/00002246A.pdf Ich bedanke mich im Voraus für eure Hilfe. Mfg Mo
Muhammed Ü. schrieb: > Im Datenblatt sehe ich unter > Port Adressen keine Option wohin ich senden und woher ich empfangen > möchte. > > Muss ich mit der statischen MAC Tabelle arbeiten? nein. Verwende VLAN, die Ports die Datenaustauschen dürfen müssen in gleiche VLAN.
Muhammed Ü. schrieb: > Kommunikation zw. Ports Beispiel: > - Port 3 (P3) mit P4 und P5 > - P1 nur mit P3 > > Jedoch weiß ich nicht welche Register dafür interessant sind, da ich > bisher keine Erfahrung damit gemacht habe. Im Datenblatt sehe ich unter > Port Adressen keine Option wohin ich senden und woher ich empfangen > möchte. Mit den üblichen VLANs geht das, ist aber nicht ganz trivial. Das geht - je nach deinen Anprüchen - möglicherweise etwas einfacher mit so genannten port-based VLANs, Datenblatt-Stichwort "Port VLAN Membership". Pro Port wird per Bitmuster in Register Port x, Control 1, Bits 4-0 festgelegt, mit welchen anderen Ports er kommunizieren darf, in deinem Beispiel (das nicht ganz vollständig ist) etwa so: Port 1 = 0b00101 nur mit Port 3 Port 2 = 0b00010 mit keinem anderen Port (nicht benützt) Port 3 = 0b11101 mit Port 1, 4 und 5 Port 4 = 0b01100 nur mit Port 3 Port 5 = 0b10100 nur mit Port 3 Falls noch andere Kombinationen zulässig sind, eben die entsprechenden Bits setzen. So wie es ausschaut, ist bei dir Port 3 der wichtigste. Allerdings hat Port 5 (und nicht Port 3) bei diesem Switch die meisten Möglichkeiten. Deshalb wird dort normalerweise die Management-CPU angeschlossen (ggf. über das RMII). Darüber sollte man beim Verteilen der Ports von Anfang an nachdenken.
Ich bedanke mich vielmals für die schnellen Antworten und vorallem auf den Port 5 hinweis. Ich werde mir das VLAN/ Port-Based VLAN genauer unter die Lupe nehmen und auf diese Weise probieren.
Das vorgeschlagene "Port VLAN Membership" benötigt außer der einmaligen Initialisierung der entsprechenden Register keine weitere Software. Etwas raffiniertere Dinge kann man u.a. auch mittels "Tail Tagging Mode" realisieren, womit sich Ethernet-Pakete beim Senden und Empfangen gezielt an bestimmte Ports verschicken lassen. Hierfür ist allerdings ein Eingriff per Management-Software nötig und der MAC der Management-CPU muss am Port 5 angeschlossen sein. Zum allgemeinen Thema VLAN gibt es weitere Dokumente bei Microchip. Ganz am Rande: Falls du selbst Schaltplan und Platinen-Layout enfertigst und nicht eine fertige Platine mit dem Switch verwendest, solltest du unbedingt das zugehörige Design-Kit bei Microchip herunterladen.
Eberhard H. schrieb: > möglicherweise etwas einfacher mit > so genannten port-based VLANs, Datenblatt-Stichwort "Port VLAN > Membership". Ich habe jetzt mit Port VLAN membership gearbeitet und wenn es geklappt hätte, wäre es natürlich zu einfach gewesen. Port1: 0b11111 (0x1F) Port2: 0b00011 (0x03) Port3,4,5: 0b11101 (0x1D) Am Port3 ist mein Raspberry über Ethernet angeschlossen und am Port 4 mein Laptop über Ethernet. Laut dem membership sollte es ja möglich sein vom Port 4 an Port 3 zu pingen, oder berücksichte ich einen wichtigen Teil dabei nicht? Auch die anderen Ports kommunizieren nicht mit einander. Wenn ich meinen Switch starte und alles offen lasse, funktioniert es aber sobald ich mit Port VLAN werte überschreibe, kann ich nichts mehr pingen. Meldung: .129=laptop, .161=raspberry Ping wird ausgeführt für 10.54.0.161 mit 32 Bytes Daten: Antwort von 10.54.0.129: Zielhost nicht erreichbar. Antwort von 10.54.0.129: Zielhost nicht erreichbar. Antwort von 10.54.0.129: Zielhost nicht erreichbar. Eberhard H. schrieb: > Zum allgemeinen Thema VLAN gibt es weitere Dokumente bei Microchip. Das Dokument habe ich bereits bei Microchip heruntergeladen und durchgelesen. Da muss ich jetzt mit 802.1q VLAN und VLAN table arbeiten oder muss über den Tail Tagging Mode gehen?
Die Sache mit den port-based VLANs müsste tatsächlich so einfach funktionieren, wie geschildert, also ausschließlich per Schreiben der korrespondierenden VLAN-Membership-Bit-Muster in die Switch-Register 17/33/49/65/81. Diese VLAN-Membership-Einträge haben eine höhere Priorität als andere VLANs. Statt Ping könntest du als Test versuchen, den Switch mit zwei der zulässigen Ports in eine bestehende Internet-Verbindung mit dem Laptop einzufügen. Wenn der Internetzugriff weiterhin klappt, umstecken auf ein nicht zulässige Port-Kombination. Dann sollte ein Zugriff nicht mehr möglich sein. Werden per Management-Interface nur die o.g. Register beschrieben oder gibt es weitere Software-Eingriffe am Switch?
Eberhard H. schrieb: > Die Sache mit den port-based VLANs müsste tatsächlich so einfach > funktionieren, wie geschildert, also ausschließlich per Schreiben der > korrespondierenden VLAN-Membership-Bit-Muster in die Switch-Register > 17/33/49/65/81. Ich habe genau diese Register beschrieben mit den genannten Hex-Werte. Eberhard H. schrieb: > Statt Ping könntest du als Test versuchen, den Switch mit zwei der > zulässigen Ports in eine bestehende Internet-Verbindung mit dem Laptop > einzufügen. Ich habe diesen Vorschlag ebenfalls versucht aber erfolglos. Sobald ich diesen Port beschreibe, geschieht nichts. Das komische ist, ich habe die Register 17/33/49/65/81 ausgelesen und sie geben wie im Datenblatt beschrieben, den Defaultwert (0x1f). Wenn ich diese Ports einfach überschreibe mit (0x1f) dann wird die Verbindung dennoch unterbrochen, obwohl es der gleiche Wert ist wie ausgelesen und default Wert. Wie gesagt, sobald der Switch startet funktioniert alles bis ich die Register überschreibe. Natürlich stoppe ich zuerst den switch bevor ich es beschreibe und nach dem beschreiben starte ich diesen wieder. Ich habe den Datenblatt jetzt mehrmals überflogen und habe auch keine zusätzlichen wichtigen Register gesehen, die ich eventuell enablen muss für Port VLAN membership. Die einzigen Register bisher waren, Register1 (0x01)= (Start Switch Bit) und die Ports Register 17/33/49/65/81. Habe ich etwas wichtiges Übersehen?
Muhammed Ü. schrieb: > Habe ich etwas wichtiges Übersehen? Du must mal mit wireshark schauen und nicht nur mit Ping schauen was übertragen wird. Nicht das der Switch die Daten mit tagging versendet.
Es sieht ziemlich danach aus, als würdest du in andere Register als die vorgesehenen schreiben. Dann versuche erst einmal, nach dem Reset die Default-Werte des Switches auszulesen, die im Datenblatt angegeben sind, am Besten einen kompletten Dump aller direkten Switch-Register und zwar so, dass du die Daten ggf. anschließend in eine Excel-Tabelle kopieren kannst (Adressen und Inhalte per TAB getrennt). Eine solche Funktion kannst du bestimmt später zur weiteren Fehleranalyse einmal gut gebrauchen. Wenn das dann zuverlässig klappt, kannst du versuchen einzelne Switch-Register zu verändern und diese wieder zurückzulesen. Register 17 wäre hierfür schon mal einen Versuch wert. Wenn das nicht zuverlässig klappt, passt bei deinem Management-Zugriff etwas nicht. PS: Nach dem Reset mit dem ersten Zugriff auf SPI wenigstens 100µs warten, siehe Datenblatt.
Eberhard H. schrieb: > am Besten einen kompletten > Dump aller direkten Switch-Register und zwar so, dass du die Daten ggf. > anschließend in eine Excel-Tabelle kopieren kannst > Eine solche Funktion kannst du bestimmt später zur weiteren > Fehleranalyse einmal gut gebrauchen. Ja, das wäre durchaus Sinnvoll. Eberhard H. schrieb: > Nach dem Reset mit dem ersten Zugriff auf SPI wenigstens 100µs > warten, siehe Datenblatt. Das habe ich von Anfang an beachtet und mit der Funktion usleep(500) die Zeit verzögert. Eberhard H. schrieb: > kannst du versuchen einzelne > Switch-Register zu verändern und diese wieder zurückzulesen. Register 17 > wäre hierfür schon mal einen Versuch wert. Das habe ich bereits für einzelne Register gemacht. Vor dem Schreiben habe ich die Register ausgelesen, dann beschrieben und ausgegeben, welche Daten geschrieben werden und dann nochmal die Register ausgelesen und die Daten werden übernommen. Ich werde jetzt mal alles abgleichen und werde mein Status dann wieder teilen. Bis dahin bedanke ich mich vielmals bei euch.
Es funktioniert. Es lag tatsächlich daran, dass andere Register sich auch überschrieben haben, in meinem Fall genau die Transmit- und Receivebits. Damit wurde alles behoben und bedanke mich vielmals für die Hilfe.
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.