Elgato HD60 S HDMI yakalama cihazını Ghidra ile onarmak
(downtowndougbrown.com)- USB üzerinden algılanmayan Elgato Game Capture HD60 S, güç hattını aşağı çeken 3 güç entegresi değiştirildikten sonra HDMI yakalama ve passthrough işlevlerini normal şekilde geri kazandı
- Termal görüntüleme, voltaj ölçümü ve SMD işaret aramasıyla 2 adet Fitipower FP6373A regülatör ve bir TI TPS60403DBV voltaj invertörü tespit edildi; parça maliyeti LCSC’ye göre 1 doların altındaydı
- Yakalama işlevi geri gelmişti, ancak 7 beyaz ve 7 kırmızı durum LED’i kapalıydı; LED sürücüsü ve LED dizisinin kendisinin Raspberry Pi Pico ile doğrudan kontrolde sağlam olduğu doğrulandı
- Ghidra ile Nuvoton M031LD2AE firmware’i ve Cypress/Infineon CYUSB3014 için SPI flash izlendiğinde, 0x300000’den başlaması gereken LED animasyon verisinin boş veya bozuk olduğu görüldü
- Sağlam bir HD60 S’in yalnızca LED veri bölgesi sorunlu cihazın SPI flash’ına birleştirilerek yazıldığında durum LED’leri geri geldi; kalan arızanın donanım değil yazılım, programlama veya güncelleme yoluyla ilgili bir sorun olduğu anlaşıldı
USB tarafından algılanmayan HD60 S’in güç katının onarımı
- eBay’den satın alınan arızalı Elgato Game Capture HD60 S USB 3.0, bağlandığında bilgisayarda hiçbir şey olarak görünmüyordu
- Kart açılıp voltajlar ölçüldüğünde güç hattının düşük seviyeye çekildiği görüldü ve termal kamera ile ısınan çip bulundu
- Sorunlu parçalar, üzerinde yalnızca küçük işaretler bulunan güç entegreleriydi
fiVJVEişaretli 2 çip, 2.2µH indüktörlerin yakınında olduğundan anahtarlamalı regülatör olarak tahmin edildi- SMD işaret araması ve Fitipower belgelerinin kontrolü sonucunda FP6373A olduğu sonucuna yaklaşıldı
PFNIişaretli çipin Google aramasıyla TI TPS60403DBV voltaj invertörü olduğu doğrulandı
- Üç çipin tamamı 5V giriş alıyordu ve çıkış tarafı direnci düşüktü; bir FP6373A’nın çıkış hattına doğrudan 2.7V verildiğinde ilgili regülatör ısınıyordu
- FP6373A, LCSC’de adet başına $0.17, TI çipi ise $0.58 karşılığında satın alınabiliyordu ve kargo ücreti parça bedelinden çok daha yüksekti
Parça değişiminden sonra kalan durum LED’i sorunu
- Üç güç entegresi değiştirildikten sonra HD60 S bir USB cihazı olarak algılandı; HDMI yakalama ve passthrough normal çalıştı
- Ancak cihazın durum göstergesi hâlâ yanmıyordu
- 7 beyaz LED ve 7 kırmızı LED bulunuyordu
- Beyaz LED’lerin bağlantıdan hemen sonra iki kez yanıp sönmesi gerekiyordu
- LED ile ilgili çip Innochip’in IT1504 modeliydi ve veri sayfasına göre 16 kanallı bir LED sürücüsüydü
- Osiloskopla IT1504 giriş pinlerine bakıldığında SPI’a benzeyen seri trafik geldiği görüldü
- PCB izleri takip edildiğinde IT1504’ün Nuvoton M031LD2AE ARM Cortex-M0 mikrodenetleyici tarafından kontrol edildiği anlaşıldı
IT1504 muadili arayışı ve devre doğrulaması
- IT1504’ü genel dağıtım kanallarında bulmak zordu; Innochip’in stokları yalnızca tam makara seviyesindeydi ve numune gönderemiyordu
- Muadil ararken Macroblock’un MBI5040 modeli bulundu
- MBI5040 veri sayfası, yapı ve blok diyagram açısından IT1504 veri sayfasıyla neredeyse aynıydı
- Çıkış akımı özellikleri biraz farklıydı, ancak işlevler ve komut sistemi çok benzerdi
- MBI5040 veri sayfasındaki komut bilgileri, LED kontrol yöntemini anlamaya yardımcı oldu
- MBI5040GF satın alınıp IT1504 yerine takıldı, ancak LED’ler yine de yanmadı
- Tezgâh tipi güç kaynağı ve dirençle LED’ler tek tek yakıldığında LED’lerin kendisinin sağlam olduğu görüldü
- Raspberry Pi Pico doğrudan MBI5040 girişine bağlanıp komut gönderildiğinde LED’ler tamamen kontrol edilebildi
- LED sürücü devresinde ve LED dizisinde fiziksel bir sorun olmadığı sonucuna varıldı
- Orijinal IT1504 tekrar takıldığında da Pico kontrolü normal çalıştı; mevcut LED sürücüsünün de arızalı olmadığı anlaşıldı
Nuvoton MCU firmware’inin Ghidra ile analizi
- Elgato desteğine durum LED’iyle ilgili bilinen bir sorun veya ayar olup olmadığı soruldu, ancak pratik bir çözüm alınamadı
- Nuvoton MCU’nun firmware’ini kontrol etmek için karttaki 4 pinli JST konnektör izlendi ve bunun MCU programlama konnektörü olduğu doğrulandı
- Nu-Link2-Me ve NuMicro ICP Programming Tool ile okuma denendi, ancak çip içeriği korumalıydı
- Bunun yerine Elgato 4K Capture Utility içinde yer alan
FW_HD60_S_MCU.bindosyası bulunduElgatoDeviceCapabilities.jsondosyasına göre bu firmware, USB product ID 0x0076 olan cihaz içindi- Elgato bunu “Game Capture HD60 S Rev.4” olarak adlandırıyordu
- İkili dosya Cortex-M0 firmware’i gibi görünüyordu; ilk word
0x20000E70geçerli bir stack pointer gibi, ardından gelen word’ler ise flash adresleri biçiminde bir vektör tablosu gibi görünüyordu - Firmware Ghidra’ya yüklendi ve SVD-Loader kullanılarak register eşleme denendi
- NuMicro_DFP içindeki
M031AE_v1.svd, eklentide yüklenebilecek şekilde değiştirildi - Nuvoton’un M031BSP paketi fonksiyon tanımlamaya yardımcı oldu
- NuMicro_DFP içindeki
Hata ayıklama için MCU değişimi ve kilidin açılması
- Orijinal M031LD2AE yerine yeni boş bir çip takılıp Elgato firmware’i flash’landığında çalıştı, ancak çip tekrar korumalı duruma geçtiği için hata ayıklama yapılamadı
- Ghidra’da koruma ayarını güncelleyen fonksiyon bulunup çipi kilitlemeyecek şekilde patch’lendi
- Patch’lenmiş firmware yüklendiğinde OpenOCD ve GDB ile başlatma kodunda hata ayıklanabildi
- LED kontrol kodu yolu firmware içinde vardı, ancak normal yürütme akışında atlanıyordu
- GDB’de register ve RAM değerleri zorla doldurularak LED kontrol kodunun çalışması sağlandığında ışıklar yakılabildi
- Firmware’de LED kontrol kodu bulunuyordu
- Sorun, bu kodun normal koşullarda çalıştırılmamasıydı
Bootloader ve tam firmware yedeği
- Koruma bitleri kaldırılmış firmware, Elgato güncelleme yolu üzerinden başka bir HD60 S’e kurularak normalde korumalı olan tüm içeriğin okunması denendi
- Güncellemeden sonra cihaz yakalama kartı olarak çalışmıyor gibi görünüyordu, ancak çip amaçlandığı gibi kilitsiz durumdaydı
- Bunun sonucunda şu bölgeler okunabildi
- LDROM: Elgato’nun birinci aşama bootloader’ı
- Veri flash’ı
- Orijinal ayar register değerleri
- APROM uygulama firmware’i
- LDROM bootloader, I2C üzerinden komut ve veri alarak APROM’u yeniden flash’layabiliyordu
- Çip koruması kaldırılmış durumdaysa bootloader uygulama firmware’ine geçmiyor, güncelleme komutu bekliyordu
- Elgato, kilit/kilit açma bitlerini bootloader’ın bekleyip beklemeyeceğini gösteren bir sinyal gibi kullanıyordu
- Kilidi açılmış firmware kurulduktan sonra cihazın durmasının nedeni de bu davranışla açıklanıyordu
HD60 S’in iç yapısının anlaşılması
- Cihazın içinde ARM ailesinden iki işlemci birlikte çalışıyordu
- Cypress/Infineon CYUSB3014 USB 3.0 çevre birimi çipi ARM926EJ-S’ti ve PC ile USB 3.0 üzerinden iletişim kuruyordu
- Nuvoton M031LD2AE Cortex-M0 MCU, ITE video çipini ve LED’leri kontrol ediyordu
- Nuvoton MCU, ayrı bir I2C veri yolu üzerinden ITE çiplerini yapılandırıyor ve izliyordu
- ITE IT6802E bir HDMI alıcısı gibi görünüyordu
- ITE IT66121FN paralel veri akışını HDMI olarak dışarı vermekten sorumlu görünüyordu
- CYUSB3014, Nuvoton MCU’ya I2C üzerinden komut gönderiyor; Nuvoton da durum bilgisini CYUSB3014’e geri iletiyordu
- CYUSB3014, IT6802E’den gelen video veri akışını alıp USB üzerinden bilgisayara aktarıyordu
- Kartta ayrıca Altera MAX II CPLD de vardı; video verisinin CYUSB3014’ün alabileceği biçimde girmesinde rol oynadığı düşünülüyordu
SPI flash ve LED animasyon verisinin keşfi
- CYUSB3014 firmware’i, Winbond W25Q32JVSSIQ 4MB SPI flash içinde korumasız olarak saklanıyordu
- SPI flash dökümü incelendiğinde 0x300000 offset’inden itibaren küçük resimlere benzeyen veri blokları vardı
- Nuvoton firmware’inde ne olduğu bilinmeyen 5 GPIO izlendiğinde, bu pinlerin Diodes Incorporated PI5C3257 quad 2:1 mux/demux bus switch’e gittiği görüldü
- Bu bus switch, SPI flash’a bağlanacak tarafı CYUSB3014 ile Nuvoton MCU arasında seçiyordu
- Başta SPI flash’ın yalnızca CYUSB3014’e ait olduğu düşünülmüştü
- Gerçekte CYUSB3014 önyüklemesinden sonra Nuvoton MCU, SPI flash kontrolünü devralıyordu
- Ghidra’da yeni tanımlanan fonksiyonlar bit-banging SPI işlemleri ve SPI flash silme, okuma, yazma kodlarıydı
LED arızasının gerçek nedeni
- SPI flash’taki 0x300000 sonrası veri sıradan görseller değil, LED animasyon kareleriydi
- Her 16 baytlık blok, 14 LED için kullanılan bir animasyon karesiydi
- Her satırın son 2 baytı, bir sonraki kareye geçmeden önceki gecikme süresiydi
- Nuvoton firmware’i, 0x300000 başlangıç konumundaki ilk 2 baytın 16 bitlik 0xAA55 değeri olup olmadığını kontrol ediyordu
- LED’leri çalışmayan iki cihazın SPI flash dökümlerinde bu bölge boş veya bozuktu
- Bir dökümde 0x300000 bölgesi neredeyse tamamen
0x00ile doluydu - Bazı animasyonlar
AB 03 12 39gibi garip başlıklarla başlıyordu
- Bir dökümde 0x300000 bölgesi neredeyse tamamen
- Normal çalışan üçüncü bir HD60 S’in SPI flash’ında 0x300000’de doğru başlık ve LED verisi vardı
- İlk 16 bitlik word, firmware’in aradığı
0xAA55değeriydi - Başlıkta 26 LED animasyonuna ilişkin bilgiler yer alıyordu
- IT1504’e yüklenen dot correction verisi 0x3007F8’deydi; ardından gelen
0x521114A7, önceki 16 baytın CRC-32 değeriydi
- İlk 16 bitlik word, firmware’in aradığı
SPI flash patch’i ile LED’lerin geri getirilmesi
- Sorunlu cihazın SPI flash’ında 0x000000’dan 0x2FFFFF’e kadar olan kısımda cihaza özgü veriler korundu
- Çünkü USB seri numarası bu bölgede bir yerde bulunuyordu
- Yalnızca 0x300000’den başlayan LED veri bölgesi, sağlam cihaz dökümünden alınan veriyle değiştirilerek bir hibrit imaj oluşturuldu
- Bu imaj LED arızalı cihaza flash’landığında beyaz LED iki kez yanıp söndü ve kırmızı LED kısa süreliğine bir kez yandı
- Sağlam cihaz daha eski bir revizyondu ve Nuvoton MCU modeli de farklıydı; ancak LED verisi yeni firmware’in beklediği formatla uyumluydu
- Windows ve Mac’teki mevcut Game Capture uygulamalarının içinde de ham animasyon verisi vardı
- Windows yolu
C:\Program Files\Elgato\GameCapture\Animations - Mac yolu
/Applications/Game Capture HD.app/Contents/Resources/Animations 01.ani,02.anigibi dosyaların verileri LED sırasına göre yeniden düzenlendiğinde, sağlam flash dökümündeki animasyon verisiyle eşleşiyordu
- Windows yolu
Güncelleme aracı ve kurtarma prosedürünün kısıtları
- Elgato 4K Capture Utility’nin Windows firmware güncellemesi yeterince uzun beklememe sorunu yaşıyordu
- Güncelleme hâlâ sürerken başarısız olduğunu gösteriyordu
- Aynen beklenirse cihaz LED’i yanıp sönüyor ve yeni firmware ile normal şekilde yeniden başlatılıyordu
- Hata mesajının hemen ardından cihaz çıkarılırsa eksik bir flash kalabiliyordu
ElgatoDeviceCapabilities.jsoniçindekiupdateDurationSecdeğeri 40’tan 80’e çıkarılınca bu sorun çözüldü- Elgato, teknik destek yönlendirmediği sürece HD60 S firmware güncellemesi yapılmamasını öneriyor; özellik de ayarlar ekranındaki özel bir tuş kombinasyonunun arkasına gizlenmiş durumda
- LED kurtarma prosedürü karmaşık
- Firmware güncellemesine izin vermek için
ElgatoDeviceCapabilities.jsondeğiştirilir - Güncelleme başlatıldıktan hemen sonra cihaz çıkarılarak Cypress çipinin SPI flash’ı kontrol etmesi sağlanır
- CYUSB3014’ün USB’den önyükleme yapması için PCB jumper’ı kaldırılır
- Cypress SDK’daki
download_fx3ilecyfxflashprog.imgRAM’e yüklenir - Değiştirilmiş
fx3_spitestile SPI flash’ın tamamı dump edilir ve LED bölgesi patch’lenir - Jumper eski hâline getirilir ve 4K Capture Utility’de normal firmware güncellemesi yapılarak Nuvoton firmware’i geri yüklenir
- Firmware güncellemesine izin vermek için
- Sonuç olarak asıl onarım, toplamı 1 doların altında olan 3 çipin değiştirilmesiyle tamamlandı; LED sorununun ise bazı HD60 S’lerde görülen yazılım, programlama veya güncellemeyle ilişkili bir kusur olduğu anlaşıldı
1 yorum
Hacker News görüşleri
Genel yapı içinde amacın ne olduğunu anlamak zordu ve bazen pek çok katmanlı fonksiyon çağrısının derinliklerine gömülüydü
Kaynak koduna doğrudan bakarken de bu sık olur. Yazılımların çoğu aşırı soyutlanmış durumda ve MCU'lar öylesine büyüyüp ucuzladı ki, HDMI capture cihazının içine iki ARM çekirdeği koymak gibi şeyler gömülü dünyada da görülmeye başladı. Bu cihazın birden fazla MCU'ya ihtiyacı varmış gibi görünmüyor
Yaklaşık 20 yıl önce Hindistan'da büyürken alım gücü düşüktü ve eşyalar pahalıydı; bu yüzden neredeyse her şeyi tamir eder ya da yeniden elden geçirerek kullanırdık
Bir şeyi çalışır hale getirmek için türlü geçici çözüm anlamındaki jugaad çok kullanılırdı; kıyafetler de yeniden kullanılır, terziler rafu denen yamalı onarımlarla ömürlerini uzatırdı. Benimki gibi orta sınıf ailelerde bu özellikle yaygındı
Hazır giyim ihracatı yapan bir şirkette çalışan babam, Batı'daki insanların ister araba, ister elektronik, ister kıyafet olsun tek kullanımlık eşyaları ve yenisini tercih ettiğini sık sık söylerdi; o zamanlar bu zihniyeti anlayamazdım. Ama şimdi alım gücü artıp Çin sayesinde fiyatlar düştükçe biz de atıp yenisini alma eğilimine girdik
Yarı yolda vazgeçmeyip sadece yenisini almanın daha kolay olduğunu düşünmeyen insanlara büyük saygı duyuyorum. Bu azim ve beceriklilik gerçekten övgüyü hak ediyor
Kendin tamir edebiliyor ve gereken parçaları bulabiliyorsan sorun değil. Ama birinin deneyimi ve bilgisi için para ödemen gerekiyorsa, en azından benim yaşadığım yerde bu oldukça pahalı ve gerçekten tamir edecek birini bulmak da zor. Boş dükkânlardan çok TV tamiri tabelası görüyorsun
Neyse ki yarı emekliyim ve saatlik ücretle çalışıyorum; bu yüzden ek zamanımın parasal bir maliyeti yok. Bu sayede bir günümü bulaşık makinesini tamir etmeye ayırabiliyorum, birkaç gün sonra yine bozulursa bir gün daha ayırıp yenisini kurabiliyorum. Profesyonel bir montajcı yeni cihazı bir saatte kurardı ama en azından randevu gününü beklemem gerekmedi
Ancak son yaklaşık 50 yılda tüketimcilik büyüdü, kıyafet gibi ürünlerin kalitesi de fiyatı da düştü
Son zamanlarda motosiklet bakımını kendim yapıyorum; başlangıçta yağ filtresini sökme aparatı gibi birkaç alete yatırım yapmak ve parça/sarf malzemesi almak gerekiyor. Yağlar, bakır rondelalar, eski fren hidroliği haznesi vidasının yerine geçecek vidalar gibi. Yine de servislerin istediği €1000 yerine toplam maliyet yaklaşık €100-€150 oluyor
Annem çocukken pantolon paçalarını kısaltır, biz büyüyünce yeniden uzatırdı; dizler ya da dirsekler aşınınca da yama yapardı
Bu ortam bana hem iyi hem kötü alışkanlıklar kazandırdı. Evdeki tamiratların neredeyse hepsini kendim yapıyorum ama çok çalıştığım için her zaman yeterli zamanım ya da enerjim olmuyor. Yapabilecek durumda olsam bile başkasına para verip yaptırmak zor geliyor; bu yüzden bozuk şeyleri gerekenden uzun süre beklettiğim oluyor
O zamanı bakım ve tamire değil de yan projelere harcasaydım belki daha çok para kazanmış olurdum
Bu insanlar başkalarına temel düzeye kadar öğretir, beklenmedik bir sorun çıktığında da yardım ederdi. Yani bilgi ve temel çıraklık kültürü tüm topluluğun içine işlemişti
Bugün tamir daha çok tek başına yapılan bir iş haline geldi. YouTube gibi şeyler büyük yardım sağlıyor ama topluluk boyutu kayboldu
Ne yazık ki bunun yan etkisi olarak tamir ve yeniden kullanım daha az cazip görülmeye başlandı; tamir edilebilirlik ve uzun ömür de ürün özelliği olarak daha az önemli hale geldi. Şimdi özellikle nüfusun %99'u için ABD'deki ekonomik büyüme duraklamışken ne kaybettiğimiz ortaya çıkıyor. Uzun ömürlü üretilmiş şeyler yok ve şirketler de tamir edilebilir, uzun ömürlü ürünler sunmuyor ya da sunamıyor. Bu yüzden eşyalarını kendisi tamir etmeye çalışan insanlar bile sayısız engelle karşılaşıyor
Flash çip içindeki veri yığınının aslında bir resim olduğunu fark etmesi ilginçti. Bildiğimiz anlamda bir resim değil, çeşitli LED animasyonlarını tanımlayan veriydi
Ben de Hue lamba animasyonları için buna benzer bir formatı bağımsız olarak tasarlamıştım. Ama ikili değil, metindi
bulb1 bulb2dly R G B WW CW R G B WW CW100 10 25 20 0 0 25 10 20 0 0200 10 50 20 0 0 50 10 20 0 0İlk değer, bir sonraki satıra geçmeden önce beklenecek milisaniye süresidir; ardından her LED kanalının parlaklığı 100 üzerinden yazılır. Sayıyla başlamayan satırlar yorumdur ve kanallar arasında istediğiniz kadar bir veya daha fazla boşluk bırakabilirsiniz
Ticari bir üründe benzer bir ikili biçim görmek hoşuma gitti. Aslında oldukça bariz bir yaklaşım ama yine de bunu doğrudan görmek ilginç
https://en.wikipedia.org/wiki/Piano_roll
İnsanı alçakgönüllü yapan bir yazıydı. Gerçek full-stack mühendislik bu işte
Elgato'nun bu yazıya nasıl tepki vereceğini görmek isterim
Benim deneyimimde Elgato ürünleri ucuz ama korkunç derecede kararsız. Bu yazı nedenini büyük ayrıntıyla gösteriyor
Yazılımda isteyebileceğiniz tüm özellikler var, kendi eklentilerinizi yazabiliyorsunuz ve eklenti geliştirme süreci de belgelenmiş. Hepsi gerçekten iyi
Ama pratikte Key Light'ın gücünü sürekli kapatıp açmanız gerekiyor ve Windows'ta Stream Deck uygulamasını da durmadan yeniden başlatmak zorunda kalıyorsunuz
Böyle projelerde motivasyonu nasıl koruduklarını merak ediyorum. Parçaları tekrar tekrar sipariş edip gelmesini beklemek gerekiyor; özellikle Çin'den gelen parçalarda bu bekleme yüzünden epey proje yarım kalıyor
Doğru saydıysam yazar en az üç kez sipariş vermiş. Yine de gerçekten çok ilginç
Termal kamera yoksa karta izopropil alkol sürüp en hızlı nerede buharlaştığına bakabilirsiniz
Elbette bu yöntem yalnızca düşük voltajlı cihazlarda uygulanabilir
Gerçeği araştırıp sonuna kadar iz sürebilme yeteneği bizi yüce kılan, bir şeyler üretip geliştiren insani yönümüzdür. Bu kişi dünyevi bir nesneyi araştırırken çok derin bir ruhsal yol yürümüş
Cihazların bize direnmesi çok üzücü, sinir bozucu ve adeta cehennem gibi. Bilgisayarlar ve aygıtlar, kendilerini oluşturan gerçeği güçlendirip dışa vurmalı. Ama insanlık kendi yaptığı kabukların içine hapsolmuş durumda; katılımı ve öğrenme imkânını reddeden tepeden inme bir tüketimcilik içinde yaşıyoruz. Özellikle bilgisayarlar çoğu zaman gerçeği ve anlayışı gizleyen başlıca opaklaştırma aygıtları haline geliyor. Muazzam bir potansiyel feci şekilde boşa harcanıyor
Umarım hayattayken açık makinelerin ortaya çıkışına yönelik bir kırılmayı görürüz. Doug'u alkışlıyorum