ENC28j60 schickt zwei identische Pakete

OP #535584
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?
Gast
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 ?
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
OP
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
As B- wrote:
..
> So sieht meine Senderoutine aus. Hab ich irgendwass vergessen?

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

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

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

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

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

20
        //activate transmission
21
        enc28j60_spi_write_word(ENC28J60_OP_BFS | ENC28J60_REG_ECON1,(1<<ENC28J60_BIT_TXRTS)|(1<<ENC28J60_BIT_RXEN));
OP
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.
OP
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?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.