Memperbaiki perangkat capture HDMI Elgato HD60 S dengan Ghidra
(downtowndougbrown.com)- Elgato Game Capture HD60 S yang tidak terdeteksi lewat USB kembali normal untuk capture HDMI dan passthrough setelah tiga IC daya yang menarik turun rail daya diganti
- Dengan pencitraan termal, pengukuran tegangan, dan pencarian marking SMD, ditemukan dua regulator Fitipower FP6373A dan satu inverter tegangan TI TPS60403DBV; harga komponennya kurang dari 1 dolar AS berdasarkan LCSC
- Fungsi capture kembali hidup, tetapi LED status sebanyak 7 putih dan 7 merah tetap mati; driver LED dan rangkaian LED sendiri dipastikan normal lewat kontrol langsung dengan Raspberry Pi Pico
- Hasil penelusuran firmware Nuvoton M031LD2AE dan flash SPI untuk Cypress/Infineon CYUSB3014 dengan Ghidra menunjukkan data animasi LED yang seharusnya ada mulai 0x300000 ternyata kosong atau rusak
- Setelah hanya area data LED dari HD60 S yang normal disintesis ke flash SPI perangkat bermasalah, LED status kembali hidup; kerusakan yang tersisa ternyata bukan hardware, melainkan masalah software, pemrograman, atau jalur update
Perbaikan bagian daya HD60 S yang tidak terdeteksi lewat USB
- Elgato Game Capture HD60 S USB 3.0 rusak yang dibeli di eBay tidak menampilkan apa pun di komputer saat dihubungkan
- Setelah papan dibuka dan tegangannya diukur, rail daya terlihat tertarik turun; kamera termal dipakai untuk mencari chip yang memanas
- Komponen bermasalah adalah IC daya dengan marking kecil saja
- Dua chip bertanda
fiVJVEberada di dekat induktor 2,2µH, sehingga diduga sebagai regulator switching - Melalui pencarian marking SMD dan pengecekan dokumen Fitipower, kandidatnya dipersempit menjadi FP6373A
- Chip bertanda
PFNIdipastikan lewat pencarian Google sebagai inverter tegangan TI TPS60403DBV
- Dua chip bertanda
- Ketiga chip semuanya menerima input 5V dan sisi outputnya memiliki resistansi rendah; saat 2,7V disuntikkan langsung ke rail output salah satu FP6373A, regulator tersebut memanas
- FP6373A bisa dibeli di LCSC seharga $0.17 per unit, sedangkan chip TI seharga $0.58; ongkos kirimnya jauh lebih besar daripada harga komponennya
Masalah LED status yang tersisa setelah penggantian komponen
- Setelah tiga IC daya diganti, HD60 S dikenali sebagai perangkat USB dan capture HDMI serta passthrough berjalan normal
- Namun indikator status perangkat tetap tidak menyala
- Ada 7 LED putih dan 7 LED merah
- LED putih seharusnya berkedip dua kali segera setelah tersambung
- Chip terkait LED adalah IT1504 dari Innochip, yang menurut datasheet merupakan driver LED 16 kanal
- Saat pin input IT1504 dilihat dengan osiloskop, ada trafik serial mirip SPI yang masuk
- Hasil penelusuran PCB menunjukkan IT1504 dikendalikan oleh mikrokontroler ARM Cortex-M0 Nuvoton M031LD2AE
Pencarian pengganti IT1504 dan verifikasi rangkaian
- IT1504 sulit didapat lewat kanal distribusi umum, dan Innochip tidak bisa mengirim sampel karena stok yang tersedia hanya dalam satuan reel penuh
- Dalam proses mencari pengganti, ditemukan MBI5040 dari Macroblock
- Datasheet MBI5040 hampir sama dengan datasheet IT1504 dalam hal konfigurasi dan diagram blok
- Spesifikasi arus output sedikit berbeda, tetapi fungsi dan sistem perintahnya sangat mirip
- Informasi perintah di datasheet MBI5040 membantu memahami cara kontrol LED
- MBI5040GF dibeli dan dipasang menggantikan IT1504, tetapi LED tetap tidak menyala
- Setelah LED dinyalakan satu per satu dengan bench power supply dan resistor, dipastikan LED itu sendiri normal
- Saat Raspberry Pi Pico dihubungkan langsung ke input MBI5040 dan diberi perintah, LED bisa dikendalikan sepenuhnya
- Disimpulkan tidak ada masalah fisik pada rangkaian driver LED maupun array LED
- Saat IT1504 asli dipasang kembali, kontrol via Pico juga berjalan normal, sehingga driver LED lama pun tidak rusak
Menganalisis firmware MCU Nuvoton dengan Ghidra
- Dukungan Elgato ditanyai soal masalah LED status yang diketahui atau kemungkinan pengaturan terkait, tetapi tidak ada solusi praktis yang didapat
- Untuk memeriksa firmware MCU Nuvoton, konektor JST 4 pin di papan ditelusuri, dan dipastikan sebagai konektor pemrograman MCU
- Upaya membaca chip dengan Nu-Link2-Me dan NuMicro ICP Programming Tool dilakukan, tetapi isi chip terlindungi
- Sebagai gantinya, ditemukan file
FW_HD60_S_MCU.binyang disertakan dalam Elgato 4K Capture Utility- Menurut
ElgatoDeviceCapabilities.json, firmware ini ditujukan untuk perangkat dengan USB product ID 0x0076 - Elgato menyebutnya “Game Capture HD60 S Rev.4”
- Menurut
- Biner tersebut terlihat seperti firmware Cortex-M0; word pertama
0x20000E70tampak seperti stack pointer yang valid, dan word-word berikutnya tampak seperti tabel vektor berbentuk alamat flash - Firmware dimuat ke Ghidra, lalu pemetaan register dicoba dengan SVD-Loader
M031AE_v1.svddari NuMicro_DFP dimodifikasi agar bisa dimuat oleh plugin- M031BSP dari Nuvoton membantu identifikasi fungsi
Penggantian MCU dan pembukaan kunci untuk debugging
- Saat chip kosong baru dipasang menggantikan M031LD2AE asli dan firmware Elgato di-flash, perangkat berfungsi, tetapi chip kembali berada dalam kondisi terlindungi sehingga tidak bisa di-debug
- Di Ghidra, fungsi yang memperbarui pengaturan proteksi ditemukan dan dipatch agar tidak mengunci chip
- Setelah firmware yang sudah dipatch diunggah, kode inisialisasi bisa di-debug dengan OpenOCD dan GDB
- Jalur kode kontrol LED ada di dalam firmware, tetapi dilewati dalam alur eksekusi normal
- Saat nilai register dan RAM dipaksa diisi lewat GDB agar kode kontrol LED berjalan, lampu bisa dinyalakan
- Firmware memiliki kode kontrol LED
- Masalahnya adalah kode itu tidak berjalan dalam kondisi normal
Bootloader dan backup firmware lengkap
- Firmware dengan bit proteksi dilepas dipasang ke HD60 S lain melalui jalur update Elgato, sebagai eksperimen untuk membaca seluruh isi yang semula terlindungi
- Setelah update, perangkat tampak tidak berfungsi sebagai capture card, tetapi chip sudah tidak terkunci sesuai rencana
- Hasilnya, area berikut bisa dibaca
- LDROM: bootloader tahap pertama Elgato
- Data flash
- Nilai register konfigurasi asli
- Firmware aplikasi APROM
- Bootloader LDROM dapat menerima perintah dan data lewat I2C untuk mem-flash ulang APROM
- Jika chip dalam kondisi tidak terlindungi, bootloader tidak berpindah ke firmware aplikasi dan menunggu perintah update
- Elgato rupanya menggunakan bit kunci/buka kunci sebagai sinyal apakah harus menunggu bootloader
- Perilaku ini juga menjelaskan mengapa perangkat berhenti setelah firmware tidak terkunci dipasang
Memahami struktur internal HD60 S
- Di dalam perangkat, dua prosesor keluarga ARM bekerja bersama
- Chip periferal USB 3.0 Cypress/Infineon CYUSB3014 adalah ARM926EJ-S dan berkomunikasi dengan PC lewat USB 3.0
- MCU Cortex-M0 Nuvoton M031LD2AE mengendalikan chip video ITE dan LED
- MCU Nuvoton mengonfigurasi dan memantau chip-chip ITE melalui bus I2C terpisah
- ITE IT6802E tampaknya merupakan penerima HDMI
- ITE IT66121FN tampaknya berperan mengeluarkan stream data paralel menjadi HDMI
- CYUSB3014 mengirim perintah ke MCU Nuvoton lewat I2C, dan Nuvoton mengembalikan informasi status ke CYUSB3014
- CYUSB3014 menerima stream data video dari IT6802E dan meneruskannya ke komputer lewat USB
- Di papan juga ada CPLD Altera MAX II, yang tampaknya ikut berperan agar data video masuk dalam bentuk yang bisa diterima CYUSB3014
Flash SPI dan penemuan data animasi LED
- Firmware CYUSB3014 tersimpan tanpa proteksi di flash SPI Winbond W25Q32JVSSIQ 4MB
- Saat dump flash SPI diperiksa, ada blok-blok data yang terlihat seperti gambar kecil mulai offset 0x300000
- Setelah lima GPIO yang tidak dikenal di firmware Nuvoton ditelusuri, pin-pin ini mengarah ke bus switch quad 2:1 mux/demux PI5C3257 dari Diodes Incorporated
- Bus switch ini memilih pihak yang terhubung ke flash SPI, antara CYUSB3014 dan MCU Nuvoton
- Awalnya flash SPI dikira khusus untuk CYUSB3014
- Nyatanya, setelah CYUSB3014 boot, MCU Nuvoton mengambil alih kontrol flash SPI
- Fungsi-fungsi yang baru diidentifikasi di Ghidra adalah kode terkait transaksi SPI bit-banging serta penghapusan, pembacaan, dan penulisan flash SPI
Penyebab sebenarnya kerusakan LED
- Data setelah 0x300000 di flash SPI bukan gambar biasa, melainkan frame animasi LED
- Setiap blok 16 byte adalah frame animasi yang dipakai untuk 14 LED
- Dua byte terakhir di tiap baris adalah waktu tunda sebelum pindah ke frame berikutnya
- Firmware Nuvoton memeriksa apakah dua byte pertama di posisi awal 0x300000 adalah nilai 16-bit 0xAA55
- Pada dump flash SPI dari dua perangkat yang LED-nya tidak berfungsi, area tersebut kosong atau rusak
- Dalam satu dump, area 0x300000 hampir seluruhnya terisi
0x00 - Beberapa animasi diawali header aneh seperti
AB 03 12 39
- Dalam satu dump, area 0x300000 hampir seluruhnya terisi
- Flash SPI dari HD60 S ketiga yang berfungsi normal memiliki header dan data LED yang benar di 0x300000
- Word 16-bit pertamanya adalah
0xAA55yang dicari firmware - Header tersebut memuat informasi terkait 26 animasi LED
- Data dot correction yang dimuat ke IT1504 ada di 0x3007F8, dan
0x521114A7yang mengikutinya adalah CRC-32 dari 16 byte sebelumnya
- Word 16-bit pertamanya adalah
Memulihkan LED dengan patch flash SPI
- Pada flash SPI perangkat bermasalah, data unik tiap perangkat dari 0x000000 hingga 0x2FFFFF dipertahankan
- Karena nomor seri USB terdapat di suatu tempat dalam area ini
- Dibuat image hibrida yang hanya mengganti area data LED mulai 0x300000 dengan data dari dump perangkat normal
- Setelah image ini di-flash ke perangkat dengan LED bermasalah, LED putih berkedip dua kali dan LED merah menyala singkat sekali
- Walau perangkat normal berasal dari revisi yang lebih lama dan model MCU Nuvoton-nya juga berbeda, data LED-nya cocok dengan format yang diharapkan firmware baru
- Di dalam aplikasi Game Capture lama untuk Windows dan Mac juga terdapat data mentah animasi
- Path Windows adalah
C:\Program Files\Elgato\GameCapture\Animations - Path Mac adalah
/Applications/Game Capture HD.app/Contents/Resources/Animations - Jika data file seperti
01.ani,02.anidisusun ulang sesuai urutan LED, hasilnya cocok dengan data animasi pada dump flash normal
- Path Windows adalah
Batasan alat update dan prosedur pemulihan
- Update firmware Windows di Elgato 4K Capture Utility bermasalah karena tidak menunggu cukup lama
- Update ditampilkan gagal padahal proses masih berlangsung
- Jika tetap menunggu, LED perangkat berkedip dan perangkat reboot normal dengan firmware baru
- Jika perangkat dicabut segera setelah pesan gagal, flash bisa tertinggal dalam kondisi tidak lengkap
- Masalah ini teratasi setelah nilai
updateDurationSecdiElgatoDeviceCapabilities.jsondinaikkan dari 40 menjadi 80 - Elgato menyarankan agar update firmware HD60 S tidak dilakukan kecuali diarahkan oleh dukungan teknis, dan fiturnya juga disembunyikan di balik kombinasi tombol khusus pada layar pengaturan
- Prosedur pemulihan LED rumit
- Memodifikasi
ElgatoDeviceCapabilities.jsonagar update firmware diizinkan - Mencabut perangkat tepat setelah update dimulai untuk mendorong chip Cypress mengendalikan flash SPI
- Melepas jumper PCB agar CYUSB3014 boot dari USB
- Mengunggah
cyfxflashprog.imgke RAM dengandownload_fx3dari Cypress SDK - Men-dump seluruh flash SPI dengan
fx3_spitestyang dimodifikasi, lalu mem-patch area LED - Mengembalikan jumper dan menjalankan update firmware normal di 4K Capture Utility untuk memulihkan firmware Nuvoton
- Memodifikasi
- Pada akhirnya, perbaikan awal selesai dengan mengganti tiga chip berharga kurang dari 1 dolar AS, sedangkan masalah LED dipahami sebagai cacat terkait software, pemrograman, atau update yang terjadi pada sebagian HD60 S
1 komentar
Komentar Hacker News
Sulit memahami tujuannya dalam keseluruhan struktur, dan kadang tujuan itu terkubur jauh di dalam beberapa lapis pemanggilan fungsi.
Ini juga sering terjadi saat melihat kode sumber secara langsung. Kebanyakan perangkat lunak terlalu diabstraksikan, dan MCU sudah begitu besar sekaligus murah sehingga hal seperti perangkat capture HDMI yang berisi dua core ARM mulai terlihat juga di dunia embedded. Sepertinya perangkat ini tidak membutuhkan lebih dari satu MCU.
Saat tumbuh besar di India sekitar 20 tahun lalu, daya beli rendah dan barang-barang mahal, jadi hampir semuanya diperbaiki atau diakali ulang untuk dipakai lagi.
Kami menggunakan banyak sekali solusi sementara yang disebut jugaad agar barang bisa berfungsi, dan pakaian juga dipakai ulang; penjahit melakukan tambalan perbaikan yang disebut rafu untuk memperpanjang umurnya. Ini sangat umum, terutama di keluarga kelas menengah seperti keluarga saya.
Ayah saya, yang bekerja di perusahaan ekspor pakaian, sering berkata bahwa orang Barat lebih suka barang sekali pakai dan barang baru, entah mobil, elektronik, maupun pakaian. Saat itu saya tidak memahami pola pikir tersebut. Namun sekarang, seiring daya beli naik dan harga turun berkat Tiongkok, kami pun cenderung membuang dan membeli baru.
Saya sangat menghormati orang-orang yang tidak menyerah di tengah jalan dan tidak hanya berpikir bahwa membeli baru lebih mudah. Kegigihan dan kecerdikan seperti ini benar-benar patut dipuji.
Kalau bisa memperbaikinya sendiri dan mendapatkan komponen yang dibutuhkan, itu bagus. Tetapi jika harus membayar pengalaman dan pengetahuan seseorang, setidaknya di tempat saya tinggal biayanya cukup mahal dan orang yang bisa memperbaiki pun sulit ditemukan. Yang sering terlihat di luar toko kosong hanyalah papan servis TV.
Untungnya saya sudah setengah pensiun dan dibayar per jam, jadi waktu tambahan saya tidak punya biaya uang. Karena itu saya bisa menghabiskan sehari untuk mencoba memperbaiki mesin pencuci piring, lalu jika beberapa hari kemudian rusak lagi, menghabiskan sehari lagi untuk memasang yang baru. Teknisi pemasangan profesional mungkin bisa memasang unit baru dalam satu jam, tetapi setidaknya saya tidak perlu menunggu penjadwalan.
Baru dalam sekitar 50 tahun terakhir konsumerisme membesar, sementara kualitas dan harga barang seperti pakaian turun.
Belakangan saya merawat sepeda motor sendiri; awalnya perlu sedikit investasi alat, seperti alat untuk membuka filter oli, dan harus mendapatkan suku cadang serta bahan habis pakai. Misalnya oli, washer tembaga, dan sekrup pengganti untuk sekrup reservoir minyak rem yang sudah tua. Meski begitu, biayanya hanya sekitar €100–€150, bukan €1000 seperti penawaran bengkel.
Ibu saya memendekkan keliman celana saat kami kecil, lalu memanjangkannya lagi saat kami tumbuh, dan menambal bagian lutut atau siku yang aus.
Lingkungan seperti ini menanamkan kebiasaan baik sekaligus buruk. Saya melakukan hampir semua perbaikan rumah sendiri, tetapi karena bekerja terlalu banyak, waktu atau energi tidak selalu cukup. Sulit bagi saya membayar orang lain untuk mengerjakannya meski sebenarnya sangat mampu, sehingga barang rusak dibiarkan lebih lama dari yang seharusnya.
Kalau waktu itu dipakai untuk proyek sampingan alih-alih pemeliharaan dan perbaikan, mungkin saya akan punya lebih banyak uang.
Mereka mengajarkan dasar-dasarnya kepada orang lain, dan membantu ketika muncul masalah tak terduga. Bisa dibilang, pengetahuan dan pembelajaran magang dasar tertanam di seluruh komunitas.
Kini perbaikan menjadi pekerjaan yang dilakukan sendirian. Hal seperti YouTube sangat membantu, tetapi aspek komunitasnya telah hilang.
Efek samping yang menyedihkan adalah perbaikan dan penggunaan ulang dianggap kurang menarik, sehingga kemampuan diperbaiki dan umur panjang juga menjadi kurang penting sebagai fitur produk. Kini, ketika pertumbuhan ekonomi AS mandek, terutama bagi 99%, terlihat jelas apa yang telah kita hilangkan. Tidak ada barang yang dibuat untuk tahan lama, dan perusahaan juga tidak atau tidak mampu menawarkan produk yang dapat diperbaiki dan tahan lama. Akibatnya, bahkan orang-orang yang sengaja berusaha memperbaiki barang miliknya sendiri pun menghadapi banyak hambatan.
Bagian ketika ia menyadari bahwa gumpalan data di dalam chip flash adalah gambar terasa menarik. Bukan gambar dalam arti umum, melainkan data yang mendeskripsikan beberapa animasi LED.
Saya pernah membuat format serupa sendiri untuk animasi lampu Hue. Bedanya, formatnya teks, bukan biner.
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 0Nilai pertama adalah jumlah milidetik jeda sebelum lanjut ke baris berikutnya, lalu setelah itu tertulis kecerahan tiap kanal LED dalam skala 100. Baris yang diawali bukan angka adalah komentar, dan di antara kanal boleh ada satu atau lebih spasi sebanyak apa pun.
Menyenangkan melihat format biner serupa pada produk komersial. Sebenarnya pendekatannya cukup jelas, tetapi tetap menarik melihatnya langsung.
https://en.wikipedia.org/wiki/Piano_roll
Tulisan yang membuat rendah hati. Inilah rekayasa full-stack yang sebenarnya.
Saya ingin melihat bagaimana Elgato akan merespons tulisan ini.
Dari pengalaman saya, produk Elgato murah tetapi sangat tidak stabil. Tulisan ini menunjukkan alasannya dengan sangat rinci.
Perangkat lunaknya juga punya semua fitur yang diinginkan, kita bisa membuat plugin sendiri, dan proses pembuatan pluginnya terdokumentasi. Semuanya sebenarnya sangat bagus.
Namun dalam praktiknya, Key Light harus terus-menerus dimatikan dan dinyalakan lagi, dan aplikasi Stream Deck di Windows juga harus terus-menerus dijalankan ulang.
Saya penasaran bagaimana orang mempertahankan motivasi dalam proyek seperti ini. Harus berulang kali memesan komponen dan menunggu kedatangannya; terutama untuk komponen dari Tiongkok, menunggu seperti itu membuat cukup banyak proyek akhirnya ditinggalkan.
Jika saya menghitung dengan benar, penulis setidaknya melakukan tiga kali pemesanan. Meski begitu, ini benar-benar menarik.
Jika tidak punya kamera termal, oleskan alkohol gosok pada papan dan lihat bagian mana yang paling cepat menguap.
Tentu saja, cara ini hanya bisa dilakukan pada perangkat bertegangan rendah.
Kemampuan menyelidiki kebenaran dan menelusurinya sampai tuntaslah yang membuat kita menjadi ilahi, sisi manusia yang menciptakan dan meningkatkan sesuatu. Orang ini berjalan di jalan spiritual yang sangat dalam sambil menyelidiki satu benda duniawi.
Fakta bahwa perangkat-perangkat melawan kita itu sangat menyedihkan, menjengkelkan, dan seperti neraka. Komputer dan perangkat seharusnya memperkuat dan memancarkan kebenaran yang menyusunnya. Namun umat manusia terperangkap di dalam cangkang buatannya sendiri, dalam konsumerisme top-down yang menolak partisipasi dan kemungkinan belajar. Khususnya komputer sering menjadi perangkat pengabur utama yang menutupi kebenaran dan pemahaman. Potensi yang luar biasa besar terbuang sia-sia.
Saya berharap semasa hidup dapat melihat gelombang terobosan munculnya mesin-mesin terbuka. Tepuk tangan untuk Doug.