Čtení disket mikroprocesorem I.  
               Tento článek vysvětluje princip magnetického záznamu 3.5 palcových mikrodisket, které jsou standardním vybavením každého osobního počítače PC a v současnosti jsou velice rozšířené. Z tohoto důvodu je perspektivní použití disketových jednotek pro zajištění snadné přenositelnosti dat a programů mezi osobními počítači a ostatními elektronickými přístroji s mikroprocesorovým řízením. Článek si klade za úkol osvětlit problematiku disketových jednotek natolik, aby po jeho přečtení pozorný čtenář dovedl využít těchto poznatků v praxi.
               Princip magnetického záznamu
               Na disketě jsou data zaznamenána do stop (track) v podobě soustředných kružnic těsně se sebou sousedících. Každá z těchto stop má svou identifikaci a jednotlivé stopy jsou uloženy od kraje magnetického kotoučku, kde leží stopa 0 (Track0) směrem do středu ke stopě nejvyšší. Disketa jednoduché hustoty (LD - Low Density) má 48 stop, disketa vysoké hustoty (HD - High Density) má 96 stop. Podle počtu magnetických povrchů rozeznáváme disketu s jedním povrchem (SS - Single Side) a dvěma povrchy (DS - Double Side). Čtení SS u oboustranných mechanik (v současnosti většina) probíhá z horní magnetické hlavy, která snímá horní stranu diskety. Disketa DS umožňuje ukládat dvojnásobné množství dat oproti disketě SS. Při provozu mechaniky je magnetický kotouček diskety unášen konstantní rychlostí a informace jsou do něho zaznamenávány z elektromagnetických cívek, které jsou součástí magnetických hlav. Magnetický obvod hlav je v jednom místě přerušen magnetickou šterbinou, kterou obklopuje rozptylové magnetické pole dané směrem proudu procházejícího cívkou hlavy (orientaci magnetického pole v závislosti na směru a velikosti elektrického proudu cívkou popisuje Ampérův zákon). Rozptylové magnetické pole zasahuje do magnetického povrchu pod štěrbinou a magnetuje jej. V důsledku unášivého pohybu je příslušně zmagnetována celá stopa. Pokud bychom snímali takto zmagnetovanou stopu, nedostali bychom jediný elektrický signál, neboť napětí na snímací cívce je úměrné časové změně magnetického pole viz Maxwellovy rovnice. Změní-li se směr proudu v záznamové cívce, změní se tím i směr magnetického toku a magnetické médium je magnetováno v opačném směru. Místo, kde dochází k této změně, nazýváme magnetickou reverzací a zde dojde při snímání k indukci napětí do snímací induktivní hlavy. Množství informace zaznamenané v magnetické vrstvě je přímo úměrné množství magnetických reverzací, resp. hustotě reverzací na jednotku plochy magnetického média.
               Způsob záznamu dat na disketu
               Vlastní kódování dat je založeno na vzájemné vzdálenosti po sobě jdoucích reverzací, přičemž je nutné zajistit jejich přesné odstupy. Protože je však rychlost přenosu dat závislá na otáčkách diskety, které nejsou vždy stejné, je kódování založeno na poměru vzdáleností, t.j. poměru dvou (FM) nebo tří (MFM) frekvencí. Každá magnetická reverzace představuje malý magnetický pól, který více méně ovlivňuje okolní reverzace a je jimi rovněž ovlivňován. Následkem této interakce dochází k odpuzování sousedních reverzací a vzájemnému ovlivňování sousedních stop. Nevýhodou vyšší hustoty je vyšší vzájemné ovlivňování sousedních reverzací a tím více roste chybovost čtených dat. Stanovení kódové vzdálenosti bylo při definování této normy kompromisem mezi maximální možnou hustotou reverzací a minimální poruchovostí dat. Zvláštní úpravou záznamových hlav s t.zv tunelováním - omazáváním, speciálních obvodů upravujících záznam a jakostních snímacích zesilovačů a především použitím vhodného kódování ( v současnosti je nejrozšířenější Modifikovaná frekvenční modulace, Modified Frequency Modulation - MFM ) je dosaženo minimální chybovosti při maximálním objemu uložených dat na jednotku plochy.
               Modifikovaná frekvenční modulace
                Vychází z dříve používané frekvenční modulace (Frequency Modulation - FM) u které byla logická jednička zaznamenána dvojí reverzací a logická nula jen reverzací jedinou. Tento způsob záznamu označujeme jako záznam s dvojí frekvencí. Vhodným vypuštěním některých reverzací v zaznamenávaném proudu dat snížíme hustotu reverzací na jednotku plochy a tím můžeme zápis urychlit natolik, aby výsledná hustota reverzací odpovídala hustotě záznamu FM (hustota reverzací
Popis kódování mfm. Časové údaje odpovídají LD (SD) disketám.
nikdy nesmí překročit jistou maximální hranici, která je dána kvalitou magnetického média). Technika MFM označována jako záznam trojí frekvence uspoří oproti FM polovinu reverzací a záznam mfm zdvojnásobuje paměťovou kapacitu média, aniž by bylo zapotřebí upravit či zkvalitnit jeho magnetické vlastnosti. Nároky kladené na čtecí a zapisovací zesilovač rovněž nejsou vyšší. Jedinou změnou při použití mfm kódování je jen složitější elektronika řadiče provádějící mfm-kódování. Změny jsou následující: logická nula postrádá vlastní reverzaci, mezi všemi log. nulami je z důvodu nutné synchronizace vložena jedna reverzace. Logická jednička má jednu vlastní reverzaci jak je zřejmé z obr.1. Vzdálenost reverzací neboli šířky impulsů jsou definovány na základě normalizace takto: u disket LD perioda 2us odpovídá logické hodnotě jdoucí po stejné logické hodnotě (log.1 po 1 nebo log.0 po 0). 3us pokud následují dvě log.0 po log.1 nebo následuje log.1 po dvou logických nulách. Perioda 4us jen pokud následuje log.1 po log.0 před kterou byla log.1 jak je zřejmé z obr.1. U disket HD jsou příslušné periody poloviční.
Obr.1 MFM kódování LD disket
               Formáty uložených dat
               Jak bylo uvedeno v předchozí kapitole, je magnetický záznam na mikrodisketě uložen ve formě magnetických reverzacích vůči sobě navzájem posunutých. Jak se však v záznamu orientovat a kde hledat na stopě začátek zaznamenaných dat, když je stopa ve tvaru uzavřené kuželosečky ? Pro tyto účely je rozhraní disketových mechanik vybaveno signálem Indx, jehož aktivní úrovní je log.0 stejně jako všech signálů zmíněného rozhraní, viz dále. Jakmile signál Indx přejde do log.0 (trvání asi 2 až 5ms) přechází právě magnetická hlava nad indexovou mezerou a po přechodu Indx do log.1 následují na čtecí lince Rd po datové mezeře již čtená data - mfm pulsy. Indexová mezera zabírá podle typu formátu disket 5 až 10% záznamu stopy.
               Po indexové mezeře následuje indexová značka prvního uloženého sektoru a jeho data. Každé datové pole obsahuje dva byty kontrolního součtu (Cyclic Redundancy Check - CRC , viz dále). Na obr.2 je patrné rozdělení dat na stopě. Značky identifikace a značky dat jsou vždy dvoubajtové, kde první byte obsahuje synchronizační puls a na tento puls se musí zasynchronizovat mikroprocesor, když má data korektně přečíst. Pro vysvětlení principu synchronizačních pulsů se ještě vraťme zpět k principu kódování mfm. Mezi dvěmi nulami se vždy musí vyskytovat hodinová reverzace (viz obr.1). Pokud se nevyskytuje, jedná se o chybu, která vznikla buď opotřebením magnetického média, špatným čtením, nechtěným přemagnetováním reverzace nebo uměle vytvořenou ztrátou hodinové reverzace. Jakmile programem zachytíme tuto událost, musíme na základě sekvence následujích mfm pulsů zjistit o kterou příčinu se jedná. Načteme-li procesorem šířku pulsu 5us u diskety LD (2.5us pro disketu HD) víme, že došlo ke ztrátě hodinové reverzace. Zjistíme-li, že ke ztrátě došlo vypuštěním reverzace mezi třetím a čtvrtým bitem bytu A1 (hexadecimálně) jedná se o synchronizační puls buď ve značce identifikace (druhý byte je FE) nebo jde o značku dat (druhý byte je FB) či jde o značku neplatných dat (F8). Pokud je reverzace vypuštěna mezi čtvrtým a pátým bitem v bytu C2, za kterým následuje FC, jde o indexovou značku, která identifikuje začátek dat vyplňujících indexovou mezeru.
