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 Previous  1, 2, 3  Next

Atlantis
Guest

Wed Jul 09, 2014 8:19 am   



W dniu 2014-07-09 05:57, Atlantis pisze:

Quote:
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

Hmm... Tak się przyglądam temu i coś mi tu nie pasuje. W nocie
katalogowej ENC28J60 na stronie 28 i 32 podano informację, że za komendę
soft resetu odpowiada wysłanie sekwencji ośmiu bitów "1".

Tymczasem wywołanie tej funkcji jako enc28j60WriteOp(0xFF, 0, 0xFF)
spowoduje wysłanie 16 "jedynek". Bo najpierw wysyłamy wynik operacji:
0xFF | (0x00 & 0x1F)
Co daje 0xFF.
Potem jeszcze raz wysyłamy 0xFF.

Czy w takim razie reset nie jest przeprowadzany w zły sposób? A może ja
coś pomieszałem?

Adam GĂłrski
Guest

Wed Jul 09, 2014 10:37 am   



W dniu 2014-07-09 10:19, Atlantis pisze:
Quote:
W dniu 2014-07-09 05:57, Atlantis pisze:

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

Hmm... Tak się przyglądam temu i coś mi tu nie pasuje. W nocie
katalogowej ENC28J60 na stronie 28 i 32 podano informację, że za komendę
soft resetu odpowiada wysłanie sekwencji ośmiu bitów "1".

Tymczasem wywołanie tej funkcji jako enc28j60WriteOp(0xFF, 0, 0xFF)
spowoduje wysłanie 16 "jedynek". Bo najpierw wysyłamy wynik operacji:
0xFF | (0x00 & 0x1F)
Co daje 0xFF.
Potem jeszcze raz wysyłamy 0xFF.

Czy w takim razie reset nie jest przeprowadzany w zły sposób? A może ja
coś pomieszałem?


Wysyłasz za dużo. Czy to ma znaczenie - nie wiem.

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 6:27 pm   



W dniu 2014-07-09 12:37, Adam Górski pisze:

Quote:
Wysyłasz za dużo. Czy to ma znaczenie - nie wiem.

Ciągle nie to. :/
Spreparowałem funkcję wysyłającą 0xFF. Układ ruszył tak samo jak
przedtem, i tak samo zawiesił się po resecie. :/

Swoją drogą jak prawidłowo zresetować sprzętowo ENC28J60? Na jak długo
mam ustawić RESET na stan niski? Bo przy _delay_loop_2(0) jakby nie
wstawał w ogóle - nie świecą się diody.

Adam GĂłrski
Guest

Wed Jul 09, 2014 6:50 pm   



W dniu 2014-07-09 20:27, Atlantis pisze:
Quote:
W dniu 2014-07-09 12:37, Adam Górski pisze:

Wysyłasz za dużo. Czy to ma znaczenie - nie wiem.

Ciągle nie to. :/
Spreparowałem funkcję wysyłającą 0xFF. Układ ruszył tak samo jak
przedtem, i tak samo zawiesił się po resecie. :/

Swoją drogą jak prawidłowo zresetować sprzętowo ENC28J60? Na jak długo
mam ustawić RESET na stan niski? Bo przy _delay_loop_2(0) jakby nie
wstawał w ogóle - nie świecą się diody.

1) Co to znaczy : "się zawiesił". Nie istnieje takie pojęcie.

Zawiesić to się może jak zegar zniknie.
Wisi gdzieś czekając na coś. Na co ?


2)Gdzieś widziałem w dokumentacji minimum 2us.

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

Thu Jul 10, 2014 1:52 pm   



W dniu 2014-07-09 20:50, Adam Górski pisze:

Quote:
1) Co to znaczy : "się zawiesił". Nie istnieje takie pojęcie.
Zawiesić to się może jak zegar zniknie.
Wisi gdzieś czekając na coś. Na co ?

Tak jak mówiłem - po zresetowaniu ATmegi przez watchdoga nie mogę
ponownie nawiązać połączenia z układem, a jedna z diod na gniazdku RJ45
(ta, która normalnie świeci cały czas) dość szybko miga. Pomaga dopiero
ponowne uruchomienie układu przez chwilowe odcięcie zasilania.


Quote:
2)Gdzieś widziałem w dokumentacji minimum 2us.

A jest jakieś maksimum? Bo próbowałem resetu sprzętowego, ustawiając pin
na stan nisku na kilkadziesiąt-kilkaset ms. Układ w ogóle nie łączył się
z siecią - to znaczy nawet nie zaświeciła się żadna dioda.

Adam GĂłrski
Guest

Thu Jul 10, 2014 2:18 pm   



W dniu 2014-07-10 15:52, Atlantis pisze:
Quote:
W dniu 2014-07-09 20:50, Adam Górski pisze:

1) Co to znaczy : "się zawiesił". Nie istnieje takie pojęcie.
Zawiesić to się może jak zegar zniknie.
Wisi gdzieś czekając na coś. Na co ?

