www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ENC28j60 schickt zwei identische Pakete


Autor: As B- (b-a)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich schicke eine DHCP-Request-Anfrage an den DHCP-Server. Bekomme ich 
keine Antwort, soll der ENC28j60 eine DHCP-Offer-Anfrage schicken. Nur 
leider schickt er wieder die erste Anfrage. Beim Debuggen des 
Mikrocontrollers konnte ich festellen, dass der Mikrocontroller die 
Daten für ein DHCP-Offer dem ENC28j60 schickt. Woran kann das liegen?

Autor: Hal (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der 80J60 ist zu doof irgendwas von selbst zu tun. Er macht, falls 
ueberhaubpt irgendwas, das was mas man ihm sagt. Keine 
debugmoeglichkeiten ? ZB um zu schauen, was dem 80J60 gesagt wird ?

Autor: As B- (b-a)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim Debugging wird ein anderes Packet generiert und auch über die 
SPI-Schnittstelle gesendet.
Muss man den Sendepuffer leeren?

Autor: As B- (b-a)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es wird definitiv ein anderes Packet generiert und auch zum ENC28j60 
gesendet.
Irgendwie merkt sich der ENC28j60 das Packet und überschreibt nicht 
seinen Inhalt. Muss ich irgendwas beachten?

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
As B- wrote:
> Es wird definitiv ein anderes Packet generiert und auch zum ENC28j60
> gesendet.
> Irgendwie merkt sich der ENC28j60 das Packet und überschreibt nicht
> seinen Inhalt. Muss ich irgendwas beachten?

Kontrolier mal den Pointer für die aktuelle Schreibposition.
Für das nächste Packet den wieder an den Anfang des Sendebuffers setzen, 
und somit das erste Packet Überschreiben, oder beim Senden vom Zweiten 
Packet auch die richtige Position im Sendebuffer angeben.

/Ernst

Autor: As B- (b-a)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich setze erst die Startadresse des Sendebuffers (ETXST). Dann setze ich 
den Pointer (EWRPTL). Dann schreibe ich die Daten mit 
Write_Buffer_Memory ind den Puffer. Dann setze ich die Endadresse des 
Sendebuffers (ETXND). Dann setze ich TXRST in ECON1 und lösche es 
wieder. Nun starte ich den Sendeprozess mit dem setzen des Bits TXRTS in 
ECON1.
So sieht meine Senderoutine aus. Hab ich irgendwass vergessen?

Dirk

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
As B- wrote:
..
> So sieht meine Senderoutine aus. Hab ich irgendwass vergessen?

Denke nicht, hier mal ein Codeschnipsel aus einem anderen Projekt:
    //setup write pointer:
        enc28j60_write_address(ENC28J60_REG_EWRPTL, (ENC28J60_TX_BUFFER_START&0xFF));
        enc28j60_write_address(ENC28J60_REG_EWRPTH, (ENC28J60_TX_BUFFER_START)>>8);

        //set tx end pointer to [start+len]:
        enc28j60_write_address(ENC28J60_REG_ETXNDL, (ENC28J60_TX_BUFFER_START+len)&0xFF);
        enc28j60_write_address(ENC28J60_REG_ETXNDH, (ENC28J60_TX_BUFFER_START+len)>>8);

        //start buffer write command
        enc28j60_spi_write_word(ENC28J60_OP_WRITE_BUF_MEM, 0x00);

        //copy buffer to enc28j60:
        enc28j60_write_buffer(buffer, len);

        //bad silicon workaround:
        //reset tx logic:
        enc28j60_spi_write_word(ENC28J60_OP_BFS | ENC28J60_REG_ECON1, (1<<ENC28J60_BIT_TXRST));
        enc28j60_spi_write_word(ENC28J60_OP_BFC | ENC28J60_REG_ECON1, (1<<ENC28J60_BIT_TXRST));

        //activate transmission
        enc28j60_spi_write_word(ENC28J60_OP_BFS | ENC28J60_REG_ECON1,(1<<ENC28J60_BIT_TXRTS)|(1<<ENC28J60_BIT_RXEN));


Autor: As B- (b-a)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich sehe den Unterschied, dass der ETXST nicht überschrieben wird, und 
das ETXND vor dem Schreiben in den Buffer gesetzt wird.
Okay, jetzt ist es so, dass ich mich mit über NBNS registriere 4 
unterschiedliche Packete senden muss und dass geht einwandfrei.

Autor: As B- (b-a)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, es gibt weitere Erkenntnisse. Schicke ich das Packet ca. 1 Sekunde 
später, wird das letzte Packet versendet (und dass ist immer dasselbe).
Schicke ich die Packete sofort hintereinander, wird das Packet 
verändert.

Woran kann das liegen?

Autor: As B- (b-a)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, Fehler gefunden.

Ich hatte vergessen, dass ich in Bank1 bin. Nachdem ich immer wenn ich 
auf ein Paket warte jetzt wieder auf Bank0 schalte funktioniert es.

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.