Rozdělení stopy s popisem jednotlivých sekcí.
               Každou synchronizační značku předchází synchronizační pole složené pouze z hodinových reverzací (datová výplň nul). Syncpole je nezbytné pro správné fázové zasynchronizování diskového řadiče, mikroprocesorem jej ovšem zjišťovat nemusíme, neboť postačí, pokud začneme provádět mfm dekódování okamžikem přečtení 5us pulsu, po němž následuje 2us a 3us puls a pulsy další, odpovídající druhému bytu synchronizační značky. Podle druhého bytu poznáme, zda se jedná o značku identifikace nebo značku dat nebo značku neplatných dat (viz příloha zdrojového programu a jeho popis dále). Za každou značkou následuje datové pole zakončené dvěma byty CRC.
               Postup kontroly CRC je následující: Z načtených dat vypočteme CRC a pokud je totožná s CRC uloženou v záznamu, jsou data platná a synchronizační značka je uznána. V opačném případě je synchronizační značka vyhodnocena jako porucha a program hledá značku novou. Pokud nejsou nalezena na stopě žádná data, může se jednat buď o jiný formát (hustotu) dat či o nesformátovanou disketu nebo jen o vadnou stopu (popis uveden dále).
               Každému platnému synchronizačnímu pulsu musí předcházet syncpole obsahující pouze hodinové reverzace (řadič se musí správně zasynchronizovat na hodinovou frekvenci). Toho se docílí tím, že je datová výplň syncpole složena pouze z nulových bytů ( 00000000 odpovídá osm hodinových reverzací s odstupem po 2us pro formát LD, resp 1us pro HD). Po syncpoli následuje ID značka (byte A1 postrádá hodinové pulsy). ID značka je po sobě vložena celkem třikrát (A1 A1 A1), následuje druhý byte ID značky (FE), byte čísla stopy T-track (0,1,2 ...), byte povrchu/hlavy H-head (0 nebo 1), byte sektoru S-sector (počínaje 1.sektorem, může zde být prokládání, převážně je však pořadí neprokládané zejména u HD disket) a byte délky sektoru L-long (možnosti jsou 00...128bytů, 01...256bytů, 10...512bytů, 11...1024bytů). Nejčastější délka sektoru disket
