Forum: Mikrocontroller und Digitale Elektronik Lan9303 + pic32


von Qone (Gast)


Lesenswert?

Hallo  zusammen,

Mein lan9303 wird sehr heiß nach einiger minuten und dann bleibt
Oft hängen- keine Kommunikation  mit dem möglich.
Kann er wegen  zu hocher Temperatur  nicht mehr funktionieren?
Nach Abkühlung und neu start gehr er wieder.

Hat jemand solche probleme gehabt?  Siet es nach einem Layout  Fehler 
aus oder configuration?

von Qone (Gast)


Lesenswert?

Lan9303 wurde mit straps configuriert:
- rmii mode
- full duplex

von Arc N. (arc)


Lesenswert?

Qone schrieb:
> Hallo  zusammen,
>
> Mein lan9303 wird sehr heiß nach einiger minuten und dann bleibt
> Oft hängen- keine Kommunikation  mit dem möglich.
> Kann er wegen  zu hocher Temperatur  nicht mehr funktionieren?
> Nach Abkühlung und neu start gehr er wieder.
>
> Hat jemand solche probleme gehabt?  Siet es nach einem Layout  Fehler
> aus oder configuration?

Kenne zwar das Teil nicht im speziellen, aber wie sieht das Layout aus?
QFN Exposed Pad, Thermal Vias, möglicherweise Solder Voids unterhalb des 
ICs?

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

Der LAN9303 benötigt bei 100Base-TX laut Datenblatt stolze 190mA @ 3,3V, 
dazu kommen noch 2x 42mA Übertragerstrom. Bei 10Base-T liegen die 
Verhältnissse noch etwas ungünstiger. *

Je nachdem, wie die im Baustein erzeugte Wärme vom Gehäuse abgeführt 
wird, beträgt die Temperaturerhöhung auf dem Chip rund 30°C bis 50°C 
gegenüber der direkten Umgebungstemperatur. Das kann also schon 
reichlich heiß werden, sollte die Funktion aber nicht beeinträchtigen, 
solange die Chip-Temperatur (Tj, also intern) nicht an 125°C ** 
herankommt.

Abgesehen von den Wärmeverlusten und der damit verbundenen 
Temperaturerhöhung kann das nicht näher beschriebene Problem aber auch 
woanders liegen.

Du solltest zuerst überprüfen, ob noch externer Datenverkehr zwischen 
den beiden PHY-Ports möglich ist, indem Du eine bestehende 
Ethernet-Verbindung (z.B. zwischen PC und Internet) auftrennst und die 
beiden PHY-Ports quasi als Brücke an der Auftrennung einfügst. Das RMII 
würde ich hierfür sogar deaktivieren (z.B. per µC-Software).

Zur Überprüfung kannst Du auch noch den Switch-Status per MIIM/SMI 
mittels µC auslesen.

Erst wenn dieser PHY-zu-PHY-Pfad zuverlässig funktioniert, schaust Du 
die RMII-Schnittstelle zwischen Switch und µC genauer an. Oft liegt dort 
der Hund begraben.

Es kann aber auch viele andere Gründe geben, die man erst mit einem 
genauen und vollständigen Schaltplan (einschl. Übertrager), ggf. auch 
anhand des Platinen-Layouts analysieren kann.

Ist es eine selbst geschnitzte Platine oder etwas fertig Gekauftes?

Schließlich kann auch eine falsch eingesetzte Management-Software zu 
Problemen zwischen Switch und µC führen.

Noch etwas: Falls der µC auch das MII unterstützt und hierfür genügend 
Pins frei sind, ist das MII immer dem RMII vorzuziehen.

* Es gibt vergleichbare-Ethernet-Switches, die eine deutlich geringere 
Gesamtstromaufnahme haben.

** Nicht im Datenblatt des LAN9303 spezifiziert, aber ein üblicher 
Maximalwert für solche Bausteine.

von Qone (Gast)


Lesenswert?

Schon vielen  Dank  fur eure  Antworten!

Layout  oder Schaltplan  habe ich momentan nicht dabei.
Es ist auch oft, dass der uC nach neu start keine ip bekommen kann, muss 
man dafur mehrere mals arps senden um auf den draufzukommen, oder mehere 
mals reseten.
Platine wurde in china hergestellt.
Ich mache keine Einstellungen über smi für lan9303 beim aufstart. 
Vielleicht  fehlt ihm was deswegen?

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

Solange der Switch nicht rund läuft, musst Du dir über IP-Adressen keine 
Gedanken machen, denn diese werden in einem höheren Layer übertragen und 
kümmern einen Switch normalerweise nicht (sondern nur MAC-Adressen).

Das Debuggen eines neuen Ethernet-Designs geschieht immer harwaremäßig 
von der PHY-Seite aus.

Sind bei Dir die Übertrager mit auf der gekauften Platine oder hast Du 
sie selbst angebracht und wie sind sie dann angeschlossen? Alle Details 
rund um die Übertrager sind wichtig.

Bevor hier nicht alles nach Vorschrift des Ethernet-Baustein-Herstellers 
ausgeführt ist, braucht man an anderer Stelle erst gar nicht suchen.

Das Management-Interface eines PHYs oder (wie hier) eines Switches ist 
immer eine gute Hilfe bei der Fehlersuche.

Am besten, man zieht darüber per Software alle Register des/der PHYs 
bzw. des Switches in eine Datei ab und vergleicht die Voreinstellungen 
laut Datenblatt (und laut Pin-Strapping) mit den tatsächlichen Werten, 
einmal direkt nach einem Reset und dann nach Auftreten des Fehlers (bei 
der Fehlersuche also insgesamt mindestens 3 Registersätze).

Bei Switches gibt es einen umfangreichen Status/Statistik-Registersatz 
(beim LAN9303 per SMI auszulesen), mit dessen Inhalt man sehr schnell 
auf Fehlerursachen schließen kann. Allerdings ist das Auswerten ziemlich 
mühsam, falls man keine Erfahrung damit hat.

Bei den wenigen PHY-Registern (ein Satz pro PHY-Port, per MIIM oder per 
SMI auszulesen) gibt es entsprechend wenige Hinweise auf Fehler. Aber 
vielleicht hilft das bereits, einfache Fehler zu lokalisieren.

Achtung: Die beiden Pins MDC und MDIO (Pull-Up nicht vergessen) eines µC 
als Teil dessen Ethernet-MAC unterstützen hardwaremäßig normalerweise 
nur das per IEEE-802.3 definierte MIIM-Protokoll, nicht irgend ein 
(herstellerspezifisches) SMI-Protokoll eines Switches, das bei 
Verwendung per Bit-Banging emuliert werden muss (falls es beim Switch 
nicht ein separates anderes Slave-Management-Interface gibt, dann meist 
SPI oder I²C).

Eine weitere Hilfe beim Fehlersuchen sind diverse Loopback-Modi, sowohl 
bei PHYs als auch bei Switches. Auch hier sind die 
Management-Schnittstellen der Weg zum Ziel.

Ich sollte erwähnen, dass ich keine eigene Erfahrung speziell mit dem 
LAN9303 habe, nur mit PHYs und Switches (und deren 
Management-Schnittstellen) anderer Hersteller.

von Qone (Gast)


Lesenswert?

Was meinst  du  mit übertrager?

Mir ist jetzt aufgefallen, dass der switch mit uC stabil läuft wenn nur 
ein phy genutzt wird. Sobald ich die nachrichten über das zweite phy 
verschicke, hangt der uC nach einer ca. minute.

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

Qone schrieb:
> Was meinst  du  mit übertrager?

Hast Du zwischen den beiden PHYs und deren RJ45-Buchsen keine 
1:1-LAN-Übertrager angeschlossen?
Wie schauen die Schaltungsdetails an dieser Stelle aus?

Wenn keine LAN-Übertrager vorhanden sind (diesen Fall gibt es in 
besonderen Fällen auch), musst Du erläutern, warum.

