Na FreeHostingu Endora běží desítky tisíc webů. Přidejte se ještě dnes!

Vytvořit web zdarma

Na FreeHostingu Endora běží desítky tisíc webů. Přidejte se ještě dnes!

Vytvořit web zdarma

SuperIO expander s W83627HF na LPC

      26.11.2017 Na modernch zkladnch deskch postrdm klasick rozhran COM a LPT, kter dnes implementuje jen pr vrobc (zejmna Gigabyte) a to na velmi omezenm potu model MB (nepotm-li drah industrial MB). Tomu jsem tak poddil vbr desky pi poslednm upgradu PC a koupil levnou bazarovou Gigabyte GA-P67-DS3-B3. Jet hor je situace s adiem disket (FDC), kter pestali osazovat vichni vrobci. Resp. FDC je stle ptomen ve vtin pouvanch SuperIO ip (vetn mho ITE IT8728F), jen se nvrhm nechce potebn piny vyvst na konektor za pr cent...
      Rozhodl jsem se tedy postavit si vlastn expanzn destiku s druhm SuperIO ipem, kter se k MB pipoj pomoc LPC sbrnice (sriov ISA, jde z n dokonce udlat i klasick paraleln ISA). Na vtin MB je toti LPC vyvedena na snadno pstupn TPM header. Jako sekundrn SuperIO ip jsem zvolil Winbond W83627HF-AW, kterch mm pr nakuchanch ze starch P4 desek, pp. se d bn koupit na eBay, AliExpressu, atd. Tento SuperIO ip umouje po zapnut nastavit alternativn I/O adresu 4Eh pro konfiguran registr pomoc pull-up odporu na pinu HEFRAS (51), aby se nepomltil s onboard SuperIO, kter sdl na I/O adrese 2Eh. Schma vychz z demoboardu v datasheetu, kter jsem si trochu zjednoduil.

LPC W83627HF schematic 1.0

      Problm je, e na TPM nen vyvedeno napjen 5 V, kter si tam vak mu snadno dodrtovat na nezapojen pin teba z USB headeru nebo dovst pmo PC zdroje. Hor je, e tam chyb signl LDRQ# (LPC DMA request), kter bn vyuv FDC v DMA reimu. V registru SuperIO CR74, bit 2:0 lze zpisem hodnoty 4 - 7 nastavit reim bez DMA (PIO), ale je otzka, jak se s tm popere BIOS i OS. Linux by to teoreticky ml umt pomoc kernel boot parametru floppy=nodma. Kdy bude nejh, mu signl LDRQ# sebrat onboard SuperIO (ten by ho mohl vyut jedin pro LPT port v reimu ECP, co nepotebuju, sta mi EPP) nebo najt druh nevyuvan LDRQ# signl na PCH a pidrtovat ho na dal nezapojen pin TPM headeru.
      POZOR: na novjch chipsetech intel ady 1xx byl signl LDRQ# odstrann (posledn chipsety, kter ho jet maj, jsou ady H/Z97 a X99) a u chipset ady 5xx pro CPU Rocket Lake (zatek roku 2021) sbrnice LPC zmiz pln a bude nahrazena mn-pinovou sbrnic eSPI (Enhanced Serial Peripheral Interface) a bude po legraci...
      Jestli se mi to vbec poda nainicializovat a rozchodit je zatm velk otzka, proto jsem se s PCB designem pli nesral, jde o prvn ovovac prototyp. Desku jsem v sobotu zaroutoval a poslal do vroby nskmu JLCPCB, kter nabz vrobu 5 dvouvrstvch prokovench desek 10 x 10 cm za asnou cenu 2 $, s dopravou oby airmailem (15 - 30 dn) to vylo na 218 K (platil jsem pes PayPal). Tak snad se toho dokm do Vnoc...