Algoritmus výpočtu CRC implementovaný obvodově.
formátovaných na PC je 512bytů, t.j. L=02. Dále následuje dvoubajtové CRC počítané z bytů T,H,S a L (algoritmus výpočtu je založen na průběžném dělení vstupního řetězce generujícím mnohočlenem). Kontrola CRC se uskutečňuje porovnáním obsahu registru (zbytku po cyklické kontrole) a ve standardních řadičích je CRC řešena obvodově (viz obr.3). Při zpracování dat mikroprocesorem je CRC implementována programově (výpočet CRC na řádku 809 v přiloženém programu). Po CRC následuje mezera z dvacetidvou bytů 4E.
Obr.3 Princip cyklické kontroly přenosu dat
               Po identifikaci sektoru následuje mezera (mezera po ID poli), na kterou navazuje syncpole (12 x 00) a značka dat (3 x A1 + FB), za kterou následují data sektoru, jejichž počet musí souhlasit s bytem L v předchozí
identifikaci sektoru. Po datovém poli sektoru následují dva byty CRC vypočítané z datového pole (t.j. pro L=02 z 512 bytů dat). Po CRC následuje mezera délky až 128 bytů FF. Identifikace sektoru je zaznamenána pouze při formátování diskety a dále se vždy jen čte při čtení příslušné stopy. Na základě námi hledané identifikace (souhlasí přečtené byty T,H,S a L s hledanými) jsou buď následující data sektoru čtena, nebo při zápisu přepsána novými. Pokud zapisujeme (vždy vlastně přepisujeme, neboť prázdné sektory jsou vytvořeny formátováním) do vybrané stopy aktualizovaná data sektoru, vždy musíme zapsat všechna data sektoru včetně syncpole, všech dat sektoru a mezery po datovém poli. Uvedené bloky dat sektoru jsou totiž z hlediska magnetického záznamu nedělitelné a nelze zde změnit jedinu reverzaci, neboť bychom tak přetrhli kontinuitu s daty následujícími. Za posledním uloženým sektorem je mezera stopy jejiž délka je proměnná (velikost až 16x256 bytů) a končí příchodem indexového pulsu. 3.5" disketa s dvojnásobnou hustotou záznamu (DD nebo též HD) má nejčastější formát s 18 sektory/stopu, disketa SD (LD) jen s 9 sektory/stopu.
 
 
Program s implementovaným algoritmem čtení dat z disket
Zapojení mikropočítače s ADSP2105