2022-07-20

Jak (ne)přeflashovat falešnou VGA kartu

Tenhle zápis se výrazně liší od běžných témat tohohle blogu, ale třeba se to někomu bude hodit... =)

Celý příběh začal tím, že jsem do staršího počítače potřeboval nějakou grafickou kartu, která by v rozumné rychlosti zvládala Minecraft, což není zase tak velký požadavek, takže jsem prošel pár inzerátů a narazil na výhodnou nabídku: Nvidia GTX 1050 Ti 1 GB RAM za 1000 Kč. (Znalci se pravděpobobně už teď zlomyslně smějí. =)

Cena byla o něco nižší, než je běžné, a současně byl divný ten údaj o 1 GB RAM, protože GTX 1050 Ti se obvykle vyráběla se 4 GB, takže jsem tipoval, že jedná o nějakou ořezanou verzi, kde se no-name výrobce snažil o snížení ceny. Pro mé účely jsem ale 4 GB nepotřeboval, takže jsem si řekl, že to nevadí a kartu objednal.

Když karta dorazila a zapojil jsem ji do PC, tak se objevily další nesrovnalosti. Po instalaci ovladačů se u karty ve Správci zařízení buď objevil legendární "žlutý vykřičník" a stále fungovala v režimu Standard VGA, nebo úplně vypadl obraz a karta nefungovala vůbec.

Na řadu tedy přišla utilita GPU-Z a objevil se hlavní zádrhel.

 

GTX 1050 Ti by se ovšem měla hlásit nějak takhle:

Na první pohled tedy bylo jasné, že karta je ve skutečnosti založena na starším chipu GP116 z roku 2011 a rozhodně to není GTX 1050 Ti. Našel jsem tedy nějaké starší ovladače, donutil Windows je použít a VGA začala fungovat. Výkon byl ovšem skutečně slabý (zhruba šestinový oproti skutečné GTX 1050 Ti) a Minecraft byl na hranici hratelnosti (cca 22 FPS).

To mě vyprovokovalo k dalšímu pátrání. Chip GP116 se používal převážně v grafických kartách GTX 550 Ti, ale i ty by měly mít o trochu větší taktovací frekvenci a tedy i výkon.


Padělaná grafická karta byla nastavená na nižší frekvenci, aby vůbec mohla fungovat (dá se předpokládat, že chip se výrobcům VGA prodával se slevou, protože nezvládal požadovanou rychlost), ale rozdíl frekvencí byl značný (600 versus 1000), a tak jsem chtěl zkusit, jak vysokou frekvenci karta doopravdy ustojí.

Jako první tedy přišla na řadu utilita MSI Afterburner, která umožňuje měnit za chodu pracovní frekvenci VGA karet, ale zdálo se, že má problém se s touhle kartou domluvit a tu frekvenci ji vnutit.

Bylo tedy třeba nasadit silnější kalibr a zkusit změnit celý firmware grafické karty - ideálně tam nahrát správný firmware pro chip GP116 a teprve pak se pustit do experimentů s frekvencí.

Stáhnul jsem si tedy utilitu nvflash64, která umí firmware karty načíst i zapsat přímo z Windows, ale ta totálně selhala. Přítomnost karty sice detekovala, ale nebyla schopna z ní ani načíst současný firmware (bohužel bez zobrazení jakéhokoliv chybového hlášení). Zkusil jsem ještě starší versi nvflash for DOS, ale to bylo ještě horší, protože tahle verze kartu ani nerozpoznala.

(Mimochodem GPU-Z  firmware stáhnout umělo, ale to ho neumožňuje přepsat.)

Následovalo tedy další pátrání na internetu a zjištění, že se jedná o celkem "populární" problém, který mi ovšem zatím zcela unikal, protože VGA karty obvykle moc neřeším.

Padělané karty GTX 1050 Ti se masově prodávaly především na serveru Wish a já jsem měl zřejmě ještě docela štěstí, protože často mají i nesprávně nastavenou velikost paměti a buď nefungují vůbec nebo při zaplnění reálné paměti padají. Založené jsou skutečně na chipu GP116, který nezvládal frekvenci používanou GTX 550 Ti, takže se používal převážně pro druhou a třetí revizi karty GTS 450. Problém je, že výrobce údajně na desku VGA záměrně nedává nějaký kontrolní odpor a tím je zablokované softwarové flashování firmwaru a je možné použít pouze HW programátor.

HW programátor mi naštěstí půjčil kolega, takže bylo možné s experimenty pokračovat.

 

Z karty ovšem bylo třeba sundat chladič, aby byl chip s firmwarem (cca 3 cm vlevo a 1 cm níže od hlavní chipu) přístupný.



Po jistých problémech se nám povedlo zachytit "kleštičky" programátoru na mrňavý chip tak, aby měly kontakt a nepadaly, a přes CH341A Programmer se povedlo i stáhnout firmware.

Velikost souboru se sice lišila od souboru, který uložilo GPU-Z, ale to proto, že GPU-Z uložilo jen využitá data (61 kB), kdežto programátor uložil celý obsah chipu (256 kB) včetně prázdného místa. Jinak se prvních 61 kB zcela shodovalo, což bylo dobré znamení, že programátor správně funguje.

Moje původní představa pro další postup byla, že ve firmwaru prostě najdu textově zapsané PCI ID zařízení (PCI\VEN_10DE&DEV_1C82), to přepíšu na správné (PCI\VEN_10DE&DEV_1244) a upravený firmware zapíšu zpátky do VGA, ale PCI ID jako text uloženo nebylo, takže následovalo další googlování.

Výsledkem bylo zjištění, že kde přesně je PCI ID binárně uloženo, ale především to, že je zbytečně dělat to ručně, protože na editaci starších firmwaru existuje utilita NiBiTor čili Nvidia BIOS Editor. Ta umožňuje trochu jednodušší editování běžných parametrů a především přidává na konec firmwaru správný kontrolní součet, bez kterého jinak VGA karta odmítne firmware použít.

 


 

Brzy ale následovalo další zklamání. NiBiTor původní firmware karty prohlásil za neznámý formát, takže část načtených údajů byl zjevně rozhozená a i při těch nejmenším změnách, jako je úprava jednoho bajtu Device ID (a jednoho bajtu kontrolního součtu), pak karta po naflashování odmítala startovat. Základní problém je zřejmě v tom, že poslední verze NiBiToru je z roku 2012 a podle všeho v té době ještě neexistovaly ty pozdní řady GTS 450 s chipem GF116. Navíc se někdy v té době změnil formát VGA firmwarů a začal se do nich vkládat i nějaký digitální podpis výrobce, a tak nemělo smysl NiBiTor dále rozvíjet.

Zbývalo zkusit najít nějaký jiný originální firmware, ale sbírka firmwarů na TechPowerUp bohužel není všemocná. Starší firmwary většinou nefungovaly vůbec a s novějšími karta sice startovala, ale obraz byl nějakým způsobem rozpadlý (svislé zelené čáry a podobně). Nápovědou byly ostatně už verze firmwarů: falešná karta měla verzi 70.26.53 a nejnovější firmware v archivu jen 70.26.3F.

Nakonec jsem se tedy potupně vrátil k původnímu "falešnému" firmwaru, se kterým karta alespoň nějak funguje.

Pokud by někdo věděl o jiném funkčním firmwaru nebo metodě, jak změnit Device ID na správné, tak bych mu byl vděčný - přinejmenším ze vzdělávacích důvodů, =}