LPC W83627HF PCB 1.0 LPC W83627HF PCB 1.0 GERBER preview

      2.1.2018 Tak mi konen dorazily ty ploky z JLCPCB, celkem 6 kus. Kvalita je na prvn pohled stejn jako teba u PragoBoardu, nenarazil jsem na dn problm. Zsilka dorazila do R u ped Vnoci, ale zasekla se na celn pot na Plzesk. Soustky jsem ml u nachystan a tak jsem se hned pustil do osazovn. lo to docela rychle, za veer bylo hotovo. Z konfiguranch odpor jsem osadil R24 (zazen v SuperIO nebudou mt po zapnut inicializovan legacy I/O adresy) a R25 (vbr konfiguran I/O adresy SuperIO 4Eh), aby nedolo ke kolizi s onboard SuperIO IT8728F.

manufactured LPC W83627HF PCBs assembled LPC W83627HF PCB

      20.1.2018 Teprve dnes jsem se dostal k pipojen osazen destiky do PC a neobelo se to bez problm. Nejprve jsem musel olmat plastovou ohrdku TPM headeru na zkladn desce, protoe se do nj neveel konektor plochho kabelu, co se dlalo dost blb, nebo bylo okolo mlo msta a nechtlo se mi kvli tomu vymontovvat cel MB z bedny. Napjen 5 V jsem vyvedl z nepouvanho USB headeru. Dle jsem s osciloskopem hodinu bdal nad tm, pro obvod nekomunikuje a nefunguje mu sprvn krystalov osciltor, jeho vstup byl podivn zatlumen, a jsem piel na to, e v zpalu nadenho osazovn jsem na destiku pipjel jin SuperIO ip W83697HF msto W83627HF, kter ml vstup OSCIN na jin noze :) Take jsem si jet zablbnul s foukakou a mikropjkou, osadil sprvn SuperIO ip a konen se dostavil pozitivn vsledek. Pod Linuxem jsem pomoc utility isadump (u je i DOSov verze) peetl konfiguran registry obou SuperIO:


$ isadump -y -k 0x87,0x01,0x55,0x55 0x2e 0x2f
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00: 00 00 00 00 00 00 00 07 00 00 00 00 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 87 28 01 00 00 00 f7 10 00 00 00 48 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b0: 00 00 00 00 00 00 00 00 20 00 00 00 00 00 00 00
c0: 01 04 00 40 00 00 00 00 01 04 00 00 00 00 00 00
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 01 01 01 00 00 00 7e
f0: 10 40 00 00 00 00 1c 00 00 00 00 00 80 00 00 00

$ isadump -y -k 0x87,0x87 0x4e 0x4f
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00: ff ff ff ff ff ff ff 00 ff ff ff ff ff ff ff ff
10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
20: 52 17 ff fe 81 00 40 ff 00 00 7c c0 ff 30 00 ff
30: 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
60: 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff
70: 00 ff ff ff 04 ff ff ff ff ff ff ff ff ff ff ff
80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
a0: ff ff ff ff ff ff ff ff ff ff 00 00 00 00 00 00
b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
f0: 0e 00 ff ff 00 00 ff ff ff ff ff ff ff ff ff ff

      Aby bylo mon registry SuperIO st / zapisovat, je nejprve nutn ho pepnout do rozenho funknho reimu zpisem kle - pro SuperIO Winbond to jsou 2 po sob jdouc Byte 87h na port 4Eh. Aby pak nemohlo dojt k nhodnmu pepisu registr, opust se rozen reim zpisem 1 Byte AAh na port 4Eh. Ve Windows jsem si se SuperIO popovdal pomoc programu Read & Write Everything, kter podporuje i pepnn bank registr zazen a rozblikal jsem si LEDky (nastaven bitu 7 v registru F5h) logickho bloku 8 - GPIO2 se rozblik PLED na GP23 frekvenc 1 Hz).

      19.3.2024 Po del pauze jsem zas trochu pohnul s konfiguran utilitou pro DOS a pidal kd pro konfiguraci a zapnut SuperIO bloku adie disket. Jeliko na MB ve svm hlavnm PC zatm nemm vyveden LDRQ# signl, testoval jsem v pod Linuxem, kter implementuje i PIO reim (bez DMA). Aby Linux disketovku nael, musel jsem mu pedat kernel boot parametr "floppy=0,4,cmos nodma messages". Pot jsem v dmesg nael dek "Floppy drive(s): fd0 is 1.44M" a tak blokov zazen /dev/fd0. Zkusil jsem tedy mount, naped bez diskety. Mechanika krtce blikla a hrbla a dostal jsem podle oekvn chybu:


