Bawię się teraz ze strukturami do przechowywania ustawień w pamięci eeprom i flash.
Z związku z tym potrzebuję instrukcji do zdalnego, software'owego resetowania ATMegi po wgraniu nowych ustawień.
Stosuję standardową sztuczkę - ustawienie krótkiego watchdoga i włączenie nieskończonej pętli.
Układ najwyraźniej się resetuje, ale ENC28J60 po takim zabiegu nie chce normalnie działać - dioda połaczenia (która normalnie powinna świecić cały czas) miga bardzo szybko, układ nie odpowiada na pakiety UDP. Muszę dopiero ręcznie odłączyć zasilanie, wtedy wszystko wraca do normy.
Byłem ciekaw co się stanie, jeśli dam instrukcję opóźniającą na początku programu w przypadku wykrycia resetu przez WD, jeszcze przed instrukcjami inicjującymi ENC28J60.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Miganie zniknęło, ale urządzenie ciągle nie odpowiada na pakiety.
Jakiś pomysł co może być nie tak? W jaki sposób poprawnie zainicjować pracę ENC po resecie? W końcu ewentualny zwykły reset przez watchdoga w identyczny sposób zablokuje mi urządzenie, a to nie o to przecież chodzi...
Próbowałem także wykonać reset ENC28J60 w przypadku wykrycia restartu przez watchdoga. Wykonywałem zarówno reset przez podanie niskiego stanu na odpowiedni pin ENC28J60, jak również przez SPI.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Co najdziwniejsze, powyższe instrukcje na początku programu sprawiają, że urządzenie nie odpowiada na pakiety. Nigdy nie odpowiada, nawet po normalnym włączeniu do zasilania, a nie restarcie przez watchdoga...
UPDATE: okazuje się, że tak samo zachowuje się inny egzemplarz tego samego urządzenia, jak również płytka prototypowa z ENC28J60 i ATmegą 328. Jest więc mało prawdopodobne, by winę ponosił błąd sprzętowy. Gdzieś w bibliotece musi był błąd... :/