2 poin oleh GN⁺ 2024-09-18 | 1 komentar | Bagikan ke WhatsApp
  • 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 fiVJVE berada 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 PFNI dipastikan lewat pencarian Google sebagai inverter tegangan TI TPS60403DBV
  • 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.bin yang 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”
  • Biner tersebut terlihat seperti firmware Cortex-M0; word pertama 0x20000E70 tampak 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.svd dari 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
  • Flash SPI dari HD60 S ketiga yang berfungsi normal memiliki header dan data LED yang benar di 0x300000
    • Word 16-bit pertamanya adalah 0xAA55 yang dicari firmware
    • Header tersebut memuat informasi terkait 26 animasi LED
    • Data dot correction yang dimuat ke IT1504 ada di 0x3007F8, dan 0x521114A7 yang mengikutinya adalah CRC-32 dari 16 byte sebelumnya

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.ani disusun ulang sesuai urutan LED, hasilnya cocok dengan data animasi pada dump flash normal

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 updateDurationSec di ElgatoDeviceCapabilities.json dinaikkan 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.json agar 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.img ke RAM dengan download_fx3 dari Cypress SDK
    • Men-dump seluruh flash SPI dengan fx3_spitest yang dimodifikasi, lalu mem-patch area LED
    • Mengembalikan jumper dan menjalankan update firmware normal di 4K Capture Utility untuk memulihkan firmware Nuvoton
  • 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

 
GN⁺ 2024-09-18
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.

    • Harga barang baru turun, sementara biaya perbaikan naik.
      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.
    • Di Eropa Barat pun lama sekali keadaannya mirip. Generasi orang tua saya tumbuh dengan menambal pakaian dan memperbaiki banyak barang.
      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.
    • Begitu juga ketika saya tumbuh besar di keluarga pekerja kerah biru di Timur Laut AS pada era 80-an. Ayah saya memperbaiki semua barang rumah tangga dan kendaraan, saya memakai pakaian bekas kakak-kakak saya, dan adik-adik saya memakai pakaian bekas saya.
      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.
    • Dulu perbaikan lebih mirip pengetahuan komunitas. Seseorang di lingkungan sekitar paham pengelasan, yang lain paham kelistrikan, plesteran, perbaikan pakaian, dan sebagainya.
      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.
    • Pola pikir konsumerisme hampir merupakan kemewahan yang lahir dari ekonomi kuat dan mobilitas naik yang tinggi.
      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 bulb2
    dly R G B WW CW R G B WW CW
    100 10 25 20 0 0 25 10 20 0 0
    200 10 50 20 0 0 50 10 20 0 0
    Nilai 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.

  • Tulisan yang membuat rendah hati. Inilah rekayasa full-stack yang sebenarnya.

    • Benar-benar membuat rendah hati. Bahkan jika menjadikan tulisan ini sebagai titik awal, rasanya saya butuh beberapa minggu untuk bisa melakukannya.
  • Saya ingin melihat bagaimana Elgato akan merespons tulisan ini.

    • Saya juga. Mudah membayangkan para engineer yang membaca tulisan menarik ini matanya berbinar-binar, sementara para manajer marah dan menuntut cara yang lebih baik untuk melindungi kekayaan intelektual perusahaan.
    • Sekarang Corsair, pemilik Elgato, yang seharusnya merespons. Secara pribadi saya melihatnya lebih dekat ke perusahaan tradisional yang sudah melantai di bursa, jadi kalau ada respons, saya akan terkejut dengan senang hati.
    • Sekarang saya jadi penasaran apakah mereka tahu penyebab masalah LED itu, atau penyebab korupsi memori di bawahnya.
  • Dari pengalaman saya, produk Elgato murah tetapi sangat tidak stabil. Tulisan ini menunjukkan alasannya dengan sangat rinci.

    • Masalah kedipan dan korupsi menunjukkan budaya rekayasa perangkat lunak yang sangat buruk.
    • Yang disayangkan, produk seperti Key Light atau Stream Deck sendiri keren dan benar-benar berguna.
      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.

    • Waktu memang masalah, tetapi biaya memesan komponen seperti ini juga masalah. Masing-masing hanya beberapa sen, tetapi kita tidak bisa mengetahui semua komponen yang diperlukan sejak awal.
      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.