www.mikrocontroller.net

Forum: Compiler & IDEs ENC28J60 antwortet nicht


Autor: Josef Kaeufl (josefk)
Datum:

Bewertung
0 lesenswert
nicht 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:
while (1)
  {
    uip_len = Enc28j60Receive(uip_buf);
    //Process an incomming packet. (uIP Documentation S.47)
    if (uip_len > 0)
    {
      rs232_puts_P(eth_message_rcv);
      if (((struct uip_eth_hdr *)&uip_buf[0])->type
          == htons(UIP_ETHTYPE_IP))
      {
        rs232_puts("IP Anfrage");
        //uip_arp_ipin();
        uip_input();
        /* If the above function invocation resulted in data that
        should be sent out on the network, the global variable
        uip_len is set to a value > 0. */
        if (uip_len > 0)
        {
          uip_arp_out();
          Enc28j60Transmit(uip_buf, uip_len);
        }

      }
      else if (((struct uip_eth_hdr *)&uip_buf[0])->type
          == htons(UIP_ETHTYPE_ARP))
      {
        rs232_puts("ARP Anfrage");
        uip_arp_arpin();
        /* If the above function invocation resulted in data that
        should be sent out on the network, the global variable
        uip_len is set to a value > 0. */
        if (uip_len > 0)
        {
          Enc28j60Transmit(uip_buf, uip_len);
        }
      }
      rs232_puts("Kein IP oder ARP");
    }

    if (g_nFlags.fPeriodic)
    {
      rs232_puts("tick");
      cli();
      g_nFlags.fPeriodic = 0;
      sei();
      ///Periodic processing for a connection identified by its number.
      int i= UIP_CONNS;
      while (i)
      {
        i--;
        uip_periodic(i);
        if (uip_len > 0)
        {
          uip_arp_out();
          Enc28j60Transmit(uip_buf, uip_len);
        }
      }
      g_nPrescaler--;
      if (g_nPrescaler == 0)
      {
        //Every 10 seconds
        uip_arp_timer();
        g_nPrescaler = 100;
      }
    }    
  }

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Josef Kaeufl (josefk)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Josef Kaeufl (josefk)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Josef Kaeufl (josefk)
Datum:

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

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.