RTV forum PL | NewsGroups PL

Złośliwe problemy z ENC28J60 po zdalnym resecie ATmegi i konfigurowaniu EEPROMu

Dziwne zachowanie ENC28J60 po softresecie ATmegi

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Złośliwe problemy z ENC28J60 po zdalnym resecie ATmegi i konfigurowaniu EEPROMu

Goto page 1, 2, 3  Next

Atlantis
Guest

Mon Jul 07, 2014 4:24 pm   



Wprowadzam właśnie niewielkie zmiany do softu w jednym z moich
projektów. Jedno z usprawnień umożliwia zapisywanie konfiguracji (m.in
numer IP) w pamięci EEPROM i przywracanie ustawień fabrycznych z flasha.
Aby dało się to robić wygodnie, potrzebuję sposobu zdalnego resetowania.
Skorzystałem z popularnego sposobu - watchdog ustawiony na najkrótszy
czas i pętla nieskończona.

Niestety, coś nie działa tak, jak powinno.
ATmega najwyraźniej się resetuje, ale ENC28J60 nie chce działać poprawnie.

Najpierw zaraz po resecie dioda połączenia na gniazdku RJ45 (ta, która
powinna świecić cały czas po włożeniu kabla Ethernetowego) zaczęła
szybko migać. Oczywiście urządzenie nie odpowiadało na pakiety UDP.
Dodanie instrukcji opóźnienia na początku programu zlikwidowało miganie,
ale nie przywróciło łączności.

Próbowałem też resetować ENC28J60 w przypadku wykrycia resetu przez
watchdoga. Próbowałem rozwiązania zarówno z resetem przez stan niski na
odpowiednim pinie, jak również przez SPI. Pomogło tyle, że układ
najwyraźniej "jakoś" się zainicjował, gdyż migała zielona dioda w
odpowiedzi na jakieś pakiety z sieci. Niestety ciągle nie przychodziły
odpowiedzi. Co ciekawe ta instrukcja blokowała układ cały czas, bez
względu na to czy był resetowany przez WD, czy przez odłączenie
zasilania, chociaż reset wykonywałem wewnątrz instrukcji sprawdzajacej
stan pinu odpowiadającego za eset watchdog wewnątrz MCUSR.

Ktoś wie co może być powodem takiego dziwnego zachowania?

Nie uśmiecha mi się odpinanie urządzenia od prądu po każdej zmianie
ustawień.
Poza tym można podejrzewać, że tak samo układ zachowania się po
normalnym restarcie przez watchdog. A przecież nie o to chodzi -
watchdog ma chronić przez zawieszeniami, a nie zawieszać układ. Wink

feldmarszałek tusk
Guest

Mon Jul 07, 2014 6:48 pm   



dziwne rzeczy dzieją się ostatnio z tymi wszystkimi naszymi
projektami... do tej pory myślałem, że to przypadek choć miałem
świadomość o totalnym sukcesie platformy europejskiej... ale widzę, że
Wy też macie jakieś "numery" wałęsy... teraz myślę, że to jednak problem
wpływów zewnętrznych...

Włodzimierz Wojtiuk
Guest

Mon Jul 07, 2014 7:44 pm   



On 2014-07-07 20:48, feldmarszałek tusk wrote:
Quote:
dziwne rzeczy dzieją się ostatnio z tymi wszystkimi naszymi
projektami...

To są jeszcze inne trolle, które coś projektują?

Włodek Wink

Marek
Guest

Mon Jul 07, 2014 11:38 pm   



On Mon, 07 Jul 2014 18:24:33 +0200, Atlantis <marekw1986NOSPAM@wp.pl>
wrote:
Quote:
Próbowałem też resetować ENC28J60 w przypadku wykrycia resetu przez
watchdoga. Próbowałem rozwiązania zarówno z resetem przez stan
niski na


Nie rozumiem, to ten soft do encj nie robi mu reset przy starcie i
musiałeś to dodać? Przecież reset przez wdg czy reset po poweron z
pkt widzenia softu to inicjalizacja...
Miałem podobne problemy z encj, okazało się że pin Vdd nie był
przylutowany do pada na płytce, tylko dotykał. Jak się gmerało przy
płytce (np. trąciło kabel eth) to encj świrował., co ciekawe led
linkon (zielona) paliła się tylko minimalnie słabiej niż jak Vdd
stykał "prawidłowo".

--
Marek

Atlantis
Guest

Tue Jul 08, 2014 4:00 am   



W dniu 2014-07-08 01:38, Marek pisze:

