ENC28J60 SPI extrem träge

Hallo Gruppe,

für ein Bastelprojekt habe ich die Olimex ENC28J60-H Headerplatine verbaut (das ist ein ENC28J60 + 25 MHz Quarzoszillator + Magnetics + RJ45):

formatting link

Diese ist in einer Schaltung mit einem AVR ATmega8 zusammen, alles wird mit 3.3V versorgt, die mit einem L1084 aus 5V gewonnen werden. AVR hängt am ~14 MHz Quarz.

Das Problem ist, dass sich der ENC28J60 *extrem* träge verhält: Wenn ich die AVR-SPI-Einheit nehme und die auf langsamste Geschwindigkeit einstelle (CKDIV 128, enspricht 109 kHz SPI-Clk), ist da gar nichts zu holen (kommt nur Murks zurück).

Wenn ich die SPI-Routine per Bitbanging mache und EXTREM lange Delays (10 us + 10us + Overhead enspr. 35kHz SPI-Clk) einfüge, geht alles einwandfrei.

Die Leitungen sind 0.2mm Kupferlack, etwa 3-4cm.

Auf dem Oskar sehen zumindest an dem Eingangsconnector des Headerboards SCK/MOSI/MISO/CS einwandfrei aus, schön knackig, keine Überschwinger, absolut super Signal. Am Chip selbst kann ich momentan nicht messen, weil ich das Header-Board eingelötet habe und der Chip auf der Unterseite liegt. Lohnt sich das auslöten? Oder an was kann das liegen? Mache ich irgendwas grundsätzlich falsch?

Viele Grüße, Johannes

--
>> Wo hattest Du das Beben nochmal GENAU vorhergesagt? 
> Zumindest nicht öffentlich! 
Ah, der neueste und bis heute genialste Streich unsere großen 
Kosmologen: Die Geheim-Vorhersage. 
 - Karl Kaos über Rüdiger Thomas in dsa
Reply to
Johannes Bauer
Loading thread data ...

Und so sprach Johannes Bauer:

formatting link

Ganz doofe Frage: Deine Taktquelle für das SPI/I2C-Modul ist richtig gesetzt?

Roland (Der Atmel aufgrund der mangelhaften Doku zum AVR32 überhaupt nicht mag...)

Reply to
Roland Ertelt

Beim Mega8 ist die Taktquelle für SPI immer der Haupt-Clock, das kann man nicht wählen.

Der Clockdivider ist aber richtig gesetzt (1/128) und es kommt der richtige SPI-Clock raus (mit richtiger Clock Polarity/Phase), das habe ich auf dem Oskar geprüft.

Und wenn ich die Bitbanging-Routinen schneller mache (z.B. verdopple, also eine Periode von sagen wir 10us entspr. 100kHz SPI-Clk), dann gehen auch die nicht mehr.

Habe noch keinen AVR32 angefasst, aber die AVR8-Doku ist schon gut, finde ich. Die Doku zum ENC28J60 ist hingegen die absolute Pest und der Grund, warum ich Microchip nicht mag. Wobei, so allgemein kann man das auch nicht sagen -- die Doku zum ENC424J600 fand ich einwandfrei.

Viele Grüße, Johannes

--
>> Wo hattest Du das Beben nochmal GENAU vorhergesagt? 
> Zumindest nicht öffentlich! 
Ah, der neueste und bis heute genialste Streich unsere großen 
Kosmologen: Die Geheim-Vorhersage. 
 - Karl Kaos über Rüdiger Thomas in dsa
Reply to
Johannes Bauer

Nicht nur die Doku, auch der IC selber ist kaum mehr als eine Sammlung höchst peinlicher Bugs.

Entwicklungsziel bei dem Teil muß es gewesen sein, ein abschreckendes Beispiel zu schaffen, wie man es nicht machen sollte.

Das mußte mal raus, sorry.

Zu deinem Problem fällt mir allerdings nur eins ein: Takt des ENC überprüfen. Da du ja immerhin eine Möglichkeit gefunden hast, mit dem Ding zu reden, einfach mal sein Clockout-Signal einschalten und den Takt überprüfen, der dann rauskommt. Der ist vermutlich viel zu niedrig.

Reply to
Heiko Nocon

