Język C: Algorytm poszukiwania układów w sieci 1-Wire.
Wysłany przez jacek dnia 26-11-2008 o godz. 21:12:11
Autor jacek
Każdy z układów z interfejsem 1-Wire posiada unikatowy 64-bitowy kod identyfikacyjny. Kod ten nosi nazwę "kod ROM" i może być utożsamiany z unikatowym adresem układu z interfejsem 1-Wire. Kod ten używany jest przez układ Master do wyboru układu w sieci. W związku z tym, że jest to kod unikatowy, to jeśli nie jest znana liczba układów Slave w sieci, może ona zostać określona przy jego użyciu przez zastosowanie funkcji przeszukiwania sieci. Algorytm jej działania oparty jest o zasadę przeszukiwania drzewa binarnego. Gałęzie przeszukiwane są do momentu aż zostanie odnaleziony koniec gałęzi lub pamięć ROM układu 1-Wire. Funkcja przeszukuje drzewo do momentu aż wszystkie numery ROM i wszystkie zakończenia zostaną odkryte.
Algorytm rozpoczyna się od wysłania rozkazu reset. Jeśli jego przesłanie zakończy się powodzeniem, to znaczy odpowiednio zareagują na niego układy dołączone do magistrali, wysyłana jest 1-bajtowa komenda zwana "search" o kodzie 0xF0 lub 0xFC. Komenda ta przygotowuje układy podłączone do magistrali do przeszukiwania.
Firma Dallas zaimplementowała dwa rodzaje komend przeszukujących. Najczęściej używane jest przeszukiwanie tzw. normalne (0xF0) sprawdzające wszystkie układy podłączone do linii. Innym rodzajem przeszukiwania jest tzw. warunkowe, które znajduje układy będące w stanie alarmowym, np. załączone termostaty czy timery, które sygnalizują zakończenie odmierzania czasu. Redukowany jest w ten sposób obszar przeszukiwania do tylko tych układów, które muszą zostać z jakiś powodów odczytane czy ustawione.
Po wysłaniu przez układ Master komendy przeszukiwania, układy Slave podłączone do magistrali 1-Wire (wszystkie, których dotyczy komenda) odpowiadają wysyłając jednocześnie mniej znaczący bit własnego adresu. Według standardu 1-Wire, układ Master inicjuje przesłanie każdego bitu zapisywanego czy odczytywanego z układu Slave. W związku ze specyfiką interfejsu, gdzie wszystkie układy podłączone są do wspólnej linii przesyłowej i na odebraną komendę przeszukiwania odpowiadają w tym samym czasie (jednocześnie i synchronicznie z sygnałem zegarowym wysyłanym przez układ Master), rezultat odczytu docierający do układu Master jest iloczynem logicznym stanów wyjść układów Slave (wired and).
Po tym jak układy Slave prześlą 1-szy bit swojego adresu, układ Master inicjuje odbiór następnego bitu, na który układy Slave odpowiadają wysyłając ponownie 1-szy bit adresu lecz tym razem jest to jego bit komplementarny. Następnie układ Master wysyła bit adresu do układów Slave. Jeśli urządzenie Slave odbiera bit, który zgadza się z bitem na pozycji adresu, pozostaje załączone i aktywne. Jeśli natomiast odebrany bit nie odpowiada temu z adresu, urządzenie Slave przechodzi do stanu oczekiwania i nie przesyła już żadnych danych. Stan ten trwa aż do odebrania następnego sygnału reset.
Opisywana wyżej procedura tzn. odbiór przez układ Master jednego bitu jako normalny i komplementarny a następnie przesłanie tego bitu adresu do układu Slave (jako normalny), powtarzana jest dla wszystkich 63 pozostałych bitów adresu. W takiej sytuacji urządzenie Slave wywołuje wszystkie układy dołączone do magistrali, lecz w danym momencie, po odbiorze bitu adresu, tylko jeden z nich przejdzie do stanu oczekiwania. Na końcu procedury znany jest adres ostatniego układu dołączonego do magistrali. W następnych przejściach procedury uwzględniana jest inna ścieżka, dotąd nie przeszukiwana.
Artykuł w formacie PDF
|
|
| |
 |
Oceny artykułu |
 |
|
Wynik głosowania: 0 Głosów: 0
|
|
|
 |
|