> Mir ist jetzt aufgefallen, dass der switch mit uC stabil läuft wenn nur
> ein phy genutzt wird. Sobald ich die nachrichten über das zweite phy
> verschicke, hangt der uC nach einer ca. minute.

Falls an einem µC-MAC ein einzelner PHY (also 1 Port) durch einen Switch 
ersetzt wird (offensichtlich wie bei Deiner Applikation, z.B. um mehr 
Ports zu bekommen), wird oft unbedacht der bereits vorhandene 
08/15-PHY-Software-Treiber belassen, wodurch manchmal unvorhergesehene 
Effekte passieren.

Dann ist es besser, man deaktiviert den PHY-Software-Treiber (oder passt 
ihn an den Switch an), denn ein Switch benötigt diesen 
PHY-Software-Treiber im Normalfall nicht.

Erst wenn ein Switch-Management benötigt wird, muss man per 
Management-Interface auf den Switch zugreifen, dann aber nicht per 
eingeschränktem MIIM (das kann – wie bereits beschrieben - nur auf die 
PHY-Register zugreifen), sondern per SMI (wie beim LAN9303), SPI oder 
I²C, je nachdem, was der jeweilige Switch als 
Switch-Management-Schnittstelle unterstützt.

von Qone (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe eth switch an Buchsen angeschlossen wie es im eingefügten bild 
dargestellt ist(lan9303 phy Informationion sheet). Als Buchsen habe ich 
si-60062-f genommen.ist der übertrager in ihnen integriert?

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

Qone schrieb:
> Ich habe eth switch an Buchsen angeschlossen wie es im eingefügten bild
> dargestellt ist(lan9303 phy Informationion sheet). Als Buchsen habe ich
> si-60062-f genommen.ist der übertrager in ihnen integriert?

Sowohl im Schaltbild als auch beim verwendeten SI-60062-F (2x für 2 
PHYs) sind die RX/TX-Übertrager jeweils integriert.

Wichtig ist, dass alle chipseitigen Mittenanzapfungen gemäß Schaltbild 
angeschlossen sind, also paarweise per RX und TX (bei SI-60062-F jeweils 
die Pins P2 und P5) über 10 Ohm an die analogen 3,3V des LAN9303.

P8 des SI-60062-F wird mit dem Schirm des RJ-45 verbunden, nicht mit der 
Masse des Systems. Zwischen Schirm und System-Masse wird statt R29 = 0 
Ohm oft auch ein 1nF/2kV-Kondensator verwendet.

Kontrolle: Wenn die Übertrager richtig angeschlossen sind, sollten an 
den 10-Ohm-Widerständen bei einem bestehenden Link (nur dann) rund 200mV 
abfallen.

Die RX/TX-Abschlusswiderstände (je 49,9 Ohm) müssen zwingend auch alle 
vorhanden sein. Falls sie nicht bereits auf der gekauften 
LAN9303-Platine sind, müssen sie nachgerüstet werden (möglichst nahe an 
den beiden PHYs).

- Klappt die vorgeschlagene "Brücke" mit den beiden PHY-Ports bereits 
zuverlässig?

- Hast Du schon überprüft, was der PHY-Software-Treiber genau macht?
- Welche PHY-Ports frägt er ab?

von Qone (Gast)


Lesenswert?

Die vorgeschlagene Brücke geklappt. Über das board komme ich mit meinem 
PC ins Internet. Ich habe noch kein treiber für switch. Werde  ich mal 
Gedanke  machen, wie ich register schreiben und lesen kann.

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

Wenn die "Brücke" zuverlässig klappt, bestätigt das, dass die PHYs 
richtig angeschlossen sind und der Switch an sich funktioniert.

Wenn nun über den 3. Port (das RMII*) durch den µC zugegriffen wird und 
das MIIM (Pins MDIO/MDC) angeschlossen und vermutlich irgend ein 
TCP/IP-paket installiert ist, kommt im Normalfall ein 
Standard-PHY-Treiber zum Einsatz.

Wie bereits angedeutet, muss dieser PHY-Software-Treiber bei Betrieb mit 
einem Switch entweder deaktiviert werden (denn ein Switch benötigt ihn 
nicht) oder mit einer sinnvollen Logik an den Switch angepasst werden.

Vielleicht bekommst Du sogar einen fertig angepassten Software-Treiber 
für den LAN9303 beim Hersteller.

* Sofern dieses richtig und zuverlässig funktioniert.

von Qone (Gast)


Lesenswert?

Ich habe gerade ein Verständnisproblem mit Write Register, um z.b. LED 
zu konfigurieren.
Hat jemand mit dem PHY Erfahrung?

LED Configuration Resister
Offset: 1BCh Size: 32 bits


Description:
...
5:0 LED Enable 5-0(LED_EN[5:0])
0:
1: Enable the associated pin as a LED output

Write Sequence:
In write sequence, the host sends 32-bit preamle, 2-bit start of frame, 
2-bit op code, 5-bit PHY Address, 5-bit Register Address, 2-bit turn
-around time, and finalle the 16-bits of data.

Wie kann ich PHY Addresse und Register Addresse bilden?

von Qone (Gast)


Lesenswert?

Oder anders gefragt wie 32 bit register Adresse von lan9303 mit 5 bit 
register von mac pic32 zu vergleichen?

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

Wie bereits gesagt: Ich habe mit dem LAN9303 (und mit PIC32) keine 
eigene praktische Erfahrung, aber mit Switches anderer Hersteller. Dort 
funktionieren einige Dinge etwas anders, wie z.B. die SMI-Schnittstelle.

Um per Management-CPU (hier PIC32) auf die Switch-Register zugreifen zu 
können, muss der LAN9303 im SMI-Management-Mode gestrappt sein (und bei 
Deiner Applikation offensichtlich auch im RMII-PHY-Mode).

Im SMI-Management-Mode erfolgt der Zugriff auf alle Switch-Register 
ebenso per MDIO/MDC-Pins, wie auch im MIIM-Mode (bei SMSC PMI genannt) 
auf die beiden PHY-Register-Sätze.

Wie beim LAN9303 die Unterscheidung zwischen SMI und PMI erfolgt, ist 
mir noch nicht ganz klar, offensichtlich automatisch per 
Protokoll-Format.

Es scheint, dass bei PHY_Address[4] = 1 das SMI-Format gilt und bei 
PHY_Address[4] = 0 das PMI-Format, wobei aber letzteres nicht explizit 
im Datenblatt beschrieben ist (es wäre gegenüber der MIIM-Spezifikation 
in IEEE-802.3 eine Einschränkung im Adressierungsbereich auf vier statt 
fünf Bits für die PHY-Adressen, bei diesem Switch aber sicher kein 
Problem, da im unteren Adressbereich festgelegt).

Der Vorteil dieser Methode* ist, dass man die MIIM-Hardware (Pins 
MDIO/MDC) des µC-MAC sowohl für das SMI als auch für das PMI verwenden 
kann, und zwar offensichtlich auch im Mischbetrieb (jeweils komplette 
Frames).

Das ist dann sehr praktisch, wenn man einen vorhandenen 
PHY-Software-Treiber (zwingend auf den Switch angepasst!!), der 
normalerweise das PMI/MIIM bedient, zusammen mit einer 
Switch-Management-Software verwenden möchte, die zwangsläufig das SMI 
nützen muss.

Das Format für SMI und PMI ist in den Tabellen 10.1 und 10.2 des 
Datenblatts dargestellt.

Ein 32-Bit-Frame wird zusammengesetzt aus 4 Bits für Start und Op-Code 
(Lesen/Schreiben), 10 Bit PHY/Register-Adresse, 2 Bit TA und 16 
Datenbits. Die 32 Bit für Preamble werden automatisch vom MAC erzeugt.

Die 32 Bit eines Befehls/Daten-Frames werden durch den µC in die 
entsprechenden MAC-Register geschrieben bzw. 16 Bit davon bei einem 
Lesebefehl von dort gelesen.

Die einzelnen 32+32 Bits sieht man per Scope auf der MDIO-Leitung 
zeitlich von links (MSB) nach rechts (LSB).

Bei einem Schreibbefehl sendet der MAC des µC also 32+32 Bits.
Bei einem Lesebefehl sendet er nur 32+14 Bits. Der LAN9303 bedient dann 
direkt anschließend die beiden TA-Bits und sendet 16 Datenbits.

Voraussetzung für eine solide SMI/PMI-Funktion ist ein geeignet 
dimensionierter Pull-Up-Widerstand bei MDIO (typisch 4,7kΩ bis 1kΩ, je 
nach MDC-Frequenz, die normalerweise 2,5MHz beträgt).

Noch etwas:

Die PHY-Register sind (per IEEE-802.3) alle 16 Bit breit, d.h. mit einem 
Schreib/Lese-Befehl wird ein PHY-Register beschrieben/gelesen.

Die Switch-Register sind beim LAN9303 dagegen 32 Bit breit, d.h. man 
benötigt immer zwei Schreib/Lesebefehle pro Switch-Register-Zugriff. Das 
Register-Adressbit 0 legt fest, ob die oberen oder die unteren 16 Bit 
geschrieben bzw. gelesen werden.

Zunächst solltest Du versuchen, ein paar Register mit bekanntem Inhalt 
per SMI (Switch) und PMI (die beiden PHY-Ports) auszulesen.

Erst wenn das Lesen solide klappt, kannst Du auch in die PHY- bzw. 
Switch-Register beschreiben.

Du bist Dir sicher im Klaren, dass die Ethernet-Daten zwischen Switch 
und µC ausschließlich über das RMII gehen. Das ist dann die nächste 
Übung.

* Bei anderen SMI-Definitionen, die nicht mit dem MIIM-Standard konform 
sind, muss man oft auf Bit-Banging oder andere Tricks zurückgreifen.

: Bearbeitet durch User
von Qone (Gast)


Lesenswert?

Um einen phy register zu schreiben,  muss man erst den EMAC1MADR von 
pic32 mit phy adresse und register adresse beschreiben:
EMAC1MADR:
32:24  --------
23:16  --------
15:8    ---00000 (phy Adresse )
7:0       --00000 (register Adresse)

Ein einem beispiel vom Datenblatt pic32 phy adresse ist immer gleich 
0x1f und so wird in den register geschrieben :
EMAC1MADR  = reg_add | (phy_adrr << 8)
Wie kann ich nun auf diese weise einen 32 bit register  von lan9303 
schreiben?

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

Wie gesagt: Der SMI-Frame wird in Tabelle 10.1 beschrieben.

Demnach wird die Adresse des zu addressierenden Switch-Registers in zwei 
Teile aufgeteilt, nämlich die unteren Bits [5:1] kommen nach REGISTER 
ADDRESS [4:0] bzw. das untere Byte von Register EMAC1MADR.

Und die nächsten 4 Bit [9:6] kommen nach PHY ADDRESS [3:0], das nächst 
höhere Byte von EMAC1MADR.

Zusätzlich muss für den SMI-Mode noch Bit 4 bei PHY ADDRESS bzw. (wenn 
ich mich nicht verzählt habe) Bit 12 von EMAC1MADR auf 1 gesetzt werden 
(wie gesagt, PIC32 ist nicht mein Ding).

Die 16-bit-Daten pro SMI-Frame kommen schließlich nach DATA bzw. werden 
aus DATA gelesen.

Für einen vollständigen Switch-Register-Zugriff sind (wie bereits 
beschrieben) wegen den 32-bit-Daten bei den Switch-Registern (statt 16 
Bit bei PMI und den PHY-Registern) zwei SMI-Frames nötig, die sich 
bezüglich Adressierung im LSB von REGISTER ADRESS unterscheiden (1 für 
das höherwertige 16-bit-Wort (also Bytes 3 und 2) und 0 für das 
niederwertige 16-bit-Wort (also Bytes 1 und 0).

Das steht übrigens alles ausführlich im LAN9303-Datenblatt direkt 
oberhalb von Tabelle 10.1.

---

Das von Dir erwähnte EMAC1MADR-Beispiel bezieht sich nicht auf den 
SMI-Mode, sondern allgemein auf den PMI-Mode (wenn also nur ein PHY 
statt einem Switch am MAC des µC angeschlossen ist), der ganz allgemein 
pro PHY* bis zu 32 PHY-Register addressieren kann.

Viele der Ethernet-PHY-Register (insbesondere die unteren 16) sind per 
IEEE-802.3-Standard allgemein gültig und herstellerunabhängig bitgenau 
festgelegt.

Die PHY-Register des LAN9303 sind in Tabelle 13.8 ganz knapp beschrieben 
(hier heißen sie INDEX #), denn sie werden im Switch-Register-Satz 
gespiegelt und sind dort ausführlich beschrieben (siehe Links in Tabelle 
13.8).

Die PHY-Adresse für die beiden PHYs des LAN9303 ist je nach 
phy_addr_sel_strap entweder 1 und 2 (Standard) oder 2 und 3.

Die PHY-Register und PHY-Adressen werden für einen 
Standard-PHY-Software-Treiber benötigt, der bei einem Switch ggf. 
richtig angepasst werden muss (wie bereits mehrfach erwähnt).

Falls man bei einem Switch auschließlich mit dem SMI und nicht auch noch 
zusätzlich mit dem PMI arbeiten will, kann man die echten PHY-Register 
des LAN9303 also auch indirekt per SMI erreichen. Allerdings müsste man 
einen allgemeinen PHY-Software-Treiber (so überhaupt verwendet) dann 
komplett auf SMI umschreiben. Wer will sich das antun?

So langsam solltest Du die Zusammenhänge begriffen haben, oder?
Ich habe auch nur das LAN9303-Datenblatt gelesen ...

* Theoretisch können wegen den 5 PHY-Adress-Bits laut IEEE-802.3 bis zu 
32 verschiedene PHYs gemeinsam von einem einzigen MIIM bedient werden. 
Bei Einzel-PHYs wird deren PHY-Adresse meist per Pin-Strapping 
festgelegt.

von Qone (Gast)


Lesenswert?

Danke! Nun verstehe ich, wie ich phy_addr und reg_addr aus switch system 
registern bilden kann. Deine Beschreibung und die Tabelle 10.1 echt gut 
geholfen. Ich kann schon  was lesen, aber die werte können variieren und 
dann halb richtig. Z.b. für test_byte 0x064 bekomme ich 7654321h ( 
richtig  87654321h) und für chip id 1303 (richtig  9303).

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

Du machst Fortschritte, wenn auch ziemlich langsam. ;-)

Offensichtlich geht beim Lesen per SMI (und vermutlich auch per PMI) 
genau das höchstwertige Bit des 16-Bit-Datenwortes verloren.

Das kann zwei Gründe haben:

1. Der Pull-Up-Widerstand an MDIO ist nicht richtig dimensioniert.
Für den LAN9303 werden 1,5 kOhm nach 3,3V (digitale Versorgung) 
vorgeschlagen.

1.1 Wie groß ist der Wert tatsächlich?
1.2 Werden genau dieselben 3,3V auch beim RMII des PIC32 verwendet?

2. Für MDC sind beim LAN9303 im SMI-Betrieb maximal 2,5 MHz zulässig.

2.1 Welche Taktfrequenz wird vom PIC32 bei MDC geliefert?

In EMAC1MCFG des PIC32 muss per CLKSEL<3:0> bzw. EMAC1MCFG<5:2> die 
CPU-Frequenz so heruntergeteilt werden, dass sich nicht mehr als 2,5MHz 
für MDC ergeben, siehe auch Tabelle "MIIM Clock Selection" im 
PIC32-Ethernet-Referenz-Manual*.

2.2 Wie groß ist die CPU-Frequenz und welchen Wert hat CLKSEL<3:0>?

Am Besten MDIO und MDC auch per Scope überprüfen (beide gemeinsam), 
insbesondere das erste MDIO-Bit direkt nach TA (siehe Tabelle 10.1).
MDIO muss ausreichend steile Flanken haben, MDC sowieso.

* Eigentlich wollte ich mich damit nicht auch noch beschäftigen ... ;-)

von Qone (Gast)


Lesenswert?

Eberhard H. schrieb:
> Du machst Fortschritte, wenn auch ziemlich langsam. ;-)
>
> Offensichtlich geht beim Lesen per SMI (und vermutlich auch per PMI)
> genau das höchstwertige Bit des 16-Bit-Datenwortes verloren.
>
> Das kann zwei Gründe haben:
>
> 1. Der Pull-Up-Widerstand an MDIO ist nicht richtig dimensioniert.
> Für den LAN9303 werden 1,5 kOhm nach 3,3V (digitale Versorgung)
> vorgeschlagen.
>
> 1.1 Wie groß ist der Wert tatsächlich?
> 1.2 Werden genau dieselben 3,3V auch beim RMII des PIC32 verwendet?
>
> 2. Für MDC sind beim LAN9303 im SMI-Betrieb maximal 2,5 MHz zulässig.
> 2.1 Welche Taktfrequenz wird vom PIC32 bei MDC geliefert?
>
> In EMAC1MCFG des PIC32 muss per CLKSEL<3:0> bzw. EMAC1MCFG<5:2> die
> CPU-Frequenz so heruntergeteilt werden, dass sich nicht mehr als 2,5MHz
> für MDC ergeben, siehe auch Tabelle "MIIM Clock Selection" im
> PIC32-Ethernet-Referenz-Manual*.
>
> 2.2 Wie groß ist die CPU-Frequenz und welchen Wert hat CLKSEL<3:0>?
>
> Am Besten MDIO und MDC auch per Scope überprüfen (beide gemeinsam),
> insbesondere das erste MDIO-Bit direkt nach TA (siehe Tabelle 10.1).
> MDIO muss ausreichend steile Flanken haben, MDC sowieso.
>
> * Eigentlich wollte ich mich damit nicht auch noch beschäftigen ... ;-)

