Trzy dni męczyłem się z tą płytką
https://www.aliexpress.com/item/1005007822173598.html ...
(Aukcja przykładowa, idzie kupić poniżej 25 PLN).
(Jest podobna płytka ETH02, która jest na innym procesorze i nie jest przedmiotem tematu).
Myślałem, że szlag mnie trafi, bo ta płytka nie jest na W5500 tylko na LAN8720A, ale to powinno sprowadzać się do użycia innej biblioteki i niczego więcej...
No niestety, albo się kompilowało, ale nie było komunikacji, albo kompilator się wywalał i sypał debilnymi komunikatami, z których absolutnie nic nie wynikało.
Okazało się, że w bibliotekach dostarczonych przez producenta jest straszny burdel, niejawne zależności i w sumie nic dziwnego, że nie działało...
Cały problem sprowadzał się do tego, że wysłanie pakietu udp było możliwe, ale bufor musiał być typu const uint8_t.
Dla niekumatych w programowaniu wyjaśnienie, że const to stała, zapisana w firmware i nie można jej później zmieniać, natomiast do LinuxCNC trzeba wysyłać zmienne...
Wyjaśnienie dlaczego autor zdecydował się na stałe zamiast zmiennych jest dość proste, to oprogramowanie jest przeznaczone do serwera www, gdzie jest dużo danych, których nie ma potrzeby zmieniać, więc nie ma sensu marnować pamięci przeznaczonej na zmienne.
Próba zhakowania biblioteki i użycia jej jako lokalnej kończyła się niepowodzeniem, bo kompilator z zupełnie niewiadomych powodów ładował sobie skąd chciał, część lokalnie, a część z globalnej biblioteki, której nie powinno się ruszać, bo może być używana przez inne programy.
Jak już doszedłem o co chodzi, to wystarczyło napisać własną funkcję (kilka linii, kopiuj wklej i trochę zmienić), ale ile mnie to zdrowia kosztowało, to już moje...
Moduł komunikuje się z LinuxCNC i możliwe jest przesyłanie danych.
Kontrolera maszyny to się na tym nie zbuduje, z kilku powodów, ale brak wystarczającej ilości wejść/wyjść jest najważniejszym i decydującym.
Dodatkowo LAN8720A jest orientacyjnie dwa razy wolniejszy od W5500 (ale nadal wystarczająco szybki, pingi poniżej 500 ms).
Natomiast powinno się udać zbudować na tym licznik enkoderów z obsługą indeksu wrzeciona, albo proste wejścia/wyjścia...