Quote:
Nie rozumiem, to ten soft do encj nie robi mu reset przy starcie i
musiałeś to dodać? Przecież reset przez wdg czy reset po poweron z pkt
widzenia softu to inicjalizacja...

Właśnie to jest najdziwniejsze. Procedura inicjująca pracę ENC28J60
zawiera fragment odpowiedzialny za soft reset przez SPI. Przecież po
zresetowaniu układu przez watchdoga wsztko leci od nowa i praca układu
jest ponownie inicjowana, wykonuje się też reset.
Nie wiem więc skąd wzięło się to miganie i dlaczego zniknęło po dodaniu
funkcji opóźniającej na początku main(). Nie wiem dlaczego pomimo
wszystkich zabiegów po zdalnym resecie tracę łączność z układem...


Quote:
Miałem podobne problemy z encj, okazało się że pin Vdd nie był
przylutowany do pada na płytce, tylko dotykał. Jak się gmerało przy
płytce (np. trąciło kabel eth) to encj świrował., co ciekawe led linkon
(zielona) paliła się tylko minimalnie słabiej niż jak Vdd stykał
"prawidłowo".

To na pewno nie to. Układ działał całkowicie poprawnie przez miesiąc lub
dwa, zanim zabrałem się za testowanie nowych funkcji programowych.
Zmiany są powtarzalne i zachodzą wraz z wprowadzeniem poprawek w kodzie.

Adam GĂłrski
Guest

Tue Jul 08, 2014 3:27 pm   



W dniu 2014-07-08 06:00, Atlantis pisze:
Quote:
W dniu 2014-07-08 01:38, Marek pisze:

Nie rozumiem, to ten soft do encj nie robi mu reset przy starcie i
musiałeś to dodać? Przecież reset przez wdg czy reset po poweron z pkt
widzenia softu to inicjalizacja...

Właśnie to jest najdziwniejsze. Procedura inicjująca pracę ENC28J60
zawiera fragment odpowiedzialny za soft reset przez SPI. Przecież po
zresetowaniu układu przez watchdoga wsztko leci od nowa i praca układu
jest ponownie inicjowana, wykonuje się też reset.
Nie wiem więc skąd wzięło się to miganie i dlaczego zniknęło po dodaniu
funkcji opóźniającej na początku main(). Nie wiem dlaczego pomimo
wszystkich zabiegów po zdalnym resecie tracę łączność z układem...

Jak długo trzymasz reset aktywny ?


Adam


---
Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna.
http://www.avast.com

AlexY
Guest

Tue Jul 08, 2014 4:50 pm   



Użytkownik Włodzimierz Wojtiuk napisał:
Quote:
On 2014-07-07 20:48, feldmarszałek tusk wrote:
dziwne rzeczy dzieją się ostatnio z tymi wszystkimi naszymi
projektami...

To są jeszcze inne trolle, które coś projektują?

Myślisz że ten troll cokolwiek zaprojektował?


--
AlexY
http://faq.enter.net.pl/simple-polish.html
http://www.pg.gda.pl/~agatek/netq.html

Atlantis
Guest

Tue Jul 08, 2014 5:58 pm   



W dniu 2014-07-08 17:27, Adam Górski pisze:

Quote:
Jak długo trzymasz reset aktywny ?

Hmm... Kilkadziesiąt ms?
A jak długo powinienem? Istnieje możliwość, że trzymam za długo?

feldmarszałek tusk
Guest

Tue Jul 08, 2014 6:07 pm   



jasne, że nic, wszystko ukradł... skąd ty to powcu znasz nie?

Atlantis
Guest

Tue Jul 08, 2014 6:40 pm   



BTW czy reset ENC28J60 w procedurze inicjującej pracę układu jest
przeprowadzony prawidłowo?

#define ENC28J60_SOFT_RESET 0xFF
(...)
enc28j60WriteOp(ENC28J60_SOFT_RESET, 0, ENC28J60_SOFT_RESET);
_delay_loop_2(0); // 20ms

Atlantis
Guest

Tue Jul 08, 2014 7:21 pm   



Hmm... Jedno jest pewne, to nie jest problem sprzętowy.
Spróbowałem odpalić instrukcję programowego resetu przez watchdoga na
drugim egzemplarzu tego samego urządzenia - efekt taki sam. Potem
zrobiłem to samo na płytce prototypowej z ENC28J60 i ATmegą 328. Program
zachowuje się dokładnie tak samo za każdym razem.

Używam biblioteki Tuxgraphics, a moje urządzenia są wzorowane na
schematach płytek z tej strony (MCU taktowany z pinu CLKOUT ENC28J60).