Am MDIO habe ich einen 1.5K pull up wiederstand. LAN9303 und PIC32 haben 
die gleiche  3.3 V Spannung.

Warum für  MDC ist 2.5 MHz notwendig? Das verstehe ich nicht  ganz.
Ich betreibe MII im reduce mode und so verdoppelt  sich die Taktfrequenz 
auf 50 MHz. So initialisiere ich ethernet MII mit System Frequenz  von 
PIC32 80 MHz  und 50 MHz als MII clock. Fur MII  nutze ich einen 50  MHz 
externen Referenz  clock von einem Oszillator.

von Qone (Gast)


Lesenswert?

läuft mit MDC 50 Mhz, obwohl es 25 MHz sein darf...

von Qone (Gast)


Lesenswert?

Das war ein sehr guter Hinweis, MIIM Clock zu prüfen !!! Noch Mal Danke! 
:)
Ich habe die auf 2 MHz runter gedreht und jetzt Daten von LAN9303 auch 
richtig und vollständig.
Ich lerne auch bei dem Projekt und wusste nicht, dass z.B. MII Clock 
nicht mehr als 2.5 MHz sein überschreiten soll.

So jetzt ist die nächste Aufgabe, Switch Register zu schreiben.
Ich habe z.b. noch nicht geschafft, den LED Register zu konfigurieren.

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

