Jakiś czas temu dostałem centralkę domofonu. Było to zamontowane w jednym z bloków w Grudziądzu. Postanowiłem się tym trochę pobawić. Poniżej znajdują się fotografie z kolejnych etapów demontażu:
Ostatecznie można się dostać do płytki:
Układ zrobiony jest na 8-bitowym mikrokontrolerze PIC16F1516.
Z istotniejszych podzespołów jest też pamięć EEPROM 24LC32 (interfejs I2C, 4096 B).
Można też wyróżnić "cyfrowy" potencjometr - nie pamiętam symbolu. Zasilanie jest proste - z prostownikiem i dwoma stabilizatorami 7812 i 7805. Odczyt breloków z RFID jest zrobiony na piechotę - tj. bez wyspecjalizowanego układu. Linia jest sterowana zdaje się, że ze wzmacniacza na TBA820. Taki sam układ steruje też głośnikiem.
Co więc dalej? Mamy tu jak widać bliżej nieokreślony model centralki firmy Elprod. Urządzenie nie chciało jednak działać. Szybko okazało się, że ścieżki w zasilaniu są przerwane (przed prostownikiem). Podobnie było w obwodzie załączania elektrozaczepu (prosty klucz z BD243C).
Należało to więc naprawić. Trochę kynaru załatwiło sprawę. Widać tu zresztą nietypowo zamontowane elementy i jakieś modyfikacje. Część z tego pewnie robił producent. W zasilaniu jest kondensator 6800 µF. Skrajna przesada. Jest to pewnie efekt jakiejś naprawy.
Zaciski:
Widać L+ i L- od linii dwuprzewodowej. Dołącza się tu tzw. unifony cyfrowe, czyli coś takiego:
Z kolei Z to zaciski elektrozaczepu, zaś AC to zasilanie. Na płytce unifonu należy oczywiście ustawić numer lokalu, który wysyła centralka:
źródło
Urządzenie można uruchomić próbnie na zasilaczu napięcia stałego. Dołączyłem jednak dobrany transformator.
Działania te pozwoliły nagrać film pokazujący obsługę urządzenia:
Można zadzwonić do danego lokalu lub wprowadzić numer lokalu i kod do otwarcia drzwi. Aktualnie kody pozostają nieznane. Ich ustalenie będzie tematem dalszej zabawy. Maksymalny numer lokalu to jak widać 255, minimalny zaś to 0 (kod administracyjny).
Początkowo oczywiście odczytałem zawartość 24LC32 za pomocą CH341A i programu NeoProgrammer V2.2.0.8. Zrobiłem to bez odlutowania pamięci, ale należało przeciąć ścieżki do SDA i SCL oraz na zasilaniu - tak było w mojej ocenie szybciej. Zresztą centralka ta to i tak dla mnie złom. Potem polutowałem przerwane połączenia. W 24LC32 początkowo są same zera. Zaś z offsetem 0x400 coś jest wstawione. Potem od 0x628 mamy już same 0xFF. Trudno to obecnie zinterpretować:
Z pewnością znajdują się tu kodu do poszczególnych lokali, kody administracyjne, ustawienia itd. Należy więc sprawdzić co i kiedy jest odczytywane przez PIC16F1516. W tym celu dołączyłem analizator stanów logicznych LA5016:
Jako dodatek wstawiam jego zdjęcia. Generalnie całość jest jak się można domyślić na FPGA.
Zdjęcie w trakcie zabawy:
Niestety chwytaki, jakie są w zestawie z LA5016 ciągle spadały z wyprowadzeń układu 24LC32, więc dolutowałem przewody.
Przykładowy zrzut ekranu dla wybrania lokalu 55:
Zastosowano tu tzw. odczyt sekwencyjny. Najpierw zapisywany jest adres początkowy:
Kolejno odczytuje się kolejne bajty, zaś wewnętrzny wskaźnik jest automatycznie inkrementowany:
Najpierw odczytywane są cztery bajty, począwszy od offsetu 0x0DC. Następnie zaś dwa bajty z offsetem 0x046E. Co z tego wynika? Prawdopodobnie odczytane 0x14 i 0x07 to kod lokalu, zapisany w kodzie BCD. Tak jest faktycznie. Po wybraniu 55*1407 otwiera drzwi. Odczyt kodu występuje od razu po wprowadzeniu numeru lokalu. Kolejno wypadałoby wykonać odczyty dla innych numerów mieszkań i sprawdzić, czy będzie to działać. Kolorem czerwonym są podane numery lokali:
Widać, że kod administracyjny to 0*1234 - genialnie... Ciekawe ile bloków da się tak otworzyć? Uogólniając offset dla kodu danego lokalu to: 0x400 + n*2, gdzie n to numer lokalu. Ponadto odczytywane są cztery bajtu z offsetem: 0x000 + n*4. Jest to pewnie numer 32-bitowy breloka RFID.
Pozostaje teraz ustalić do czego jest reszta pamięci. Zrobiłem reset poprzez zwarcie linii MCLR PIC16F1516 do masy. W takim przypadku zostanie odczytane coś z offsetem 0x600:
Co tu jest? Generalnie ustawienia centrali. Zgodnie z opisem producenta należy wybrać 9999*kkkk, by wejść w menu serwisowe, gdzie kkkk to kod serwisowy. Próbowałem różnych wartości z wspomnianego obszaru pamięci i w końcu trafiłem, że jest to 4697, czyli kod ten jest z offsetem 0x60C. Próbowałem zmienić np. dzwonek. Okazuje się, że jest to zapisane pod offsetem 0x600. Po zmianie ustawień dochodzi do zapisu całego bloku (tutaj po zmianie dzwonka):
Dzwonki mają numery od 1 do 8 i to jest jak widać bezpośrednio zapisane w pamięci. Niektóre ustawienia wymagają dwóch bajtów, ale nie analizowałem tego dokładnie.
Znalazłem też w jednym temacie tablicę kodów:
Wszystko się zgadza, oprócz kodu administracyjnego. Widocznie ktoś to zmienił.
Ostatecznie można zobaczyć otwieranie kodem administracyjnym 0*1234
Zamiast elektrozaczepu dałem diodę w ramach demonstracji.
Otwieranie kodem lokalu 2*6655:
Ciekawe byłoby rozpracowanie tego, co jest na linii prowadzącej do unifonów (magistrala).
źródło
Warto byłoby się dowiedzieć np. jak wybierany jest konkretny unifon. Nie jest to zbytnio zaawansowane. Jest o tym sporo tutaj. Generalnie jest licznik 40103 i trochę bramek 4093. Zatem pewnie jest to robione jakoś po liczbie przesyłanych impulsów na linii. Potwierdza to zdjęcie płytki z unifonu TK-7:
źródło
Inną ciekawostką może być rozpracowanie RFID i rozrysowanie schematu tego układu. Może kiedyś się za to zabiorę. W załączniku zamieszczam zawartość pamięci 24LC32.
Fajne? Ranking DIY