Gdzieś musi być błąd. Tylko jaki błąd może powodować takie zachowanie
urządzenia? Po włączeniu zasilania inicjacja przebiega normalnie, ale po
resecie przez watchdoga już nie...

ACMM-033
Guest

Tue Jul 08, 2014 7:22 pm   



Użytkownik "AlexY" <alexy@irc.pl> napisał w wiadomości
news:lph7hj$ks2$1@dont-email.me...
Quote:
Użytkownik Włodzimierz Wojtiuk napisał:
On 2014-07-07 20:48, feldmarszałek tusk wrote:
dziwne rzeczy dzieją się ostatnio z tymi wszystkimi naszymi
projektami...

To są jeszcze inne trolle, które coś projektują?

Myślisz że ten troll cokolwiek zaprojektował?

<Wiech mode>
Pewne stronkie internetowe...
</Wiech>

--
Spamerów i "pytaczy" informuję, iż bardzo narażają się na to, że ich
adresy e-mail będą podawane harwesterom służącym do rozsyłania spamu.

Marek
Guest

Tue Jul 08, 2014 9:21 pm   



On Tue, 08 Jul 2014 21:21:13 +0200, Atlantis <marekw1986NOSPAM@wp.pl>
wrote:
Quote:
Używam biblioteki Tuxgraphics, a moje urządzenia są wzorowane na
schematach płytek z tej strony (MCU taktowany z pinu CLKOUT
ENC28J60).


Tak trochę z imnej beczki ale może Cię zainteresuje: do swojej płytki
z encj dołożyłem moduł wifi mrf24wg (współdzieli spi z encj) i jeśli
chodzi o uzyskane transfery to ten moduł wifi jest bez porównania
szybszy niż encj przy połowie prędkości spi (wifi 10Mhz, encj
20Mhz). Pewnie dlatego, że driver do mrf używa przerwań a nie pooling
jak encj...

--
Marek

Adam GĂłrski
Guest

Tue Jul 08, 2014 10:18 pm   



W dniu 2014-07-08 20:40, Atlantis pisze:
Quote:
BTW czy reset ENC28J60 w procedurze inicjującej pracę układu jest
przeprowadzony prawidłowo?

#define ENC28J60_SOFT_RESET 0xFF
(...)
enc28j60WriteOp(ENC28J60_SOFT_RESET, 0, ENC28J60_SOFT_RESET);
_delay_loop_2(0); // 20ms


Poproszę trochę obszerniej z tym źródłem. Ale bez przesady.
Mogę się domyślać że argumenty to opcode,addres,databyte .....
Ale dlaczego enc28j60WriteOp(0xff, 0, 0xff) ? Jakieś maski ?
Databyte nie występuje ....
czyli

1. Cs w dół.
2. byte 0xff
3. Cs w górę


Czekać na startup.

Ale co robi enc28j60..... to ja nie wiem bo to Twoje dzieło.


Pzdr

Adam

---
Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna.
http://www.avast.com

Atlantis
Guest

Wed Jul 09, 2014 3:57 am   



W dniu 2014-07-09 00:18, Adam Górski pisze:

Quote:
Poproszę trochę obszerniej z tym źródłem. Ale bez przesady.
Mogę się domyślać że argumenty to opcode,addres,databyte .....

Sama funkcja wygląda następująco:

void enc28j60WriteOp(uint8_t op, uint8_t address, uint8_t data)
{
CSACTIVE;
// issue write command
SPDR = op | (address & ADDR_MASK);
waitspi();
// write data
SPDR = data;
waitspi();
CSPASSIVE;
}

Makrodefinicja ADDR_MASK to 0x1F

Część odpowiadająca za soft reset układu przy inicjalizacji jest
zrobiona prawidłowo? Bo myślałem nawet o przesiadce na uIP, ale tego co
widzę, to sterownik ENC28J60 z tej biblioteki ma bardzo podobhnie
zrealizowaną funkcję resetu.


BTW Jak powinno się resetować układ za pomocą pinu RESET? Bo próbowałem
czegoś takiego:

RSTACTIVE; //makrodefinicja ustawiająca stan niski na odpowiedniej linii
_delay_loop_2(0);
RSTPASSIVE;
_delay_loop_2(0);

W efekcie nawet nie zaświeciła się żadna dioda na gniazdku RJ45...

Goto page 1, 2, 3  Next

elektroda NewsGroups Forum Index - Elektronika Polska - Złośliwe problemy z ENC28J60 po zdalnym resecie ATmegi i konfigurowaniu EEPROMu

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map