OK, gut.

Du hast zwei Dinge durcheinander gebracht, nämlich MII/RMII und das 
MII-Management-Interface MIIM (bei SMC je nach Betriebsart PMI bzw. SMI 
genannt.)

Hier die Zusammenhänge für Fast-Ethernet (FE):

Das MII ist per IEEE-802.3 festgelegt und wird bei FE-Betrieb* mit genau 
25 MHz getaktet (die vom PHY bzw. Switch geliefert werden, nicht vom 
MAC).

Das macht bei 2x 4 Datenleitungen insgesamt 100 Mbps 
Vollduplex-Durchsatz. Über das MII werden ausschließlich Ethernet-Pakete 
(= Daten) übertragen.

Vom MII gibt es noch eine Turbo-Variante mit 200 Mbps, die aber nicht 
per IEEE-802.3 festgelegt (und auch nicht sehr verbreitet) ist.
Diese funktioniert natürlich nur, wenn sie sowohl vom MAC als auch vom 
PHY bzw. Switch unterstützt wird.

Das RMII (nicht per IEEE-802.3 definiert) hat nur 2x 2 Datenleitungen 
und benötigt deshalb genau 50 MHz RMII-Takt für dieselben 100 Mbps 
Vollduplex.

Im Unterschied zum MII kann der RMII-Takt wahlweise vom PHY/Switch, vom 
MAC oder von extern geliefert werden.

