Forum: Mikrocontroller und Digitale Elektronik ENC28J60 - wie testen?


von Andreas (Gast)


Lesenswert?

Hallo,

ich habe einen Microchip ENC28J60 an einem Xilinx FPGA angeschlossen. 
Messtechnisch sind die Verbindungen in Ordnung, und auf dem Oszi sieht 
das SPI-Signal am Chip so aus wie es soll.

Um zu sehen, ob die Datenübertragung funktioniert, würde ich den 
ENC28J60 gerne mit einem minimalen Beispiel auf Funktion testen. Meine 
Idee war, einfach die beiden LEDs blinken zu lassen, was ja laut 
Datenblatt durch entsprechendes Setzen des PHLCON-Registers möglich ist.

Kommen wir gleich zur Sache: Es funktioniert nicht. Ich habe folgendes 
ausgegeben (vielleicht liegt darin ja schon das Problem):

Zunächst einen software reset
-> 111 11111

Dann Bank 2 im ECON1 auswählen (da liegen MIREGADR, MIWRL und MIWRH)
-> 010 11111  00000010

Die Adresse von PHLCON (0x14) ins MIREGADR (0x14) schreiben
-> 010 10100  00010100

Ins MIWRL-Register (0x16) den Wert 1011 1010 zum LED-Blinken
-> 010 10110  10111010

Ins MIWRH-Register (0x17) den Wert 0000 1010 zum LED-Blinken
-> 010 10111  00001010

Zwischen jeder der genannten Übertragungen mache ich Pausen, in denen 
ich CS auf High ziehe und die SPI-Clock ausschalte.

Nun die Frage: Habe ich was vergessen? Gibt es irgendwelche anderen 
Kommandos, die man noch schicken muss, um den Chip aktiv zu schalten? 
Oder hat er einfach das Zeitliche gesegnet?

von LEDBlinker (Gast)


Lesenswert?

schreib mal ins High-Register MIWRH 0011 1010

->kleiner tip am rande: Benutze den BitFieldSet-Command um Bits zu 
setzen (100) und den BitFieldClear-Command um Bits zu löschen (101)

von Peter (Gast)


Lesenswert?

hi,
der einfachste test:
funktioniert das 'read control register' kommando?
wenn du nach dem 8ten clockimpuls noch 8 weitere clocks machst, müsste 
auf der MISO leitung etwwas zu sehen sein.
fall da was kommt, solltest du prüfen, ob das auch einigermassen 
plausibel ist (MSB kommt zuerst, datasheet 4.2.1).
:-)



von Andreas (Gast)


Lesenswert?

In MIWRH habe ich jetzt 0011 1010 geschrieben. Hatte irgendwie zwei 
inkonsistente Versionen des Datenblatts und mich versehentlich an der 
älteren orientiert, die noch 0000 1010 vorgeschlagen hat. Leider ändert 
das an das Tatsache, dass nichts blinkt, aber auch nichts.

Die BitFieldSet- und BitFieldClear-Kommandos machen natürlich an 
bestimmten Stellen Sinn. Da sie laut Kapitel 4.2.5 des Datenblatts aber 
auf MAC-, MII- und PHY-Register nicht angewendet werden können, wird 
sich das auf die Bankwechsel beschränken.

Kontrollregister kann ich auslesen, z.B. habe ich nach dem 
Software-Reset eine kontinuierliche Abfrage von ESTAT (000 11101 in Bank 
1) eingebaut, um erst dann im Programmcode weiter fortzuschreiten, wenn 
Bit 0 (LSB) gesetzt ist. Der ENC gibt hierbei auch 0000 0001 aus, wie zu 
erwarten.

Ich werde mal schauen, ob es vielleicht daran liegt, dass ich die 
anderen Register auch erst initialisieren muss, bevor die 
Umkonfiguration der LEDs greift. Denn wenn ich ein Netzwerkkabel 
anschließe, leuchtet eine LED und zeigt somit den Link-Status (wie in 
der Default-Konfiguration festgelegt) an.

