Witam!
Jest taki problem:
Jest sieć typu jeden master wiele slave. Podłaczone są wszystkie równolegle 2 przewodową skrętką w half-duplex (zapewne RS485, tu jeszcze się wacham). Każdy slave posiada unikatowy adres (coś jak MAC w sieciach komputerowych).
Chciałbym aby master był w stanie zgadnąć ile ma slave i o jakich adresach. Wyobrażam sobie to tak, że master rozsyła komunikat broadcast i oczekuje odpowiedzi od slave. Ale nie jestem pewny jak zrealizować ich odpowiedzi.
W grę wchodzi sieć kolizyjna. Np. slave po usłyszeniu komunikatu broadcastowego odczekuje przypadkowy czas (ze zdefiniowanego zakresu) i następnie odpowiada. Jednocześnie kontroluje, czy aby nie wszedł w drogę innemu (coś jak ethernet). Tu wydaje mi się, że można by zrezlizowac to tak, że jesli zanim nastąpi nadawanie jeśli usłyszy na lini jakikolwiek znak uznaje się za przegranego.
Master po usłyszeniu paru slave wysyła im komunikat "nie gadać więcej" i ponownie rozsyła broadcasta. Znowu wykrywa 1-2-3 slave i tak w kółko. Problem jest taki że w najgorszym wypadku może nie wykryć paru ...
Ponadto do sieci można w trakcie działania podłaczyć nowych i wyłaczyć starych...
MAC urządzenia jest duży (8 bajtów) i nie wchodzi w grę przeszukiwanie całej przestrzeni adresów ...
Nie mam sensownego pomysłu jak to zrobić. Zakładam, że mam UART do dyspozycji i w zasadzie nic więcej. Procki raczej jakieś AVR po pare mipsów.
Ma ktoś jakiś pomysł jak to można lepiej rozwiązać ? Bo przymierzam się do rozwiązania kolizyjnego które opisalem.
PS. Z tym przeszukiwaniem przestrzeni adresów to jednak da się zrbić, ale to niesłychanie pracochłonne:
Master wysyła zapytanie: czy jest ktoś, z ustawionym 63 bitem ? Uzyskuje odpowiedź (albo nie). Czy jest ktoś ze zgaszonym 63 bitem ? Uzyskuje odpowiedź (albo nie). Jesli uzyskał odpowiedź w jednym z tych 2 wypadków rozpoczyna wyszukiwanie o poziom niżej (rekurencyjnie): czy jest ktoś z ustawionym bitem 63 i zgaszonym 62 ? ...