ne2000 - odbiór pakietu

Aug 29, 2005 3 Replies

Witam.



Po kilku dniach ślęczenia udało mi się w końcu wysłać i odebrać pinga do karty sieciowej na układzie um9008 i AVRka.



Ale mam pytanie odnośnie zapisu/odczytu pakietu w buffer ring.



Wszędzie w dokumantacji pisze, że przed pakietem wstawiane są cztery bajty:


1- status
2- next_ptr_nieodebrany - numer strony następnego pakietu
3- liczba odebranych bajtów Lo
4- liczba odebranych bajtów Hi
5 - ........ pakiet

Nie wiem dlaczego, ale u mnie jest to prawdziwe tylko dla pierwszego odczytu tzn: przy inicjalizacji karty ustawiłem rejestry tak:



RBCR0 = 0x0 RBCR1 = 0x0 RSAR0 = 0x0 RSAR1 = 0x0 PSTART = 0x40 PSTOP = 0x80



BNDRY = PSTART



CURR = PSTART + 1 (jak ustawiałem CURR=BNDRY= PSTART to karta wogóle nie chciała czytać chyba traktowała to jako przpełnienie bufora)



next_ptr = PSTART + 1 (numer strony nieprzeczytanego pakietu) itd.......


przed pierwszym odczytem (remote read) dma ustawiam: RBCR0 = 0xFF RBCR1 = 0xFF RSAR0 = 0x00 RSAR1 = next_ptr_nieodebrany itd.......



po odczycie pierwszego pakietu ustawione jest niby dobrze



next_ptr = next_ptr_nieodebrany (PSTART + 2) BNDRY = PSTART + 1 CURR = PSTART + 2



przed drugim odczytem znów ustawiam: RBCR0 = 0xFF RBCR0 = 0xFF RSAR0 = 0x00 RSAR0 = next_ptr_nieodebrany itd.....



i już przy tym drugim i następnych odczytach wszystko jest jakby przesunięte o jeden bajt do dołu tak jakby RSAR0 trzebaby ustawiać na 0x01.


1- jakiś bajt ...........
2- status
3- next_ptr - adres następnego pakietu
4- liczba odebranych bajtów Lo
5- liczba odebranych bajtów Hi
6 - ........ pakiet

Nie wiem co to jest ten jakiś bajt czy ta moja karta coś dodaje o czym nie piszą w dokumentacji?



Może miał ktoś do czynienia z takim czymś i wie gdzie robię błąd?



Serdeczne dzięki za pomoc Pozdrawiam Pawełr



On Mon, 29 Aug 2005 07:27:57 +0200, "Pawełr" snipped-for-privacy@poczta.onet.pl> wrote: [.....]

Nie wiem czy to ma znaczenie (pewnie ma), ale rezerwujesz całą pamięć kontrolera na bufor ramek przychodzących. Może to się kłóci z funkcją wysyłającą ramki.

[.....]

Czyli chcesz odczytać 64k z bufora o pojemności max. 16k? :-) Te rejestry najlepiej (i bardziej elegancko) jest wypełnić rzeczywistą ilością bajtów do odczytania. No, od biedy mogłoby być: RBCR0 = 0xFF RBCR1 = 0x00

Zassaj sobie źródła Ethernut-a

formatting link
W pliku nicrtl.c znajdziesz działający sterownik do RTL8019 - również NE2000 compatible.

Regards, /J.D.

Oczywiście pomyliłem się przy pisaniu posta w programie mam PSTART = 0x46, PSTOP=0x80 (lub 0x60)

Próbowałem już różnych wartości ale efekt za każdym razem jest ten sam nawet jak czytam tylko pierwsze 4 bajty czyli status, next_ptr, liczba odebranych bajtów Lo liczba odebranych bajtów Hi., to i tak następnym razem jest wszystko przesunięte.

Zassałem, ale jak dla mnie to tam jest taka "kasza" że zrezygnowałem po pół godzinie. Poprostu nie potrzebuję takiego kombajna.

W necie jest kilka przykładów bardziej czytelnych np: uIP-AVR. Ale nie wiem też dlaczego w tym projekcie są źródełka dla dwóch chipsetów zgodnych niby z ne2000: RTL8019 i ax88796. Jaka to zgodność skoro trzeba pisać inne źródła dla innego chipsetu?

Pozdrawiam Pawełr

Bo sa kompatybilne "wstecz" (z NE2k), ale kazdy z nich ma inne "ficzersy" ;-)

m.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required