Čtení disket mikroprocesorem II.
 
               Floppydiskové mechaniky
               Každé zvětšení kapacity diskety se vždy projevilo ve změněné konstrukci mechaniky, která vždy musí zajistit dobrý přenos dat mezi disketou a řadičem. Pro dobré pochopení principu kódování a magnetického záznamu je na místě se alespoň ve stručnosti zmínit o provedení jednotlivých částí mechanik pružných disků.
               Z hlediska konstrukce lze FDD rozdělit do těchto bloků:
  • provedení magnetických hlav
  • náhon a upnutí diskety
  • mechanismus pro vystavení a přiklopení hlavy
  • doplňkové mechanismy a interfejz jednotek
               Mechanické provedení FDD
                Magnetický záznam se provádí indukčními hlavami a současné mikrotechnologie dovolují hustotu záznamu až 600 reverzací/mm a příčné hustoty až 60 stop/mm (rozteč mezi stopami 16.6um a vzdálenost reverzací 1.66um). Hlavy se konstruují s pólovými sendustovými (80%Fe + 8%Ni + 8-9%Al) nástavci. Vrstva magneticky měkkého sendustu asi 10um. Nevýhodou feritových hlav je jejich vysoká mechanická křehkost a jejich pracovní kmitočet je dán tloušťkou sendustové vrstvy. Pro vf signály je tloušťka této vrstvy na hranici technologických možností. Z tohoto důvodu se tato provedení opouští a moderní magnetické hlavy jsou vyráběny chemickým či iontovým leptáním s použitím masek zhotovených opticky. Tímto způsobem jsou vytvořeny všechny potřebné součásti magnetických hlav. Moderní snímací hlavy využívají magnetorezistivitu (využití závislosti elektrického odporu na vnějším magnetickém poli), díky které mají o řád vyšší citlivost než induktivní čtecí hlavy. Nevýhodou je nelineární závislost změny odporu na magnetickém poli. Vhodnou předmagnetizací ( nanesením tenkovrstvé magnetické hmoty souběžně s magnetorezistivní vrstvičkou ) posuneme pracovní bod magnetorezistivních hlav do lineární oblasti.
               Zatímco se u starších typů 8" FDD používalo řemínkového náhonu s unášecím vřetenem a reluktančního asynchronního motorku u mechanik 5.25" je použito komutátorkových motorků s elektronickou regulací otáček. Indexové pulsy vytvářel optoelektrický snímač při průchodu disketového indexového otvoru mezi infračervenou diodou a fototranzistorem (na 5.25" disketě je poblíž středu malý otvor průměru asi 3mm). U disketových mechanik 3.5" je náhon řešen komutátorovým plochým motorkem se statorem v podobě meandru na desce plošných spojů. Rychlost otáčení upínacího trnu u SD disket činí 360 ot/min a při použití HD disket jsou otáčky přepnuty na 300 ot/min. Upnutí je zde excentricky umístěným obdélníkovým trnem se čtvercovou západkou. Tímto upínacím systémem zjednodušíme částečně elektroniku 3.5" FDD oproti jejím předchůdcům, neboť ke snímání indexu stopy, t.j. jejího začátku (viz předchozí dokument, obr.2) není zapotřebí optický snímač. Indexový puls je vytvářen magnetickým Hallovým snímačem a odpovídá průchodu trnu v určité poloze.
               Vystavovacím mechanismem nastavujeme magnetickou hlavu nad příslušnou stopu magnetického záznamu. Ve všech jednotkách je vystavování řešeno krokovým motorkem jehož otáčivý pohyb je buď pomocí vřetena (starší provedení) nebo spirálového kola či napínacím Y-páskem (nové typy) převeden na pohyb přímočarý. Uvedeným převodem zajistíme plynulý přímočarý pohyb magnetických hlav nad magnetickým médiem. U dvouhlavých mechanik jsou hlavy uloženy pod sebou a navzájem vůči sobě vyoseny, aby jedna nečinila druhé magnetický závit. Přítlačný mechanismus je uveden v činnost vložením diskety do jednotky, kdy obě magnetické hlavy stisknou magnetický kotouček jako kleště a jsou tak stále v kontaktu s magnetickým povrchem diskety.
               Krokový motorek otáčející vřetenem vystavovacího mechanismu má úhel kroku od 1.8 stupňů/krok do 7.5 stupňů/krok a mechanický převod je takový, aby každý krok přesouval hlavu o jednu stopu. Jedná se o systém bez zpětné vazby od polohy. Zpětná vazba je zajištěna jiným způsobem. Pokud je hlava nad stopou 0 (track0) je na Tr00 rozhraní log.0. Pro snímání této polohy je mechanika vybavena optoelektrickým snímačem (viz obr.4). Další zpětná vazba je v datech stopy v identifikaci sektoru, viz byty T,H,S a L (platí jen u zformátovaných disket).
Blokové zapojení jednotky pružných disků
Obr.4 Blokové zapojení jednotky pružných disků
               Elektrické signály rozhraní disketových mechanik
                Disketová mechanika je s řadičem propojena 34-žilovým plochým datovým kabelem, který se zapojuje na obou stranách do dvouřadých samořezných konektorů. Logické úrovně všech signálů rozhraní jsou kompatibilní s TTL a aktivní v log.0. Výstupní budiče jsou s otevřeným kolektorovým výstupem (ochrana budičů při opačném zapojení kabelu na jedné straně) a při sepnutí musí poskytnout proud až 40mA. Výstupy z mechaniky jsou spojeny s Pull-Up odpory 150 až 300 ohmů (terminály) na straně řadiče. Výstupní budiče řadiče jsou na straně mechaniky rovněž takto zapojeny. Tímto zapojením eliminujeme citlivost k indukovaným napětím, která by mohla ovlivňovat logické úrovně na rozhraní. Čím menší je impedance terminálů, tím méně se v logických úrovních uplatní elektromagnetické rušení, tím více však budou proudové budiče zatěžovány. S každým datovým vodičem rozhraní je v páru jeden vodič uzemění a na konektoru je tak jedna strana dvojřadého konektoru ryze signálová a strana druhá zemnící (viz obr.5).
               Signály řídící činnost disketové mechaniky
               Obvod vystavení hlavy (řízení krokového motoru) má dva řídící signály /ST (Step - krok) a /SD (Step Direcion - směr krokování). Na /ST se přivádí krokovací pulsy (co puls to sousední stopa), /SD určuje směr krokování (/SD=0 motor krokuje ke středu diskety) a funkce vystavení je nezávislá na přítomnosti diskety. Obvod je realizován obousměrným čítačem a pro zajištění správné činnosti je zapotřebí dodržet několik následujících zásad. Je nezbytné dodržet rychlost krokování, která je dána rozestupy mezi po sobě jdoucími pulsy /ST. Nutná prodleva je 3 až 5ms. Nejrychlejší bývají mechaniky s Y-páskem (MF 6400, M54/58D/S - 3 až 4ms), pomalejší se vřetenem a nejpomalejší se spirálovým kolem (BASF 6106/6108 až 12ms). Dalším důležitým parametrem je doba po kroku, potřebná k uklidnění rozkmitané hlavy (alespoň 20ms). Pro maximální snížení spotřeby v klidovém stavu (přestanou-li přicházet pulsy /ST) je napájení krokového motorku automaticky sníženo a motorek je napájen pouze přídržným proudem. Výběr mechaniky provedeme signálem /SEL=0 (Select - výběr) a současně /MO=0 (Motor On - zapnutí motoru). Bez aktivace těchto signálů mechanika na ostatní řídící signály nereaguje a všechny stavové signály mechaniky jsou v logické 1 (budiče odpojeny). Některé mechaniky po krátké době od své aktivace (/MO=0 a /SEL=0) vypínají náhonový motor a přecházejí do klidového stavu, pokud v nich není vložena disketa. Na datovém konektoru jsou k dispozici celkem čtyři signály výběru /SEL1/SEL4, na straně mechaniky je však akceptován jen signál
Datové rozhraní disketových mechanik.
odpovídající nastavení propojek (jumperů) na mechanice. Pokud potřebujeme jedním kabelem současně řídít více mechanik musíme příslušně upravit datový kabel (překřížením 7 žil v kabelu - od 10. do 16 žíly). Mechaniku po zavedení této úpravy vybíráme /SEL1, který tímto překřížením vstupuje na mechanice do /MO a příslušný /MO řídí /SEL1. Bez této úpravy je možné vybírat mechaniku signálem /SEL2 na straně řadiče. Signálem /SS (Side Select - výběr hlavy) vybíráme, ze které hlavy chceme číst. Je-li /SS=1 čteme stranu 0. Mechaniky s jednou stranou tento signál nepoužívají, u oboustranných mechanik /SS řídí většinou diodový přepínač (MOM54/58D, BASF6108 a pod.). Aktivací /WE ( Write Enable - povolení zápisu) můžeme do vybrané stopy zapisovat data signálem /WD (Write Data - zapisovaná data). Podmínkou je /WP=1, viz stavové signály mechaniky. Spuštěním zápisu se rovněž aktivuje tunelové omazávání. Protože je mezi záznamovou a omazávací štěrbinou mechanický odstup, omazávání se zapíná/vypíná o něco později než samotný zápis (zpoždění cca 200us, omazávací proud bývá až 100mA). Aktivací signálu /TR43 snižujeme zápisový proud o 25 až 30% (prekompenzace záznamového proudu od 43 stopy neboť u středu kotoučku je vyšší hustota reverzací a tím je potřeba nižší koercitivní sílu). Novější typy mechanik (MF 6400 a pod.) mají senzor polohy TR43 (viz obr.4) a prekompenzaci záznamového proudu si generují samy. Záznamový proud je nutné zvýšit u disket HD, u kterých je vyšší koercitivní intenzita Hc magnetického materiálu (záznamový proud je přibližně 7.5mA, rozkmit napětí na magnetické hlavě bývá při zápisu až 20V). Vysokokapacitní diskety HD mají zvláštní otvor pro fotoelektrický senzor HD a při jejich provozu jsou otáčky přepnuty na 300 ot./min, neboť hustota reverzací je vyšší než u disket SD. Záznamový proud lze nastavit téměř vždy diskrétním odporem na desce FDD i při použití zákaznických záznamových obvodů a změnou jeho hodnoty můžeme měnit záznamový proud v širokých mezích. Starší typy mechanik, u kterých se disketa točí stále, používají signál /HL (Head Load - přítlak hlavy) a je-li /HL=0 je hlava přtlačena k magnetické ploše. Důležitým parametrem mechaniky s elektromagnetem pro přítlak média je doba od signálu /HL=0 do uklidnění přítlaku a bývá v rozmezí od 15 do 50ms. U nových mechanik je tento signál nevyužit a disketa je k hlavám přitlačena v okamžiku zavření dvířek.
               Stavové signály rozhraní
                Impulsy /IX (šířka 2 až 5ms) disketová mechanika informuje řadič o průchodu hlavy nad indexovou mezerou. Signál je u 5.25" mechanik odvozován optoelektronicky průchodem indexového otvoru v místě fotosenzoru. Tento signál potřebuje řadič zvláště při formátování diskety a mechanika od něho odvozuje signál /RDY (READY - mechanika připravena ke čtení/zápisu), který poskytuje řadiči informaci o nominálních otáčkách diskety. Pro čtení stopy mikroprocesorem tento signál není potřebný. Signál /DCH (Disk Change - výměna diskety) informuje řadič o výměně diskety během doby odstavení (/SEL=1). Mají jej jen některé typy mechanik a například řadič v PC tento signál netestuje. Signál /TR00 informuje o vystavení hlavy nad nultou stopou a u některých typů mechanik je generován mikrospínačem (MF 3200, C 7113) u jiných fotosenzorem. Přesné dostavení polohy je dále zpřesněno mikropozicírováním hradlováním fáze krokového motorku. Z nulté stopy je krokování umožněno jen jedním směrem, do středu kotouče (mechanicky zajištěno). Stavovým signálem /WP=0 informuje jednotka řadič o vložené disketě chráněné proti zápisu a snímání je realizováno fotoelektrickým průchozím senzorem skrz mechanické okénka diskety (prochází-li paprsek skrz okénko je /WP=0). Čtená data jsou v podobě mfm pulsů na /RD, kde náběžnou hranou /RD puls začíná a týlovou hranou končí. V logické nule je /RD mezi pulsy po konstantní dobu asi 200ns a typ od typu je tato doba u různých mechanik jiná. U všech typů, které jsem měřil byla minimálně 160ns a je obvodově odvozována z mko. Tato doba určuje instrukční cyklus a výkon procesoru, který lze ještě pro čtení FDD použít, neboť programem je nutné tuto dobu bezpečně zachytit, abychom rozeznali začátek nového pulsu.
               Popis programového vybavení
                V příloze uvedený demonstrační program načítá po resetu z kořenového adresáře (rootu) diskety soubor s názvem FORCE.ACX ve kterém jsou uloženy instalační data a programy. Po tomto tak zvaném nabootování jsou načtená data uložena do paměti FLASH na desce mikropočítače (schema desky je v druhé příloze). Po dokončení bootování a uložení souboru do FLASH program přejde do nekonečné smyčky (vyjmeme disketu a stiskneme reset, tím je nový program načten z Flash a spuštěn). K uvedené problematice čtení dat z FDD se vztahují následující rutiny v programu: načtení pulsů z /RD na řádcích 463 až 576. Zde program zjišťuje šířky jednotlivých pulsů a rozděluje je do čtyř kategorií, na pulsy 2us, 3us, 4us a 5us v případě záznamu hustoty SD (1us, 1.5us, 2us a více v případě DD). Pokud nejsou načtena data v hustotě SD, provádí zjišťování v hustotě DD a ještě dvou mezních. Celkem rozlišuje čtyři různé hustoty záznamu (lze rozšířit na libovolné množství, ovšem čtyři hustoty dobře postačí - i tak má lepší výsledky než standardní řadič). Po úplném načtení celé stopy je v paměti každý načtený puls definován dvěma bity (čtyři různé stavy). Následuje hledání synchronizačních znaků (kódová slova 11) a převod následujích dvoubitových hodnot do kódových slov formátu mfm (řádky 577 až 757). Z kódových slov jsou následně sestavena příslušná data, je provedena kontrola CRC (podprogram na řádku 809) a v případě úspěšného přečtení dat jsou tímto způsobem přečteny všechny potřebné sektory, kde se nachází soubor FORCE.ACX. Program předpokládá uložení dat na disketě ve standardním formát IBM, kdy je paměťové médium rozděleno počínaje stopou 0 do zavaděče, tabulek obsazení disku FAT (File Allocation Table), kořenového adresáře a oblasti uložených dat, kam spadají všechny soubory a adresáře diskety.
               Postup načítání souboru FORCE.ACX z diskety
                Řídícími signály rozhraní FDD /MO,/SEL,/SD,/ST,/SS nastavíme stopu 0 (TR00=0) a přečteme výše uvedenou metodou první stopu, na které vyhledáme první sektor, ve kterém je uložena hlavička obsahující BPB (Bios Parameter Block). V této tabulce jsou uloženy všechny důležité parametry popisující rozdělení diskety v BIOSovském formátu. Tabulku načteme do paměti procesoru (viz proměnné v úvodu listingu). Zjistíme velikost sektoru v bytech (v BPB je na adrese 0Bhexa uložena nižší část a na adrese 0Chexa část vyšší, dále jen slovo na ofsetu 0Bh) nejčastěji 0200H, t.j. 512 bytů na sektor. Zjistíme počet sektorů na alokační blok (cluster), neboť FAT je sestavena z alokačních bloků (počet sektorů na cluster je v BPB na ofsetu 0Dh - 1 byte) a na disketě jsou většinou 2 sektory na cluster. Přečteme slovo na ofsetu 0Eh BPB počet rezervovaných sektorů, které předchází uložení FAT (zpravidla 1 sektor pro uložení zavaděče s BPB). K této hodnotě přičteme 1 a máme číslo prvního sektoru FAT. Přečteme celou FAT (zabírá cca 5 sektorů - počet sektorů na jednu FAT je uveden v BPB) a uložíme ji do paměti pro další zpracování. Přečteme slovo na ofsetu 16h BPB počet sektorů jedné FAT a vynásobíme počtem FAT (jeden byte na ofsetu 10h BPB), který je standardně 2, to znamená jednu hlavní FAT a jednu kopii (FAT je nejdůležitější částí uloženého záznamu, při jejím znehodnocení dojde ke ztrátě všech dat kromě sektoru zavaděče, který je vždy v sektoru prvním). Předchozí součin přičteme k sektoru, kde začínala první FAT a dostaneme první sektor, kde začíná kořenový adresář (root). Přečteme slovo na ofsetu 11h BPB, kde je uloženo počet položek v rootu, nejčastěji 0070h (112 dekadicky). Tuto hodnotu uložíme do čítače, který bude použit při hledání souboru FORCE.ACX. Každá položka v rootu zabírá 32 bytů a obsahuje mimo jiné název souboru, velikost, čas a datum vytvoření souboru a číslo prvního clusteru v řetězci přidělených clusterů FFC (File First Cluster). Pokud v rootu nalezneme hledaný soubor, na jeho ofsetu 1Ah přečteme slovo FFC a z diskety načteme sektory odpovídající FFC (t.j. FFC násobíme počtem sektorů na cluster, viz byte na ofsetu 0Dh BPB) a dále načteme i sektory následující, které jsou součástí clusteru FFC. Hodnota FFC je ukazatelem do tabulky FAT, na jejíž pozici leží číslo dalšího clusteru, který patří čtenému souboru. Protože je FAT dvanáctibitová, nemůžeme z ní číst nový cluster přímo, nýbrž po menší úpravě. Hodnotu FFC uloženou v registru vynásobíme 3 a rotujeme doprava (dělení 2). Obsah registru je indexem do FAT, kde je hledané slovo, které přečteme a nazveme FNC (File Next Cluster). Číselnou hodnotu FNC ještě musíme upravit, abychom získali další cluster. Bylo-li FFC liché rotujeme FNC o čtyři místa doprava a v obou případech (sudé či liché) nulujeme nejvyšší čtyři bity FNC. Touto úpravou jsme získali skutečný cluster, ze kterého přečteme část souboru stejným způsobem jako je uvedeno výše. Stejným způsobem postupujeme a načítáme další FNC, dokud nenačteme soubor celý. Řetězec clusterů ve FAT končí, pokud je upravená (konečná) hodnota FNC v rozmezí 0FF8h až 0FFFh. Hodnota FNC=0FF7h odpovídá vadnému clusteru, 0FF0h až 0FF6h má rezervovaný cluster.
               Pokud Vás uvedená problematika zaujala a chcete se dozvědět více, nebo jste nalezli lepší řešení, popřípadě se chcete podělit o své poznatky, pište na: vyvoj@selfcontrol.cz.
Program s implementovaným algoritmem čtení dat z disket
Zapojení mikropočítače s ADSP2105