logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ATMega32 i ENC28J60 - jak zredukować 15% stratę pakietów?

Sh44dow 23 Lut 2012 01:41 2182 3
REKLAMA
  • #1 10585624
    Sh44dow
    Poziom 16  
    Witam.
    Podłączyłem dzisiaj układ ENC28J60 korzystając ze schematu i programu dostępnego tutaj: http://tuxgraphics.org/electronics/200606/article06061.shtml .
    W programie zmieniłem jedynie konfigurację portów. Wszystko działa, jednak układ gubi pakiety i to całkiem sporo, ok. 15%.
    --- 192.168.1.50 ping statistics ---
    151 packets transmitted, 127 packets received, 15% packet loss
    round-trip min/avg/max = 1.156/1.197/2.154 ms

    Wywaliłem z pętli głównej niepotrzebne rzeczy, zostawiłem jedynie odpowiedź na ICMP i ARP. W celach testowych włączyłem UART oraz przerwania w ENC28J60 i uaktywniłem zewnętrzne przerwanie w AVRze. W chwili otrzymania pakietu następuje przerwanie, które zliczam. Przy pingowaniu co sekundę dioda LEDB mruga równo co sekundę, natomiast przerwanie nie występuje za każdym razem, tylko w około 85% przypadków.

    Co może być przyczyną tego, że pakiety są gubione, nie pojawiają się w buforze, natomiast dioda sygnalizująca ruch mruga?

    Schemat: http://tuxgraphics.org/common/src2/article06061/eth-remote-device.pdf
    U mnie ATMega32 jest zasilana z 5V (ENC toleruje 5V na wejściach). i nie ma zabezpieczenia przed EMI (środki transformatora od strony wyjściowej nie są podłączone, w dokumentacji ENC jest wspomniane o połączeniu obu środków przez rezystory 75ohm do masy przez wspólny kondensator 1nF/2kV).
    Transformator jakiego użyłem to TEM-300D-J (dostępny w TME); Interfejs na płytce stykowej:
    ATMega32 i ENC28J60 - jak zredukować 15% stratę pakietów?
    Przewody: AVR-ENC ok. 7-9cm, ENC-separator ok. 3-5cm, separator-gniazdo ok. 6-7cm, gniazdo-switch - próbowałem trzech, od kilkunasto-centymetrowego patchcorda po 40-metrowy - za każdym razem tak samo, strata ~15%.

    EDIT: pominałem transformator, połączyłem (T|R)D(+|-) bezpośrednio z gniazdem 8p8c - problem nadal występuje.

    Dodano po 2 [godziny] 54 [minuty]:

    Po długiej walce i frustracji znalazłem rozwiązanie - napisze je tutaj, może się komuś przyda.

    Problem był spowodowany błędem w projekcie scalaka. Automatyczne wykrywanie polaryzacji nie działa jak należy (jest o tym napisane w erracie) i nie dogaduje się za dobrze z moim domowym routerem gubiąc pakiety. Wystarczyło zamienić sygnały TPIN+ i TPIN-.

    Dodatkowo znalazłem też inny błąd związany z wyjściem CLKOUT, z którego taktowałem procka. W erracie wspomnieli, że wyłącza się w trybie uśpienia. U mnie dodatkowo zaczyna świrować po kilku minutach pracy układu, po jakiejś większej ilości odczytów z rejestrów. Zatrzymuje się całkiem lub zawiesza na chwilę - nie polecam taktowania mikrokontrolera z tego wyjścia. Przy własnym taktowaniu pojawia się inny problem również opisany w erracie - mogą występować problemy w komunikacji SPI przy zegarze <8MHz i zalecane jest taktowanie z CLKOUT ;-).
  • REKLAMA
  • REKLAMA
  • #3 10586183
    mirekk36
    Poziom 42  
    Sh44dow napisał:
    W
    Dodatkowo znalazłem też inny błąd związany z wyjściem CLKOUT, z którego taktowałem procka. W erracie wspomnieli, że wyłącza się w trybie uśpienia. U mnie dodatkowo zaczyna świrować po kilku minutach pracy układu, po jakiejś większej ilości odczytów z rejestrów. Zatrzymuje się całkiem lub zawiesza na chwilę - nie polecam taktowania mikrokontrolera z tego wyjścia. Przy własnym taktowaniu pojawia się inny problem również opisany w erracie - mogą występować problemy w komunikacji SPI przy zegarze <8MHz i zalecane jest taktowanie z CLKOUT ;-).


    O tych problemach i to dokładny opis można znaleźć na stronach tuxgraphics a także ich przemyślenia czy sposób walki z tym - dlatego ono robili taktowanie z CLKOUT... niestety to też nie dało nigdy do końca pewnego 100% rozwiązania

    Za to już dawno ja także pisałem na elektrodzie, że tym rozwiązaniem jest taktowanie procka zewn. kwarcem najlepiej minimum 16MHz a jeszcze lepiej 20MHz z ustawioną prędkością SPI na maxa .... wtedy problemy znikają jak ręką odjął co potwierdza zresztą wyżej też kolega piotrva
  • #4 10734455
    Sh44dow
    Poziom 16  
    Dopracowałem projekt i zrobiłem 20 płytek, jednak pojawił się kolejny problem - zapytam tutaj żeby nie tworzyć nowego tematu.

    5\20 płytek nie działa poprawnie. W przypadku trzech nie zaświeca się dioda "link state" na płytce, natomiast świeci się ona na switchu w routerze (router pentagram, diody świecą na 2 kolory; zielony\pomarańczowy, świeci na pomarańczowo co prawdopodobnie sygnalizuje 10M; w przypadku sprawnych płytek jest tak samo). Wygląda jakby switch rozpoznał podłączone urządzenie, tylko dlaczego w takim razie ENC tego nie sygnalizuje? Może to być problem z komunikacją w drugą stronę? Jest w ogóle możliwe rozpoznanie urządzenia mając tylko jednokierunkową komunikację?

    Na dwu pozostałych dioda link state mruga i to bardzo nieregularnie. zaświeca się na 0,2-1.0 sek i gaśnie na 0.5-10 sek. (czasem dłużej). Na switchu nie świeci się nic.

    Płytki były montowane przez kogoś, kto zajmuje się tym zawodowo - nie wykluczam jego błędów, ale wątpię, żeby popełnił ich tyle i to każdy w tym samym miejscu.
    Komunikacja między ENC a mikrokontrolerem wygląda poprawnie. Próbowałem też przestawić ich funkcje na świecenie ciągłe\mruganie - wszystko działa poprawnie, problem leży po stronie komunikacji ze switchem.
    Sprawdziłem wartości elementów R/C, szukałem zwarć, przerw w obwodzie - nie znalazłem (co też nie znaczy że ich faktycznie nie ma).

    Czy miał już ktoś podobny problem z tym układem, tj. mruganie diody link lub link jednostronny?
REKLAMA