Forum: Compiler & IDEs ENC28J60 antwortet nicht


von Josef K. (josefk)


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
  }

von Andreas K. (a-k)


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.

von Josef K. (josefk)


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.

von holger (Gast)


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.

von Simon K. (simon) Benutzerseite


Lesenswert?

Bei der Hardware-SPI Einheit kann man noch nicht mal die internen 
Pullups aktivieren ;)

Eines verstehe ich noch nicht so ganz: Einerseits sagst du, dass du 
Pakete empfängst, aber andererseits hat dein ENC28J60 keine "Verbindung" 
zum Mikrocontroller?

von Josef K. (josefk)


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.

von Josef K. (josefk)


Lesenswert?

100 graue Haare später. Interrupt für meine Uartschnittstelle abschalten 
da Windows darauf pollt. Jetzt gehts. Man man man. So ein Schei...

von Simon K. (simon) Benutzerseite


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?!

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.