Autor projektu budując system "Ambilight" do swojego zestawu wideo napotkał problem kodowania sygnału HDMI, kodowanie to uniemożliwiało pozyskanie z sygnału informacji o kolorach wybranych obszarów i system działał jedynie na niektórych sygnałach. Jedyną drogą do rozwiązania tego problemu wydawał się zakup licencji do kodowania HDCP, która uprawnia do zakupu układu ADV7611 z wbudowanymi odpowiednimi kluczami. Niestety nie jest to tanie i przekracza budżetowe ramy tego projektu.
Na szczęście w komentarzach pod artykułem na Hackaday.com, wiele osób sugerowało rozwiązanie polegające na wyłączeniu szyfrowania sygnału wyjściowego w tanich rozdzielaczach HDMI. Metoda działa na urządzeniach opartych o układ firmy Explore Semiconductor, taki jak EP9132. W układzie występuje jeszcze mikro kontroler komunikujący się z EP9132 przez magistralę I2C. Przeróbka miała by polegać na zablokowaniu pracy tego mikro-kontrolera po przez wymuszenie resetu, trybu bootloadera lub odcięcie go od magistrali I2C.
Sposób wprawdzie działa ale nie jest tak różowo jak się wydaje - wraz z kodowaniem znikają też wszystkie dodatkowe funkcje, takie jak zdalne włączanie, przełączanie wejść czy sterowanie głośnością odtwarzacza z poziomu TV.
Po analizie noty katalogowej układu autor natrafił na ciekawy bit 0 pod adresem 0x0F TX_ENC_ON dla którego 1 - włącza kodowanie strumienia wyjściowego/0 - wyłącza. Powstał więc pomysł aby monitorować monitorowania transmisji i w momencie zapisu do tego rejestru, wymuszenia stanu 0 na odpowiednim bicie. Wybór padł na mikro-kontroler attiny9 który pomimo posiadania tylko 3 pinów I/O powinien wystarczyć.
Po uruchomieniu, okazało się że przeróbka nie działa, próba zmiany stanu bitu przez układ powodowała wykrycie przez transmitujący uC kolizji.(przypomnijmy mechanizm arbitrażu w transmisji I2C zakłada ze ten z uC pracujących jako master, przejmuje kontrolę, który pierwszy wystawi 0 w miejscu gdzie 2 podaje 1 - magistrala jest podciągana do +, układy mają wyjścia OC (OD).)
Po nieudanej próbie autor powrócił do noty aplikacyjnej gdzie znalazł kolejny ciekawy bit - bit4 w rejestrze 0x07 RX_ENC_ON 1 - sygnał odbierany jest kodowany/0 - nie jest. Nasłuch magistrali pod kątem dostępu do tego rejestru pokazał że uC bardzo często sprawdza jego stan, wystarczyło więc zmodyfikować wartość tego bitu - podczas odczytu układ slave nie wykrywa kolizji (magistrala I2C nie dopuszcza pracy wielu układów slave z tym samym adresem),po takim zabiegu mikro-kontroler nie wykryje szyfrowanej transmisji.
Po wprowadzeniu zmian układ zadziałał - kodowania nie było a wszystkie utracone funkcje powróciły. Problemem okazał się tylko program który na kontrolerze z 8Mhz zegarem nie wyrabiał się i pojawiały się spóźnione maskowania. Problem polegał na tym że zmiana sygnału z niskiego na wysoki w czasie gdy poziom sygnału zegarowego był wysoki była interpretowana jako sygnał START na magistrali I2C. Wymagało to drobnych poprawek jednak ostatecznie udało się to rozwiązać dodatkowym warunkiem badającym stan linii clk.
Na stronie autora można znaleźć listę spliterów które są podatne na takie przeróbki oraz doczytać więcej szczegółów. Dostępny jest również wsad do kontrolera attiny9. (Należy tu pamiętać że nie jest on obsługiwany przez proste programatory SPI).
ŹródłoLink
Fajne? Ranking DIY