Wie ich eingangs geschrieben habe: Wenn man bei einem Design die Wahl 
zwischen MII und RMII hat (oft hat man sie leider nicht), sollte man 
immer das narrensichere und besser spezifizierte MII nehmen, das wegen 
dem halben MII-Takt darüberhinaus auch noch weniger EMI (wichtig bei 
Industrieanwendungen etc.) und damit weniger Kopfschmerzen beim 
Entwickler erzeugt.

Das ebenfalls per IEEE-802.3 festgelegte und aus zwei Leitungen MDIO und 
MDC bestehende MII-Management-Interface (MIIM**) wird vom MIIM-Master 
per Definition mit maximal 2,5 MHz getaktet (weniger ist immer OK), 
wobei es seit Jahren durchaus viele Ethernet-Bausteine gibt, die einen 
deutlich schnelleren MDC-Takt erlauben.

Aber wiederum ist dafür Voraussetzung, dass beide Seiten den höheren 
MDC-Takt unterstützen. Beim LAN9303 sind maximal 2,5 angegeben, also 
darf der PIC32 das Signal MDC demnach nicht schneller als mit 2,5 MHz 
takten. Und wie Du nun herausgefunden hast, klappt es locker mit 2 MHz.

Offensichtlich akzeptiert der LAN9303 zwar einen schnelleren MDC-Takt, 
aber das Umschalten von Empfang auf Senden (nämlich während der 
TA-Phase) klappt nicht schnell genug, wodurch das direkt auf 0 folgende 
Bit im Zustand 1 (und nur in diesem) nicht schnell genug bereit gestellt 
werden kann.