Tak jak mówiłem - po zresetowaniu ATmegi przez watchdoga nie mogę
ponownie nawiązać połączenia z układem, a jedna z diod na gniazdku RJ45
(ta, która normalnie świeci cały czas) dość szybko miga. Pomaga dopiero
ponowne uruchomienie układu przez chwilowe odcięcie zasilania.


2)Gdzieś widziałem w dokumentacji minimum 2us.

A jest jakieś maksimum? Bo próbowałem resetu sprzętowego, ustawiając pin
na stan nisku na kilkadziesiąt-kilkaset ms. Układ w ogóle nie łączył się
z siecią - to znaczy nawet nie zaświeciła się żadna dioda.

Maksimum nie widziałem.


Proponuje wykonać odczyt wszystkich rejestrów wew ENC i porównać. Co
zawierają po power-up a co po resecie.

Dużo masz tego softu ?

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

Marek
Guest

Thu Jul 10, 2014 4:03 pm   



On Thu, 10 Jul 2014 15:52:48 +0200, Atlantis <marekw1986NOSPAM@wp.pl>
wrote:
Quote:
Tak jak mówiłem - po zresetowaniu ATmegi przez watchdoga nie mogę
ponownie nawiązać połączenia z układem, a jedna z diod na gniazdku
RJ45
(ta, która normalnie świeci cały czas) dość szybko miga. Pomaga
dopiero


To wygląda jakby po reset wdg nie były prawidłowo skonfigurowane
piny/porty do komunikacji (hardware), czyżby reset po wdg czyms się
różni od resetu poweron? Na pewno przebiega szybciej, być może za
szybko przez co emcj nie jest prawidlowo reinicjowany. Zrobiłbym test
jak się zachowa na reset na pinie MCLR mcu, przypuszczam że będzie
ten sam efekt.

--
Marek

Atlantis
Guest

Fri Jul 11, 2014 10:03 am   



W dniu 2014-07-10 18:03, Marek pisze:

Quote:
To wygląda jakby po reset wdg nie były prawidłowo skonfigurowane
piny/porty do komunikacji (hardware)

To trochę dziwne, bo przecież kod jest ten sam. O ile dobrze pamiętam na
samym początku idzie wstępna konfiguracja portów - wszystkie są
ustawione na wejście podciągnięte do VCC, żeby później uniknąć
problemów, ewentualnie w razie potrzeby jest to później zmieniane w
funkcjach inicjujących pracę poszczególnych peryferiów.
Potem idzie inicjacja i konfiguracja jednego timera (ENC28J60 i Stos z
niego nie korzystają, obsługuje on zdarzenia w pętli głównej) i licznika
zliczającego zewnętrzne impulsy.
Dalej program sprawdza stan konfiguracji zapisanej w pamięci EEPROM.
Jeśli pamięć jest pusta (np. po porgramowaniu układu) przywraca domyślną
wartość z flasha. To samo dzieje się po wykryciu stanu niskiego na
jednym z pinów (zworka przywracania "fabrycznej" konfiguracji). Na tym
etapie program ładuje do RAM-u strukturę z danymi konfiguracyjnymi (jest
wśród nich m.in. MAC i numery IP: własny i bramy).

Dopiero teraz następuje inicjacja pracy ENC28J60, konfiguracja pracy
diodek, ustawienie odpowiedniej częstotliwości na CLKOUT (12.5 MHz) i
odpalenie stosu.

Po włączeniu urządzenia do sieci wszystko przebiega normalnie, za to po
resecie przez watchdog układ wariuje wg schematu opisanego wcześniej.

BTW czy fakt pracy ATmegi na taktowaniu z CLKOUT ENC28J60 może mieć
jakiś związek w tym stanem rzeczy?

Quote:
prawidlowo reinicjowany. Zrobiłbym test jak się zachowa na reset na
pinie MCLR mcu, przypuszczam że będzie ten sam efekt.

Faktycznie, spróbuję po powrocie do domu.

Atlantis
Guest

Fri Jul 11, 2014 9:27 pm   



W dniu 2014-07-10 18:03, Marek pisze:

Quote:
jak się zachowa na reset na pinie MCLR mcu, przypuszczam że będzie ten
sam efekt.

Dziwna sprawa. Po resecie przez zwarcie pinu układ wstaje normalnie.
Tylko watchdog powoduje ten dziwny efekt. Generalnie mam wrażenie, że to
miganie wygląda tak, jakby MCU wpadał w jakąś pętlę resetu. Bo dioda
połączenia faktycznie przygada podczas resetowania...

Marek
Guest

Fri Jul 11, 2014 10:43 pm   



On Fri, 11 Jul 2014 23:27:46 +0200, Atlantis <marekw1986NOSPAM@wp.pl>
wrote:
Quote:
Dziwna sprawa. Po resecie przez zwarcie pinu układ wstaje normalnie.
Tylko watchdog powoduje ten dziwny efekt. Generalnie mam wrażenie,
że to