Du sprichst mir aus der Seele. Dieses Drecksding hat mich schon viel zuviele Nerven gekostet. Speicher wird korrupt, wenn der Lesezeiger gerade ist? Ernsthaft? Und das Datenblatt empfiehlt trotzdem überall, dass man da einen geraden Wert reinschreiben soll (in den Errata wird dann das Gegenteil gesagt). Mein Gott und ich habe mich halb zu Tode gedebuggt, weil ich das ursprüngliche Setup (TX von 0-1429, RX von

1530-0x1fff) nicht zum laufen bekommen habe -- das Errata-Sheet sagt auch, warum: Wenn man den RXST-Pointer nicht setzen kann, dann einfach unverändert lassen und das Memory-Layout drumrum basteln.

Leider nein, der Clock steht wie ne eins (auch wunderschönes Signal, sowohl der 25 MHz Eingang als auch der runtergeteilte Ausgang). Habe jetzt das Headerboard ausgelötet und direkt an den Chipbeinchen gemessen, da stimmt der SPI auch 100%ig. Ich löte das Ding jetzt nochmal komplett nach und wenns danach noch nicht geht, dann bleibts halt beim bekackten Bitbanging mit irsinnig langen Delays. Schön ist halt anders, aber mir langts langsam.

Viele Grüße, Johannes

--
>> Wo hattest Du das Beben nochmal GENAU vorhergesagt? 
> Zumindest nicht öffentlich! 
Ah, der neueste und bis heute genialste Streich unsere großen 
Kosmologen: Die Geheim-Vorhersage. 
 - Karl Kaos über Rüdiger Thomas in dsa
Reply to
Johannes Bauer

Punkt eins in der Errata:

When the SPI clock from the host microcontroller is run at frequencies of less than 8 MHz, reading or writing to the MAC registers may be unreliable.

Also mach die Clock schneller. Keine Ahnung ob der AVR mit 14MHz auch 14MHz SPI Takt machen kann. Aber 7MHz sollten ja schon mal funktionieren und da geht vielleicht auch schon der Chip.

Wobei ich jetzt nicht weiß ob Dein Problem tatsaechlich die MAC Register betrifft.

Viele Gruesse, Martin L.

Reply to
Martin Laabs

Seit Revision B5 sollte dieses Erratum eigentlich gefixt sein. Und die Revision B5 ist schon ziemlich alt (>5 Jahre). Es ist daher eher unwahrscheinlich, dass der Chip von Johannes davon noch betroffen ist.

Micha

Reply to
Michael Baeuerle

Ja, ich hatte im OP vergessen die Rev zu erwähnen. Ich habe einen B5-Chip. In dessen Errata taucht der SPI-Bug gar nicht mehr auf, weswegen ich kurz wegen Martins Posting zusammengezuckt bin (Was? Punkt Nummer EINS übersehen?!).

Habe es trotzdem gerade (ohne Erfolg) versucht. Wobei ich an 8 MHz wegen des ~14MHz MCU Clocks nicht rangekommen bin (aber 7.15 MHz habe ich probiert).

Viele Grüße, Johannes

--
>> Wo hattest Du das Beben nochmal GENAU vorhergesagt? 
> Zumindest nicht öffentlich! 
Ah, der neueste und bis heute genialste Streich unsere großen 
Kosmologen: Die Geheim-Vorhersage. 
 - Karl Kaos über Rüdiger Thomas in dsa
Reply to
Johannes Bauer

Hätte ich auch gesagt. Den SPI Takt auf F_CPU/2 (Teiler 1 und SPI2X). Das ist das Minimum das vernünftig geht. Ich habe gute Erfahrung damit dem Mega auf 16 MHZ zu übertakten. Achte auf sauber geblockte Versorgungsspannung und mache die Masseverbindung erheblich massiver als einen Kupferlackdraht.

Bei Gewittern stürzt der ENC gelegentlich ab so dass viele Stacks regelmässig den ENC resetten. Ich hab diesen Reset entschärft indem ich bei jedem ARP request auf dem Netz den Timer resette. Empfange ich 5 minuten keinen ARP schiche ich selbst einen ARP request zum Router bevor es einen reset gibt.

--
MFG Gernot
Reply to
Gernot Fink

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.