ENC28J60 Initialisierung

16/02/2013 - 13:50 von Josef Moellers | Report spam
Moin,

Ich versuche mich gerade daran, ein Pollin Net-IO-Board zu einem
COM-auf-LAN-Board umzufunktionieren und dabei noch etwas zu lernen
(deshalb ist "nimm doch einfach den Code von ethersex" keine Option ;-).

Ich habe mir den Original-Code disassembliert und angesehen und auch das
Datenblatt und ethersex ... aber ich bekomme einfach keine Paket
empfangen! EPKTCNT bleibt auf 0, auch wenn ich heftigst pings auf nicht
existierende IP-Adressen mache (selbstverstàndlich sind UC, MC und BC
ENable-t)!

Ich habe das dann mal zurückverfolgt und sehe, daß das MARST bit in
MACON2 nach dem Soft Reset nicht gesetzt ist, was es aber lt. Datenblatt
sollte! Deshalb vermute ich jetzt, daß der MAC Block irgendwie nicht
anlàuft.

Mein Code sieht wie folgt aus (ich hoffe die Funktionsnamen sind
selbsterklàrend):

/* Wait for ESTAT.CLKRDY */
while (!ENC28J60_RCR(REG_ESTAT) & (1 << 0))
;

CS_low();
SPI_send(0xff);
CS_high();

_delay_ms(10);
ENC28J60_Bank(2);
b = ENC28J60_RCR(REG_MACON2);
USART_puthex(b); USART_Transmit(''); USART_Transmit('');

Mit und ohne delay kommt da "00" 'raus.
Wenn ich den Rest initialisiere (ERXST(HL), ...), dann kann ich die
Register auch wieder auslesen und bekomme die selben Werte, die ich
'reingeschrieben habe!
Ich hab' auch mit dem Logic Analyzer nachgeschaut und sehe, daß CS low
und dann werden 8 "1" Bits 'rausgetuckert, danach geht CS wieder auf
high, also der Soft Reset geht tatsàchlich 'raus!

Hat noch jemand einen Tip?

Danke im Voraus,

Josef
 

Lesen sie die antworten

#1 Josef Moellers
16/02/2013 - 14:12 | Warnen spam
Oh, ist mir das peinlich ...

On 02/16/2013 01:50 PM, Josef Moellers wrote:
Moin,

Ich versuche mich gerade daran, ein Pollin Net-IO-Board zu einem
COM-auf-LAN-Board umzufunktionieren und dabei noch etwas zu lernen
(deshalb ist "nimm doch einfach den Code von ethersex" keine Option ;-).

Ich habe mir den Original-Code disassembliert und angesehen und auch das
Datenblatt und ethersex ... aber ich bekomme einfach keine Paket
empfangen! EPKTCNT bleibt auf 0, auch wenn ich heftigst pings auf nicht
existierende IP-Adressen mache (selbstverstàndlich sind UC, MC und BC
ENable-t)!

Ich habe das dann mal zurückverfolgt und sehe, daß das MARST bit in
MACON2 nach dem Soft Reset nicht gesetzt ist, was es aber lt. Datenblatt
sollte! Deshalb vermute ich jetzt, daß der MAC Block irgendwie nicht
anlàuft.

Mein Code sieht wie folgt aus (ich hoffe die Funktionsnamen sind
selbsterklàrend):

/* Wait for ESTAT.CLKRDY */
while (!ENC28J60_RCR(REG_ESTAT) & (1 << 0))
;

CS_low();
SPI_send(0xff);
CS_high();

_delay_ms(10);
ENC28J60_Bank(2);
b = ENC28J60_RCR(REG_MACON2);
USART_puthex(b); USART_Transmit(''); USART_Transmit('');

Mit und ohne delay kommt da "00" 'raus.
Wenn ich den Rest initialisiere (ERXST(HL), ...), dann kann ich die
Register auch wieder auslesen und bekomme die selben Werte, die ich
'reingeschrieben habe!
Ich hab' auch mit dem Logic Analyzer nachgeschaut und sehe, daß CS low
und dann werden 8 "1" Bits 'rausgetuckert, danach geht CS wieder auf
high, also der Soft Reset geht tatsàchlich 'raus!

Hat noch jemand einen Tip?



Ja ich ;-)

"If the address specifies one of the MAC or MII registers,
a dummy byte will first be shifted out the SO pin. After
the dummy byte, the data will be shifted out MSb first
on the SO pin."

Ergo:
Nicht einfach "SPI_send(RCR | MACON2); macon2=SPI_send(0);"
sondern "SPI_send(RCR | MACON2); SPI_send(0); macon2=SPI_send(0);"
Dann klappt's auch mit dem MARST bit!

Warum ich jetzt immer noch kein Pàckchen bekomme muß ich jetzt weiter
untersuchen.

Danke im Voraus,



Keine Ursache,

Josef

Ähnliche fragen