Ja bym jeszcze zrobił test z innym źródłem zegara mcu (nie encj).

--
Marek

Atlantis
Guest

Fri Jul 11, 2014 10:53 pm   



W dniu 2014-07-12 00:43, Marek pisze:

Quote:
Ja bym jeszcze zrobił test z innym źródłem zegara mcu (nie encj).

Ok, już znalazłem przyczynę. Kto by pomyślał, że w ATmedze:
1) Watchdog jest ciągle aktywny po resecie.
2) Nie można go tak po prostu wyłączyć, najpierw trzeba zresetować bit
WDRF w rejestrze MCUCSR.

Marek
Guest

Sat Jul 12, 2014 6:35 am   



On Sat, 12 Jul 2014 00:53:49 +0200, Atlantis <marekw1986NOSPAM@wp.pl>
wrote:
Quote:
Ok, już znalazłem przyczynę. Kto by pomyślał, że w ATmedze:
1) Watchdog jest ciągle aktywny po resecie.
2) Nie można go tak po prostu wyłączyć, najpierw trzeba zresetować
bit
WDRF w rejestrze MCUCSR.

Nie rozumiem, jakie to ma znaczenie, że jest aktywny? Dla prawidłowo
działającego softu i sprzetu będzie periodycznie kasowany, jeśli
będzie znowu (po resecie) aktywny...

--
Marek

Atlantis
Guest

Sat Jul 12, 2014 7:07 am   



W dniu 2014-07-12 08:35, Marek pisze:

Quote:
Nie rozumiem, jakie to ma znaczenie, że jest aktywny? Dla prawidłowo
działającego softu i sprzetu będzie periodycznie kasowany, jeśli będzie
znowu (po resecie) aktywny...

WDT jest periodycznie kasowany w pętli głównej. Opisywany problem
występował zanim jeszcze program dochodził do tego momentu.

Programowy reset polega na ustawieni krótkiego cyklu watchdoga (w moim
przypadku 15 ms) i uruchomieniu nieskończonej pętli. W efekcie wdt
zresetuje MCU.

Zakładałem, że po takiej procedurze układ startuje od nowa, czyli
również z wyłączonym watchdogiem. Myliłem się.

Potem pomyślałem, że może jednak watchdog jest aktywny i to on (zgodnie
z ostatnim ustawieniem) resetuje mi układ już na starcie, po 15 ms.
Okazało się jednak, że wdt_disabkle() na samym początku funkcji main()
nie pomaga.

Potem spróbowałem ustawić dłuższy cykl wdt w procedurze soft resetu -
4s. Sądziłem, że wtedy przynajmniej ENC28J60 zdąży się zainicjować i coś
zobaczę. Ale nie - efekt był taki sam. Wtedy pomyślałem, że być może po
restarcie licznik watchdoga nie znajduje się w stanie 0, spróbowałem
więc konstrukcji:

wdt_reset();
wdt_disable();

Też nie pomogło. W akcie desperacji zrobiłem coś takiego:

wdt_reset();
MCUCSR &= ~(1 << WDRF);
wdt_disable();

I voila! Zadziałało. Wink

Marek
Guest

Sat Jul 12, 2014 7:57 am   



On Sat, 12 Jul 2014 09:07:33 +0200, Atlantis <marekw1986NOSPAM@wp.pl>
wrote:
Quote:
Programowy reset polega na ustawieni krótkiego cyklu watchdoga (w
moim
przypadku 15 ms) i uruchomieniu nieskończonej pętli. W efekcie wdt

No na to bym nie wpadł, żeby ustawiać czas wtd na 15ms w prototypach,
5s to rozumiem ale 15ms to proszenie się o problemy. Całkiem niedawno
miałem przypadek gdzie 5s było za mało, fopen na pliku 2kB i fwrite
100 bajtów na jego koniec (pendrive usb z mocno sfragmentowanym
fatem) bibliotece vfat, której używam, zajmowało 8s.

--
Marek

Atlantis
Guest

Sat Jul 12, 2014 8:40 am   



W dniu 2014-07-12 09:57, Marek pisze:

Quote:
No na to bym nie wpadł, żeby ustawiać czas wtd na 15ms w prototypach, 5s
to rozumiem ale 15ms to proszenie się o problemy. Całkiem niedawno

Ciągle się nie rozumiemy. Tak krótki czas stosuję TYLKO w procedurze
soft resetu, żeby użytkownik nie musiał czekać na jego wykonanie.

void soft_reset (void) {
wdt_enable(15MS);
while(1);
}

Normalnie stosuję długi czas, bodajże 4 sekundy, z licznikiem zerowanym
co sekundę w pętli głównej.

Zresztą jak już mówiłem - próbowałem też soft resetu z długim
watchdogiem i nie robiło to żadnej różnicy. Układ i tak wpadał w pętlę
resetu po pierwszym wykonaniu tej funkcji. Pomogło dopiero zerowanie
jednej flagi i wyłączanie wdt na samym początku programu.

Goto page Previous  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