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?
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?
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.
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?
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.
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.
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.
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?
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?
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.
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.
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?
Oder anders gefragt wie 32 bit register Adresse von lan9303 mit 5 bit register von mac pic32 zu vergleichen?
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
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?
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.
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).
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 ... ;-)
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.