Hallo!
Grummel, wer hat sich den Namen EtherSEX ausgedacht, jetzt sind alle
neuen eMails
im Spamordner gelandet ... Also Enschuldigung wenn ich so spät antworte.
Ich habe einen Patch zusammengefasst, siehe Anhang. Hoffentlich ist
alles reingekommen (ich bin mit git noch nicht so firm):
hardware/ethernet/enc28j60.c
hardware/ethernet/enc28j60_process.c
config.h
Bitte ENC debug einschalten, dann kann man sehen ob Fehler aufgetreten sind.
Eventuell sehen wir auch 2 Fehler mit der gleichen Auswirkung.
Der Fehler oben tritt meine ich nur unter ping-stress auf (Receiver
overrun)
Mein ursprünglicher Fehler trat aber auch ohne Netzwerklast auf,
ich kann mir nicht vorstellen dass da ein Receiver overrun stattgefunden
hat.
Allerdings habe ich auf meinen Boards den ENC mit Kondensatoren abgeblockt.
Es ist möglich dass das schon den ursprünglichen Fehler beseitigt hat, und
ich dann nur noch den zweiten Fehler sehe.
Es ist möglich dass die Funktion enc28j60_periodic(void) Fehler behebt, die
durch Spannungseinbrüche am ENC verursacht werden. Daher habe ich sie
nochmal dringelassen.
Bitte im menuconfig ENC debug einschalten, dann kann man sehen ob Fehler
von enc28j60_periodic(void) behoben wurden.
Das ist sehr interessant bei allen, die noch KEINE Zusatzkondensatoren
eingelötet haben.
Happy Testing
taru
Am 17.04.2011 20:26, schrieb [email protected]:
Hallo,
ich hab die Überwachung für MACON1 in master aufgenommen. Netzwerk hat
bei einem spontanem Test funktioniert, scheint also nichts kaputt zu
machen. Langzeitauswirkungen müsste man jetzt beobachten.
@taru: Kannst du noch den Code für den richtig implementierten errata
fix hier posten? Muss jetzt auch nicht unbedingt den ethersex patch
Richtlinien entsprechen, hauptsache dieser 3 Jahre alte, sehr nervige
Bug ist endlich behoben :D
Grüße,
David
-----Ursprüngliche Nachricht----- From: taru
Sent: Sunday, April 17, 2011 1:50 PM
To: [email protected]
Subject: Re: [ethersex-devel] NET-IO Netzwerk fällt aus !!!SOLVED !!!
Hallo
wie ist der Prozess beim Code-Fix? Einen commit machen? Oder möchte
das jemand vorher nochmal testen? Ich kenne mich auch mit Git nicht aus.
Eine kurze Anleitung wäre schön.
Nach der Durchsicht von enc28j60.c bin ich der Meinung dass ein errata
Fix
nicht richtig implementiert wurde. Ich habe das berichtigt und mein AVR
läuft jetzt seit Tagen ohne Netzwerkfehler durch, trotz ping-stress.
Die Funktion enc28j60_periodic(void) die auf die Bits im ENC aufpasst,
ist nun anscheinend auch arbeitslos - findet bei mir keine Fehler mehr.
(Weiss jemand warum die dazugekommen ist?)
Eventuell sehen wir auch 2 Fehler mit der gleichen Auswirkung.
Der Fehler oben tritt meine ich nur unter ping-stress auf (Receiver
overrun)
Mein ursprünglicher Fehler trat aber auch ohne Netzwerklast auf,
ich kann mir nicht vorstellen dass da ein Receiver overrun stattgefunden
hat.
Allerdings habe ich auf meinen Boards den ENC mit Kondensatoren
abgeblockt.
Es ist möglich dass das schon den ursprünglichen Fehler beseitigt hat,
und
ich dann nur noch den zweiten Fehler sehe.
Frohes Basteln,
taru
Am 13.04.2011 10:14, schrieb [email protected]:
Hallo,
mit folgendem fix läuft jetzt mein Board durch (MACON1 Überwachung):
void enc28j60_periodic(void)
{
uint8_t mask = _BV(PADCFG0) | _BV(TXCRCEN) | _BV(FRMLNEN);
if ( (read_control_register(REG_MACON3)& mask) != mask
|| (read_control_register(REG_MACON1)) != 0x0D ) {
init_enc28j60();
}
}
Jetzt stellen sich natürlich neue Fragen:
Wer weiss wann/warum der erste Fix eingeführt wurde?
Müssen wir jetzt alle Register überwachen?
Wie wichtig sind die Blockkondesatoren ?
Viele Grüße,
taru
-------- Original-Nachricht --------
Datum: Tue, 12 Apr 2011 07:27:42 +0200
Von: taru<[email protected]>
An: [email protected]
Betreff: Re: [ethersex-devel] NET-IO Netzwerk fällt aus
Hallo,
hier ist mal ein Dump vom ENC, vielleicht kann das jemand
interpretieren:
(bitte mit Courier formatieren, dann stimmen die Abstände)
running snapshot:
D: RevID: 0x06
D: Cntrl: ECON1 ECON2 ESTAT EIR EIE
D: 0x07 0x80 0x81 0x48 0xdb
D: MAC : MACON1 MACON2 MACON3 MACON4 MAC-Address
D: 0x0d 0x00 0x32 0x00 ac:de:48:10:97:27
D: Rx : ERXST ERXND ERXWRPT ERXRDPT ERXFCON EPKTCNT MAMXFL
D: 0x0000 0x0fff 0x05ca 0x0fcf 0x83 0x03 0x01f8
D: Tx : ETXST ETXND MACLCON1 MACLCON2 MAPHSUP
D: 0x1000 0x11f4 0x0f 0x37 0x10
D: DMA : EDMAST EDMAND
D: 0x0000 0x0000
Fehlerfall:
--------------------------------------------------------------------------------------
D: RevID: 0x06
D: Cntrl: ECON1 ECON2 ESTAT EIR EIE
D: 0x07 0x80 0x81 0x18 0xdb
D: MAC : MACON1 MACON2 MACON3 MACON4 MAC-Address
D: 0x00 0x00 0x32 0x00 ac:de:48:10:97:27
D: Rx : ERXST ERXND ERXWRPT ERXRDPT ERXFCON EPKTCNT MAMXFL
D: 0x0000 0x0fff 0x0000 0x0000 0x83 0x00 0x01f8
D: Tx : ETXST ETXND MACLCON1 MACLCON2 MAPHSUP
D: 0x1000 0x1036 0x0f 0x37 0x10
D: DMA : EDMAST EDMAND
D: 0x0000 0x0000
D: RevID: 0x06
D: Cntrl: ECON1 ECON2 ESTAT EIR EIE
D: 0x07 0x80 0x81 0x18 0xdb
D: MAC : MACON1 MACON2 MACON3 MACON4 MAC-Address
D: 0x00 0x00 0x32 0x00 ac:de:48:10:97:27
D: Rx : ERXST ERXND ERXWRPT ERXRDPT ERXFCON EPKTCNT MAMXFL
D: 0x0000 0x0fff 0x0000 0x0000 0x83 0x00 0x01f8
D: Tx : ETXST ETXND MACLCON1 MACLCON2 MAPHSUP
D: 0x1000 0x1036 0x0f 0x37 0x10
D: DMA : EDMAST EDMAND
D: 0x0000 0x0000
nach Reset:
------------------------------------------------------------------------------------
D: RevID: 0x06
D: Cntrl: ECON1 ECON2 ESTAT EIR EIE
D: 0x07 0x80 0x81 0x10 0xdb
D: MAC : MACON1 MACON2 MACON3 MACON4 MAC-Address
D: 0x0d 0x00 0x32 0x00 ac:de:48:10:97:27
D: Rx : ERXST ERXND ERXWRPT ERXRDPT ERXFCON EPKTCNT MAMXFL
D: 0x0000 0x0fff 0x0000 0x0000 0x83 0x00 0x01f8
D: Tx : ETXST ETXND MACLCON1 MACLCON2 MAPHSUP
D: 0x1000 0x0000 0x0f 0x37 0x10
D: DMA : EDMAST EDMAND
D: 0x0000 0x0000
OK
Fragen an die Experten:
sollte der ERXRDPT nach den errata-Liste nicht immer ungerade sein?
kann jemand die Dumps interpretieren was da zum Ausfall führt?
Ich habe gesehen, dass es auch im Bugtracker einen Eintrag
zu einem Hänger mit 1w gibt: http://bugs.ethersex.de/view.php?id=128
viele Grüße,
taru
_______________________________________________
Ethersex-devel mailing list
[email protected]
https://list.zerties.org/cgi-bin/mailman/listinfo/ethersex-devel
_______________________________________________
Ethersex-devel mailing list
[email protected]
https://list.zerties.org/cgi-bin/mailman/listinfo/ethersex-devel
_______________________________________________
Ethersex-devel mailing list
[email protected]
https://list.zerties.org/cgi-bin/mailman/listinfo/ethersex-devel
>From a859bcd38943e9cd3a8263cb95d6a8f732d84137 Mon Sep 17 00:00:00 2001
From: cs <cs@hp4100.(none)>
Date: Mon, 18 Apr 2011 21:29:05 +0200
Subject: [PATCH] Network Hangup Problem
Description of the error:
Network chips receiver hangup. Messages can be send, but not received.
ENC dump reveals that register macon1 has lost its content.
Fix:
In the ENC errata sheet see
error #6:
enc28j60_process.c
- Add packet count in rcv loop (pktcnt)
enc28j60.c:
- remove of reset in rx routine (Not mentioned in the errata sheet)
other changes:
enc28j60.c:
- Debug output added (define DEBUG_REV6_WORKAROUND)
- enc28j60_periodic(void) seem to be obsole, but not yet removed in this patch
for monitoring purpose. It is also possible that the missing decoupling Caps
around the ENC are the cause of errors which can be treated by this function.
---
config.h | 1 +
hardware/ethernet/enc28j60.c | 44 +++++++++++++++++++++++++++++++--
hardware/ethernet/enc28j60_process.c | 4 ++-
3 files changed, 45 insertions(+), 4 deletions(-)
diff --git a/config.h b/config.h
index acdbcbb..e1bf400 100644
--- a/config.h
+++ b/config.h
@@ -25,6 +25,7 @@
/* network controller hardware bug defines */
#define ENC28J60_REV4_WORKAROUND
#define ENC28J60_REV5_WORKAROUND
+#define ENC28J60_REV6_WORKAROUND /* rev is 6; but microchip calls it B7 */
/* global version defines */
#if VERSION_STRING_CHOICE == USE_BUILDDATE_VERSION
diff --git a/hardware/ethernet/enc28j60.c b/hardware/ethernet/enc28j60.c
index b8dc5a0..6a240d2 100644
--- a/hardware/ethernet/enc28j60.c
+++ b/hardware/ethernet/enc28j60.c
@@ -38,6 +38,19 @@
uint8_t enc28j60_current_bank = 0;
int16_t enc28j60_next_packet_pointer;
+#define DEBUG_REV6_WORKAROUND
+#ifdef DEBUG_REV6_WORKAROUND
+ uint8_t macon1 = 0;
+ uint8_t macon3 = 0;
+ uint8_t debug_guard = 0; /* if true, ENC28j60 is in reset process */
+
+ #define DEBUG_GUARD debug_guard
+ #define MACON1_PP macon1++
+ #define MACON3_PP macon3++
+#endif
+
+
+
/* module local macros */
#ifdef RFM12_IP_SUPPORT
/* RFM12 uses interrupts which do SPI interaction, therefore
@@ -232,7 +245,7 @@ void reset_controller(void)
/* wait until the controller is ready */
#ifdef ENC28J60_REV5_WORKAROUND
- _delay_ms (2);
+ _delay_ms (2); /* see errata #2: Module Reset */
#else
while (!(read_control_register(REG_ESTAT) & _BV(CLKRDY)));
#endif
@@ -257,6 +270,9 @@ void reset_rx(void)
void init_enc28j60(void)
{
+#ifdef DEBUG_REV6_WORKAROUND
+ debug_guard=0xff;
+#endif
reset_controller();
@@ -351,6 +367,11 @@ void init_enc28j60(void)
/* set auto-increment bit */
bit_field_set(REG_ECON2, _BV(AUTOINC));
+#ifdef DEBUG_REV6_WORKAROUND
+ debug_guard=0x0;
+#endif
+
+
}
void switch_bank(uint8_t bank)
@@ -366,10 +387,23 @@ void switch_bank(uint8_t bank)
void enc28j60_periodic(void)
{
uint8_t mask = _BV(PADCFG0) | _BV(TXCRCEN) | _BV(FRMLNEN);
-
- if ((read_control_register(REG_MACON3) & mask) != mask) {
+#ifdef DEBUG_REV6_WORKAROUND
+ if (!DEBUG_GUARD) {
+ if ( (read_control_register(REG_MACON3) & mask) != mask ) {
+ MACON1_PP;
+ init_enc28j60();
+ }
+ if ( (read_control_register(REG_MACON1)) != 0x0D ) {
+ MACON3_PP;
init_enc28j60();
}
+ }
+#else
+ if ( ((read_control_register(REG_MACON3) & mask) != mask )
+ || ( read_control_register(REG_MACON1) != 0x0D ) ) {
+ init_enc28j60();
+ }
+#endif
}
/* dump out all the interesting registers
@@ -436,6 +470,10 @@ int16_t parse_cmd_enc_dump(char *cmd, char *output, uint16_t len)
read_control_register(REG_EDMANDH),
read_control_register(REG_EDMANDL));
+#ifdef DEBUG_REV6_WORKAROUND
+ debug_printf("debug: macon1= %d, macon3= %d \n", macon1, macon3);
+#endif
+
return 0;
}
#endif
diff --git a/hardware/ethernet/enc28j60_process.c b/hardware/ethernet/enc28j60_process.c
index a3c080d..7626815 100644
--- a/hardware/ethernet/enc28j60_process.c
+++ b/hardware/ethernet/enc28j60_process.c
@@ -131,7 +131,7 @@ void network_process(void)
}
/* packet receive flag */
- if (EIR & _BV(PKTIF)) {
+ if ( (EIR & _BV(PKTIF)) || pktcnt ) {
if (uip_buf_lock ())
return; /* already locked */
@@ -145,9 +145,11 @@ void network_process(void)
bit_field_clear(REG_EIR, _BV(RXERIF));
+/* not needed anymore ??
#ifdef ENC28J60_REV4_WORKAROUND
init_enc28j60();
#endif
+*/
}
--
1.7.0.4
_______________________________________________
Ethersex-devel mailing list
[email protected]
https://list.zerties.org/cgi-bin/mailman/listinfo/ethersex-devel