Die Übertragungsrate des MIIM ist normalerweise ziemlich unkritisch, da 
über das MIIM ursprünglich nur der Status des PHYs abgefragt bzw. nach 
dem Reset per MIIM ggf. einige Einstellungen gemacht werden, falls das 
Pin-Strapping dafür nicht ausreicht.

Erst bei einem echten Switch-Management wünscht man sich für das 
Management-Interface etwas höhere Taktraten. 2,5 MHz sind aber 
normalerweise keine allzugroße große Einschränkung. Manche 
Switch-Hersteller nehmen für das Switch-Management oft das schnellere 
SPI, dann aber separat vom MIIM.

Wenn das bei Dir verwendete RMII des LAN9303 dann auch noch wunschgemäß 
läuft (noch hast Du es nicht bestätigt), ist der Rest nur noch Software.

* Bei 10Base-T beträgt der MII-Takt (genau) 2,5 MHz.

** Das MIIM wird für MII, RMII und sogar GMII und RGMII gleichermaßen 
verwendet, mit der kuriosen Tatsache, dass die Signal-Pegel für die 
niedrigen Signalpegel moderner GMACs (<= 1,5V) ungeeignet sind und 
deshalb - wenn man es genau nimmt - Pegelwandler beim MIIM nötig werden.

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.