Danke trotzdem schon mal!

von Andreas (Gast)


Lesenswert?

Ich hab meinen Fehler gefunden. Bei der Implementierung der Befehle habe 
ich die in Kapitel 16 des Datenblatts angegebenen Timing-Restriktionen 
nicht eingehalten. Nach einer Schreiboperation auf MI-Register (und 
somit auch für PHLCON) muss der CS-Pin noch 210ns lang auf Low gehalten 
werden... Es blinkt jetzt also munter vor sich hin :-)

von LEDBlinker (Gast)


Lesenswert?

>>Dann Bank 2 im ECON1 auswählen (da liegen MIREGADR, MIWRL und MIWRH)
>>-> 010 11111  00000010

Das meinte ich mit BFC und BFS anstatt WCR Command ;)

von Andreas (Gast)


Lesenswert?

So, ich bin mit dem ENC28J60 jetzt ein Stück weiter und stehe vor dem 
nächsten Problem, genauer gesagt sind es sogar mehrere Wehwehchen:

1) Wenn ich EREVID abrufe, bekomme ich eine Revision 6 gemeldet (gibts 
die denn überhaupt schon? Ein Errata-Sheet finde ich dazu auf jeden Fall 
nicht). Schließe ich eine Mess-Strippe zwischen MISO und das Oszilloskop 
an, sehen die Signale eigentlich recht gut aus und der ENC meldet 
zuverlässig eine Revision 5. Ist jemandem sowas schon mal untergekommen? 
Morgen werde ich eventuell zum Testen mal einen 10k Pullup/Pulldown an 
MISO anschließen und sehen, ob sich damit was ändert...

2) Nach dem Reset ist bei mir im ECON1-Register das Bit 6 (RXRST) 
gesetzt und bleibt gehalten. Laut Datenblatt sollte das doch aber 
eigentlich mit Null initialisiert sein, oder?

3) Der Chip signalisiert auf LEDB zwar den Empfang von Paketen (in 
meinem Fall ARP-Requests), erhöht EPKTCNT aber nicht, daher gehe ich 
davon aus, dass er sie nicht in den Puffer schreibt. ERXST habe ich 
hierbei auf 0x0000 gesetzt, ERXND auf 0x19FF und ERXRDPT ebenfalls auf 
0x19FF. MARXEN und RXEN sind gesetzt, und ich habe auch schon versucht, 
das in Problem (3) beschriebene RXRST zu clearen - ohne Erfolg...

Das ganze läuft bei einem SPI-Takt von 10 MHz. Über jegliche Hinweise 
oder auch nur Vermutungen wäre ich dankbar :-)

von Andreas (Gast)


Lesenswert?

Okay, die Problemchen haben sich alle nach einem langen Tag vor dem 
Speicher-Oszi geklärt - im Fall (1) hat es ein schlichter 10k-Widerstand 
gegen Masse getan, um den Einstreuungen den Garaus zu machen. Die 
Leitungen zwischen FPGA und ENC28J60 sind leider recht dünn und auch gut 
20cm lang, lassen sich durchs großzügige Layout des FPGA-Boards bedingt 
aber auch nicht weiter reduzieren, insofern muss ich - zumindest für den 
Prototypen - wohl damit leben. Bei (2) und (3) habe ich herausgefunden, 
dass meine Implementierung ein Timing-Problem hatte, so dass manche 
Lese- und Schreibvorgänge nicht korrekt ausgeführt wurden. So ist das 
TXRST-Bit (welches ich selbst gesetzt hatte) fälschlicherweise als 
RXRST-Bit gelesen worden...

Und richtige Pakete wurden dann draus, als ich ERDPT und EWRPT (welche 
im Datenblatt eigentlich nie so richtig erwähnt werden) mal auf die 
Werte meines Schreib- bzw. Lesepufferanfangs gesetzt habe...

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.