Guten Abend zusammen,
folgendes Szenario:
- ATMega32
- ENC28J60
- Half/Full Duplex
- 11,059 Mhz Takt bei ATMega
- 25 MHz Takt bei ENC
- ENC impl. Protokolle: IP, UDP, ICMP und ARP
- pollingbetrieb zum Abfragen des ENC nach Packeten (derzeit alle 100ms)
nun versuche ich eine Verbindung über einen Router Speedport W700V zu
meinem Rechner herzustellen.
Dies funktioniert auch grundsätzlich.
Ich teste mit einem Ping Befehl der 100 Pings sendet. aus irgend einem
Grund gehen im Full Duplex Mode ständig Pakete verloren (~14%) der
Verlust folgt keinem Schema.
Im Half Duplex Mode verliere ich genau jedes 4. Paket wobei auch der
Link kurzzeitig aussetzt (laut LED).
Was auch komisch ist, dass ich die LEDS eigentlich als receive und
transmit eingestellt habe und nicht als link. Jedoch scheint LEDA wohl
den Link status (zu erkennen beim Ziehen des Kabels).
LED scheint richtig zu blinken. Wenn ich Rechner und ENC nur über einen
Hub verbinde passiert das selbe und ich kann gut sehen das LEDB alle
Pakete Signalisiert diese nur scheinbar nicht im Buffer abgelegt sind.
LED Konfig:
// sets LED configuration LEDA transmit activity, LEDB receive
activity
enc_writePhy(ENC_PHLCON,0x0120);
Buffer Konfig:
#define RX_BUF_START 0x0000
#define RX_BUF_END 0x19FF
#define TX_BUF_START 0x1A00
#define TX_BUF_END 0x1FFF
enc_writeReg(ENC_ERXSTL,ENC_BANK0,LO8(RX_BUF_START));
enc_writeReg(ENC_ERXSTH,ENC_BANK0,HI8(RX_BUF_START));
enc_writeReg(ENC_ERXNDL,ENC_BANK0,LO8(RX_BUF_END));
enc_writeReg(ENC_ERXNDH,ENC_BANK0,HI8(RX_BUF_END));
enc_writeReg(ENC_ETXSTL,ENC_BANK0,LO8(TX_BUF_START));
enc_writeReg(ENC_ETXSTH,ENC_BANK0,HI8(TX_BUF_START));
enc_writeReg(ENC_ETXNDL,ENC_BANK0,LO8(TX_BUF_END));
enc_writeReg(ENC_ETXNDH,ENC_BANK0,HI8(TX_BUF_END));
ich habe im Netz gelesen und auch hier das der ENC nicht perfekt ist..
aber ich denke irgendwas scheine ich noch falsch zu machen?!?
Hoffe jemand hat einen spontane Idee um mir weiter zu helfen.
Das Thema ist sehr interessant!
Mfg und danke
Tobi
Half Duplex kannst du beim ENC28J60 weitestgehend vergessen. Das ist nur
mit viel Aufwand und vielen Kompromissen realisierbar.
Full Duplex geht ganz gut, wenn man sich die Silicon Erratas zum
ENC28J60 herunterlädt und die dort gegebenen Hinweise umsetzt.
Jan und ich hatten für das Bootloader-Projekt damals die meisten dieser
Fixes eingebaut und im Sourcecode dokumentiert. Du findest das Projekt
unter http://code.google.com/p/avr-etherboot/source/checkout, für Dich
ist die Datei enc28j60.c interessant.
HAllo andreas,
Danke für deine antwort. Also dein Code hat mir schonmal geholfen. Jetzt
kommen 95% durch würde och sagen.
Der Rest sind alles timeout. Komisch ist nur dass manche der packete
laut wireshark zurück kommen aber in der windows konsole trotzdem ein
timeout kommt?!?
Das verstehe ich nicht. Andere scheinen wirklich nicht beantwortet zu
werden. Noch ne spontane idee
Tobi
Hallo,
Tobi schrieb:> AChja... Kann es denn probleme geben wenn ich keinen ethernet überträger> eingebaut habe? Habe eine rj45 buchse direkt mit den pins des enc> verbunden.
nö, die bauen alle anderen nur ein, weil sie weg müssen...
Zumindest kann man sich so Probleme schaffen, die man vermutlich nicht
hätte, wenn man sich an Datenblätter usw. hält.
Mein Websever hat zumindest keine Pakete verloren, die Fehler, die ich
am Anfang hatte, waren Softwarefehler und mit WireShark relativ gut zu
erkennen.
Gruß aus Berlin
Michael
Hallo und danke für eure Antworten.
Also ich hab mir jetzt ne MagJack reingebaut und siehe da es
funktioniert..
allerdings nur wenn ich nebenher den Wireshark laufen habe Oo
Wie kann das sein??
Mit Wireshark bekomme ich 100% Ping replays
Ohne Wireshark nur den ersten Ping replay
Zu half vs. full duplex: Wenn der Switch von der üblichen "dummen" Sorte
ist (also kein gemanageter Switch), dann geht der bei einem Port so
lange von half duplex aus, bis er mit dem drin steckenden Kollegen was
anderes vereinbart hat (per auto negotiation).
Da der ENC jedoch keine auto negotiation beherrscht bleibt der
Switchport auf half duplex stehen. Wenn man den ENC nun auf full duplex
stellt, dann wird das in die Hose gehen. Der ENC meint, er könne
jederzeit senden, auch dann wenn er grad was empfängt. Der Switch sieht
das freilich anders, hält es für eine Kollision und vernichtet beide
Frames.
Half duplex funktioniert nachweislich, ohne signifikantem Paketverlust.
600KB ohne Retry per UDP rausgeblasen kommt meistens komplett beim PC
an.
Tobi schrieb:> allerdings nur wenn ich nebenher den Wireshark laufen habe Oo> Wie kann das sein??
Könnte dran liegen, dass der Wireshark den Adapter in den promiscuous
mode versetzt (m.W. einstellbar), d.h. in einen Modus, in dem der
Ethernet-Adapter alle Pakete empfängt. Normalerweise interessiert er
sich nur für Broadcasts und die an ihn direkt adressierten Frames.
M.a.W: Es könnte dran liegen, dass zwar die IP-Adressierung des Frames
stimmt, nicht aber die MAC-Adressierung.
Andreas Vogt schrieb:> Half Duplex kannst du beim ENC28J60 weitestgehend vergessen. Das ist nur> mit viel Aufwand und vielen Kompromissen realisierbar.> Full Duplex geht ganz gut, wenn man sich die Silicon Erratas zum> ENC28J60 herunterlädt und die dort gegebenen Hinweise umsetzt.
Datasheet:
"The ENC28J60 does not support automatic duplex
negotiation. If it is connected to an automatic duplex
negotiation enabled network switch or Ethernet control-
ler, the ENC28J60 will be detected as a half-duplex
device. To communicate in Full-Duplex mode, the
ENC28J60 and the remote node (switch, router or
Ethernet controller) must be manually configured for
full-duplex operation."
HAllo... Erstmal danke für eure beiträge!
Das mit der falschen mac adresse kann doch nicht sein da dieses problem
erst auftritt seit ich die magjack angeschlossen habe?! Ich werde dies
jedoch morgen nochmals überprüfen.
Das mit dem full und half duplex werde ich morgen auch mal umschalten.
Hab das im code eh schon über defines vorgesehen.
Wegen den 100ms....dies ist klar recht langsam...sollte aber für erste
nachvollziehbare tests ohne probleme ausreichen.
Grusse tobi
oh man, stimmt die destination MAC war die selbe wie die Source... da
hab ich wohl ned aufgepasst.
Nur wundert es mich das es mit der normalen RJ45 Dose ohne Überträger
sporadisch ging.. naja.
nun habe ich einen Hardcore ping test durchgeführt.
Resultat: 1000 gesendet 7 verloren.... hm... eigentlich sollte doch
alles durch gehen. Das Ganze im Full Duplex
Komisch ist auch, dass die LEDs nicht angesteuert werden.
Hab eine auf receive und eine auf transmit gestellt. jedoch blinkt die
transmit auch nur sporadisch. Kann es sein dass normale LEDs die ich
gerade im Aufbau dran hab nicht getrieben werden können von der Last?!?
Tobi schrieb:> Resultat: 1000 gesendet 7 verloren.... hm... eigentlich sollte doch> alles durch gehen. Das Ganze im Full Duplex
Eine Konfiguration mit FDX-Device und HDX-Switchport kann immer mal zu
Frameverlusten führen, abhängig vom exakten Ablauf der Datenübertragung,
der Häufigkeit von Broadcasts beliebiger Stationen im LAN und evtl. auch
vom Typ des Switch. Das kann sich mit etwas Glück kaum nennenswert
auswirken, oder gering wie bei dir, oder auch massiv.
Gewisse Probleme des real existiernden ENC28J60 (=> Errata) können
allerdings auch im HDX-Modus zu leichten Problemen führen, aber
beispielsweise die bzgl. excessive collisions sind mit Switch am anderen
Ende eher unwahrscheinlich (Hardware/Kabel/Portdefekte mal aussen vor
gelassen). Bleiben hauptsächlich die möglichen drops durch den presence
pulse - das ist dann schlicht Pech und man muss damit leben. In meinem
Fall ist mir das freilich noch nicht unangenehm aufgefallen.
Generell sollte dein Gerät damit leben können, dass Pakete in geringem
Umfang wie über die Wupper gehen. TCP kann das ohnehin.
hallo zusammen,
hab es nun nicht mehr besser hin bekommen. Aber ist schon wahr, TCP
regelt das und mit diesem Verlust kann man leben.
Nun versuche ich DHCP zu implementieren.
Irgendwie habe ich das Problem, dass im Wireshark rein gar nichts
ankommt. Nicht einmal der Discover der direkt zu Beginn gesendet werden
müsste.
Bis zu welcher Ebene muss eigentlich ein Ethernet Packet richtig sein
damit ich es im Wireshark schonmal sehen könnte ohne das es der Router
wohl verwirft?
Ich denke wenn z.b. der Datenteil im UDP falsch wäre würde das Packet
doch trotzdem ins Netz gesendet werden?!?
Ansonsten vermute ich das der ENC es blockieren könnte.. jedoch fällt
mir da auch nur die MAC des Source ein die falsch sein könnte damit er
es ned sendet. Jedoch ahbe ich dies schon ausgeschlossen.
Jemand ne spontane Idee was ich überprüfen könnte?
Mfg Tobi
Tobi schrieb:> Bis zu welcher Ebene muss eigentlich ein Ethernet Packet richtig sein> damit ich es im Wireshark schonmal sehen könnte ohne das es der Router> wohl verwirft?
Wireshark zeigt alle Pakete an die an der Schnittstelle ankommen
> Ich denke wenn z.b. der Datenteil im UDP falsch wäre würde das Packet> doch trotzdem ins Netz gesendet werden?!?
ja
> Ansonsten vermute ich das der ENC es blockieren könnte.. jedoch fällt> mir da auch nur die MAC des Source ein die falsch sein könnte damit er> es ned sendet. Jedoch ahbe ich dies schon ausgeschlossen.
der gibt auch alles raus
> Jemand ne spontane Idee was ich überprüfen könnte?
verbinde den Server per Kabel direkt mit dem Rechner auf dem Wireshark
läuft
Sascha
also ich hab unter Capture - Options - Capture packets in promiscuous
mode ein häckchen drin.. denke das wird das sein... schade.. wäre mir
auch recht gewesen wenn das alles gewesen wäre..
also ich hab mir nen pin als input konfiguriert welcher zu beginn den
Startimpuls gibt.
Wegen den LEDs... da hab ich auch noch ein Problem.. hab eigentlich eine
als TX und eine als RX konfiguriert... hab 2 ganz normale LEDs dran
gegen 5V im Full Duplex... leider blinken die irgendwie gar nicht.
Nach dem Init des ENC gehen beide aus.
jetzt hatet ich ein komisches verhalten...
ich habe nach der ENC initialisierung einen delay von 100ms eingebaut
und dann kam manchmal der DHCP und der UDP durch...
Ich vermute ich habe ein Grundproblem mit der SPI.
Dort habe ich ein display dran und eben den ENC..
Eigentlich schalte ich immer sauber um.. aber kann es da irgendwelche
Probleme geben wenn ich diese beide sozusagen parallel am SPI port habe?
Mfg Tobi
nun vermute ich langsam ein Hardwareproblem.
Ich denke ich habe meistens den Link status nicht abgewartet. Wenn ich
nun auf den Link warte, dann erhalte ich Pakete.
Nur witzigerweise kommt meist nur der ARP durch den ich Hard gecoded
habe.
Wenn ich die Stromversorgung länger aus lasse und dann einschalte, auf
den Link warte, dann kommt nur der DHCP durch.
Wenn ich dann wieder schnell nacheinander aus und einschalte, auf den
Link warte, dann kommt immer nur der ARP durch... wie kann das sein in
einem sequentielen Code???
Jemand ne Idee was da hardwareseitig sein könnte?
SPI ist direkt verbunden ohne R und ohne C.
Mfg Tobi
also irgendwie verstehe ich das nicht mehr...
die DHCP und die ARP kommen nie gleichzeitig was sie eigentlich sollten.
und es kommt nur wenn dann eine der beiden.
Die DHCP kommt irgendwie wenn dann immer 2 mal direkt nacheinander... ok
macht vielleicht der router?!?
Und warum die Link LED nun zwar den Link status anzeigt jedoch ab und zu
auch meint sie müsste blinken?!? Ich evrstehe es nicht mehr...
(enc_writePhy(ENC_PHLCON,0x0420))
Vielleicht jemand ne Idee? hoff
Mfg
Tobi
wie sieht deine INIT des ENC aus?
Hab mal meine ENC_Routinen angehangen, ist zwar ASM aber der originale
C-Code steht noch dazwischen (ist aus dem Projekt von U.Radig).
Nach dem INIT des ENC und anschließen des Netzwerkkabels dauerts schon
noch etwas bis der Link steht was du davor zu senden versuchst geht
sicher verloren.
Die Broadcasts ARP und DHCP sollten eigentlich immer durch einen Switch
gehen. An sonsten nur ENC und Rechner mit Kabel verbinden.
Sascha
Tobi schrieb:> void reset_ENC(){> enable_LAN();> spi_put(0xFF);> disable_All();> }
Ich weiß nicht, was enable_LAN() und disable_All() bei Dir macht, aber
bei uns sah der Reset des Enc so aus:
Soweit ich mich erinnere, waren die beiden delay-Schleifen wichtig. Wenn
man sie wegließ oder verkürzte, funktionierte der Enc nicht richtig.
Versuch das doch mal.
... ein geniales Forum mit genialen Leuten...
ES FUNKTIONIERT!!!!
unglaublich. Da wäre ich ja nie drauf gekommen.
Jetzt wird wie erwartet zuerst das DHCP Paket und danach das ARP Paket
gesendet.
Jetzt muss ich noch rausfinden ob wirklich so lange Wartezeiten
notwendig sind jeweils?!?
Schade das das nicht in der Spec steht.. vielleicht hab ich das auch
übersehen.. werd ich gleich nochmal prüfen.
DANKE EUCH!!!!
ich hatte nun zwischen den beiden Paketen einen delay von 200ms
eingebaut.
sende ich sie nun ohne den delay, wird nur das erste (das DHCP)
gesendet.
Komischerweise warte ich eigentlich im sende Teil des Enc max. 100ms bis
der vorherige Transmit abgeschlossen ist. Wie kann das sein das es
trotzdem nicht gesendet wird?
Wie sind eure Erfahrungen mit dem Senden mehrerer Pakete nacheinander
und entsprechenden Wartezeiten?
Mein Enc Code für tx:
Guten Tag zusammen,
also der DHCP Discover eht nun zuverlässig raus. JUHU
irgendwie antwortet der Router allerdings nicht.
Komischerweise sendet er nur ein paar ARPs mit der Frage wer die erste
IP adresse hat aus seinem DHCP Adress Pool.
Mehr passiert nicht.. aber eigentlich sollte er doch einfach einen Offer
senden?!? Oder hab ich da was falsch verstanden?
Jemand vielleicht noch ne Idee zu vorhergehendem Problem das ich keine
Pakete scheinbar direkt hintereinander senden kann?
Danke
Grüsse Tobi
Guten Abend,
ich hab ja ein Referenzproejkt... und es funktioniert ja auch soweit
alles..
ich denke eher das es sich hier um eine NEtzwerkthematik handelt hinter
die ich nicht ganz komme.
Mein Handy sendet z.b. immer mal wieder einen DHCP Request und auch da
sehe ich im Wireshark keine Antwort des Routers. Scheinbar verstehe ich
da irgendwas falsch und komme einfach nicht drauf.
Ich filtere auf bootp. Allerdings ohne Filter kommt auch ned viel
sinnvolles.
Es kommen dann nur ARPs oder DHCPv6 Nachrichten wobei ich nicht glaube
das die was direkt damit zu tun haben.
Müsste nicht nach einem Discover ein Offer kommen? Und das bei allen
Routern?!?
Mfg Tobi
also ich habe nun herausgefunden, dass ein DHCP Offer wohl gesendet
wird. Ich habe nur bei der Abfrage im UDP PAcket Source und Dest Port
vertauscht so das keine weitere Auswertung statt fand.
Nur komisch ist, dass dieses Offer nicht im Wireshark angezeigt wird?!?
Ich hatte daraufhin auch zuerst noch ein fehlerhaftes DHCP Request Paket
gesendet. Dies habe ich dann gesehen und auch das DHCP NAK vom Router.
Nun geht zwar technisch alles nur wird das DHCP ACK das ich sehen sollte
im Wireshark ebenfalls nicht angezeigt. Wie kann das sein?!?!
Das muss dich an einer Einstellungen liegen oder liegt das am Netzwerk
selbst?
Ich kann alle DHCP Nachrichten sehen ausser DHCP OFFER und ACK.
Hoffe auf eine aufschlussreiche Antwort, da mich das brennend
interessiert und ich es mir nicht erklären kann.
Mfg Tobi
Hallo,
Du hast nichts geschrieben, wie Dein Filter im Wireshark aussieht.
Ohne Filter siehst Du alle DHCP Pakete, die von/zu dem Rechner geschickt
werden, auf dessen Netzwerkkarte der Wireshark horcht.
Hast Du Deine Hardware mit ENC28J60 in einem MiniSwitch, der evt. gleich
noch mit im Router eingebaut ist und der Router ist der DHCP Server und
der PC mit Wireshark steckt an einem der anderen Ports des im Router
eingebauten MiniSwitches (also wie zum Beispiel ein Speedport der
Telekom / AVM Fritzbox mit 4 LAN Ports), dann siehst Du die Antwort vom
Router nicht mehr unbedingt.
Wenn Du die auch sehen willst, mußt Du PC+ENC28J60 in einen HUB stecken
oder Du brauchst einen Switch, der Port Spiegelung kann. Zum Beispiel
einen alten 3COM3300 (ca. 10 Euro+Versand bei ebay). Da kannst Du dann
dann z.B. den ENC28J60 Port Spiegeln zu einem "Monitor" Port wo Dein PC
drin steckt. Dann siehst Du mit dem Wireshark alle Pakete, die aus dem
ENC28J60 hinein/hinaus geschickt werden (und die von Deinem PC selbst).
Richtige Konfiguration des 3300 vorausgesetzt.
Viele Grüße und Erfolg
Netzwerker
Hallo Netzwerker,
danke für deine Antwort.
Also ich habe ENC und PC an einem Speedport... genau dein Beispiel :)
Laut deiner Aussage sehe ich dann die Pakete nicht unbedingt.. ok
scheint wirklich so zu sein.. kannst du mir auch erklären wieso?
Lösung wäre also einen Hub.. und dort Router, ENC und PC dran oder
funktioniert das noch nicht so?
Hub hätte ich noch einen da.
Mfg
Tobi
Ein Switch weiss welche MAC-Adressen an welchem Port zu finden sind.
Alles was also kein Broadcast ist, wird er nur dorthin leiten, wo der
Empfänger sitzt. Deswegen sieht dein PC nicht die Pakete die direkt
zwischen ENC28J60 und Router ausgetauscht werden.
Dein Vorschlag mit den Hub müsste so funktionierne, oder ein managebarer
Switch bei dem man einen Port auf "Monitor" schalten kann.
Hallo,
wenn Du einen echten schönen alten HUB Dein Eigen nennen kannst,
stöpsele das um (für die Fehlersuche) -> alles in den HUB.
Wenn das mit HDX/FDX funktioniert, müßtest Du alle Pakete sehen.
Wenn Dein PC ein Windows System ist, und der die IP vom Speedport per
DHCP bekommt, dann starte mal den Sharki. Mach mal eine DOS Box auf
(Ausführen cmd) und da ipconfig /renew.
Dann solltest Du die DHCP Pakete von Deinem PC sehen können wie Du die
erwartest (siehe oben).
Ja und dann das mit dem ENC28J60. Das muß dann ebenso aussehen.
Ich mach das jeden Tag und habe für Fehlersuche auch so einen kleinen
uralten MINIHUB auf meinem Schreibtisch.
Viele Grüße und Erfolg Netzwerker
Hallo Und danke für eure antworten,
Das mir dem hub funktioniert einwandfrei.
Jetzt sehe ich wirklich alles :)
Also falls jemand ein ähnliches problem hat, einfach mal nen hub dran
dann kann man sicher sein man sieht alles was auf dem netzwerk passiert.
Danke euch!!
Tobi
Schön für Dich, ich frage mich allerdings, warum dich am 05.03.2011
00:13 mir die Mühe machte, einen Beitrag zu schreiben, wenn Du hier
> // enc_writePhy(ENC_PHLCON,0x3121);> enc_writePhy(ENC_PHLCON,0x0420);
es wieder nicht beachtest, dass das oberste Nibble nicht 0, sondern 3
sein muss.