Forum: Mikrocontroller und Digitale Elektronik Ethernet-Switch KSZ8895RQXIA: Über SPI Portweiterleitungskonfiguration


von Muhammed Ü. (mo219)


Lesenswert?

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

von Peter II (Gast)


Lesenswert?

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.

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

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.

von Muhammed Ü. (mo219)


Lesenswert?

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.

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

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.

von Muhammed Ü. (mo219)


Lesenswert?

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?

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

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?

von Muhammed Ü. (mo219)


Lesenswert?

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?

von Peter II (Gast)


Lesenswert?

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.

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

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.

von Muhammed Ü. (mo219)


Lesenswert?

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.

von Muhammed Ü. (mo219)


Lesenswert?

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
Noch kein Account? Hier anmelden.