ENC28J60 antwortet nicht

OP #854472
Lesenswert?

hallo zusammen,

ich versuche gerade meinen ENC29J60 zum laufen zu bekommen. Als Hardware 
steht ein Selbstbau mit üblicher Beschaltung zur Verfügung. Ich gehe mal 
sehr stark davon aus, dass alles funktioniert.
Mein Problem: Der Chip überträgt nichts.

Wenn ich mir das Timing auf dem Oszi anschaue scheint der Master (µC) 
einwandfrei Daten an den ENC zu schicken. Doch leider kommt von diesem 
nichts zurück.
Als Treiber habe ich gängige Treiber von funktionierenden Projekten, wie 
dem µWebserver benutzt und lediglich das Pining geändert. Da ich als CS 
einen anderen Pin als SS benutze ziehe ich diesen zusaätzlich zum SS 
auch auf low, falls der ENC kontaktiert werden soll.

Wenn ich mir die Debugmeldungen im Terminal ansehen, sehe ich, dass laut 
ENC28J60 Daten empfangen wurden, aber uIP diese Weder IP noch ARP 
zugeordnet werden können. Dies passiert alle 100 Zyklen, also immer wenn 
die zweite If-Anweisung (tick) durchlaufen wurde und zum Start.

Woran könnte das liegen?


Hier noch die while-Schleife:
1
while (1)
2
  {
3
    uip_len = Enc28j60Receive(uip_buf);
4
    //Process an incomming packet. (uIP Documentation S.47)
5
    if (uip_len > 0)
6
    {
7
      rs232_puts_P(eth_message_rcv);
8
      if (((struct uip_eth_hdr *)&uip_buf[0])->type
9
          == htons(UIP_ETHTYPE_IP))
10
      {
11
        rs232_puts("IP Anfrage");
12
        //uip_arp_ipin();
13
        uip_input();
14
        /* If the above function invocation resulted in data that
15
        should be sent out on the network, the global variable
16
        uip_len is set to a value > 0. */
17
        if (uip_len > 0)
18
        {
19
          uip_arp_out();
20
          Enc28j60Transmit(uip_buf, uip_len);
21
        }
22

23
      }
24
      else if (((struct uip_eth_hdr *)&uip_buf[0])->type
25
          == htons(UIP_ETHTYPE_ARP))
26
      {
27
        rs232_puts("ARP Anfrage");
28
        uip_arp_arpin();
29
        /* If the above function invocation resulted in data that
30
        should be sent out on the network, the global variable
31
        uip_len is set to a value > 0. */
32
        if (uip_len > 0)
33
        {
34
          Enc28j60Transmit(uip_buf, uip_len);
35
        }
36
      }
37
      rs232_puts("Kein IP oder ARP");
38
    }
39

40
    if (g_nFlags.fPeriodic)
41
    {
42
      rs232_puts("tick");
43
      cli();
44
      g_nFlags.fPeriodic = 0;
45
      sei();
46
      ///Periodic processing for a connection identified by its number.
47
      int i= UIP_CONNS;
48
      while (i)
49
      {
50
        i--;
51
        uip_periodic(i);
52
        if (uip_len > 0)
53
        {
54
          uip_arp_out();
55
          Enc28j60Transmit(uip_buf, uip_len);
56
        }
57
      }
58
      g_nPrescaler--;
59
      if (g_nPrescaler == 0)
60
      {
61
        //Every 10 seconds
62
        uip_arp_timer();
63
        g_nPrescaler = 100;
64
      }
65
    }    
66
  }
#854505
Lesenswert?

Josef Kaeufl wrote:

> Ich gehe mal sehr stark davon aus, dass alles funktioniert.
> Mein Problem: Der Chip überträgt nichts.

Könnte es sein, dass beide Sätze etwas in Widerspruch zueinander stehen?

> einen anderen Pin als SS benutze ziehe ich diesen zusaätzlich zum SS
> auch auf low, falls der ENC kontaktiert werden soll.

Hängt an SS ein anderer SPI-Slave?

Zeig doch mal deine "übliche Beschaltung". Soll heissen: ein Bild. Und 
bitte von deiner Schaltung, nicht von der ähnlichen Schaltung an der 
du dich orientiert hast.
OP #854611
Lesenswert?

Hallo,
also nachdem ich den interenn Widerstand für MISO aktiviert habe 
"gehts".
Also laut Oszi verstehen sich µC und ENC. Leider funktioniert alles 
andere noch nicht.
Mir wird immer wieder gesagt, dass ein Packet vom Enc abgeholt wurde, 
doch leider läßt sich das nciht zu IP oder ARP zuordnen.
Gast #854749
Lesenswert?

>also nachdem ich den interenn Widerstand für MISO aktiviert habe
>"gehts".

Das ist bei SPI aber nicht notwendig.
Ansonsten schliesse ich mich Andreas an.
Bei den dürftigen Informationen kann dir keiner helfen.
OP #855115
Lesenswert?

Ok. Ok. Meine Infos sind schlecht. Aber mein Schaltplan ist wirklich 
nichts besonderes. Alles, wie schon tausend mal gepostet. Jedoch habe 
ich nicht den SS als CS genutzt sonderen einen anderen Pin.

Fakt ist, dass nachdem ich PORTB |= (1<<3); //MISO gesetzt habe mein 
Signal am Oszi was sinnvolles angezeigt hat. Warum weiß ich auch nicht 
so recht muß ich zugeben.

Mit Packete empfangen meine ich, dass ich auf den ENC, laut Oszi, 
richtig lesen und schreiben kann. Auch der IntegratedSelfTest läuft 
fehlerfrei durch.

Wenn ich die Schaltung an einen Hub/Switch anstöpsle leuchtet die 
link+receive Led und die transmit Led blinkt ständig.

@Simon K
Ja. Ich "empfange" abeer auch Pakete, wenn ich die Schaltung nie am 
Hub/Switch hatte ;) Warum da was anliegt weiß ich nicht.
Persönliche Seite #855520
Lesenswert?

Josef Kaeufl wrote:
> Alles, wie schon tausend mal gepostet. Jedoch habe
> ich nicht den SS als CS genutzt sonderen einen anderen Pin.
AHA! Da haben wir es mal wieder. Du musst den SS Pin aus Ausgang setzen 
(egal ob was angeschlossen ist, oder nicht), wenn du die SPI Einheit als 
Master benutzen willst!

> @Simon K
> Ja. Ich "empfange" abeer auch Pakete, wenn ich die Schaltung nie am
> Hub/Switch hatte ;) Warum da was anliegt weiß ich nicht.

Du empfängst Pakete, ohne dass ein Kabel eingesteckt ist?!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren