ENC28j60 schickt zwei identische Pakete

OP #535584
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?
#536876
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
OP #537793
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
#537880
Lesenswert?
• ▲
▼
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 #538431
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.
OP #562686
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?

Antwort schreiben

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.

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.