[   71.265686] blk_update_request: I/O error, dev fd0, sector 0
[   71.268236] floppy: error -5 while reading block 0
[   71.295694] blk_update_request: I/O error, dev fd0, sector 0
[   71.298239] floppy: error -5 while reading block 0

Pak jsem to zkusil znovu s vloenou naformtovanou disketou, ale to nedopadlo dobe. Pouze se roztoil motor, svtila LED a mount vytuhnul. Ml jsem podezen, e nechod peruen, ale pohled do /proc/interrupts potvrdil, e peruen chod. Kadou vteinu se poet navil asi o 5, take tam problm nebude. Pro jistotu jsem vyzkouel jet dal dv 3,5" mechaniky, kter jsem otestoval v jinm PC a chovalo se to stejn, tak tedy netum, kde by mohl bt problm...


           CPU0       CPU1       CPU2       CPU3
  6:          3          0          0          0   IO-APIC   6-edge      floppy
  6:          6          0          0          0   IO-APIC   6-edge      floppy

      1.4.2024 Tak jsem zjistil, e jsem j kokot patn pedval parametry Linux kernelu skrze linld.com, sprvn to mlo bt "floppy=0,4,cmos floppy=nodma floppy=messages". Jeliko je navc dlka pkazov dky v MS-DOSu pomrn omezen, je lep vce parametr zapsat do textovho souboru (kad parametr na samostatn dek) a linld.com pak zavolat s parametrem cl=@jmenosouboru.txt, u m tedy nap. takto:
linld.com image=vmlinuz.433 initrd=initrd.433 cl=@kcmdline.txt vga=773
Po nabootovn je mon si pedan kernel boot parametry zkontrolovat vypsnm souboru /proc/cmdline. Nyn u Linux pochopil, e nechci pouvat DMA a pi mountu disketov jednotka oila. Vyzkouel jsem 1 krabiku disket a zhruba polovina z nich u pi mountu sypala v dmesg hromadu error, nkdy se ani nepodailo vypsat seznam soubor. U jinch disket prolo ten i zpis bez jedin chyby. Asi u po tch destkch let nejsou pln v kondici nebo byly formtovan na jednotce s jinak sezenma hlavama. Nicmn to lze povaovat za velk spch, konen mm po 9 letech v primrnm PC zase funkn nativn disketovku (nepotm USB nhraku, kterou jsem musel prkrt nouzov pout).
      Dle bych chtl disketovku rozchodit i v DOSu. K tomu asi bude poteba napsat vlastn TSR, kter se hookne na peruen INT 13h a dopln chybjc obsluhu FDD. Zatm se mi podailo najt jedinou DOSovou testovac utilitu (dky Laacovi), kter um pracovat i v non-DMA reimu, ale ten funguje dost nespolehliv, nepodailo se mi ani jednou pest sprvn cel sektor. Vtinou pete kolem 450 - 510 Byte a pokad jinak zmren, jindy pestane st pln s chybou: "NDMA read failed -2 (d0h)". Tak alespo zdrojky poslou pro studijn ely.

DOS test.exe - NDMA read failed -2 (d0h) DOS test.exe - read sector 461B



Zpt

Aktualizovno 3.4.2024 v 5:20