Práce s CompactFlash nebo HDD v true IDE módu

   Následující popis by měl předvést způsob kominikace jednočipu s CompactFlash kartou v true IDE módu. CF v tomto režimu by měla být plně zaměnitelná za pevný disk s IDE rozhraním, takže stejným způsobem lze ovládat HDD.

Rozmístění a funkce pinů CF karty

   Na obrázku je naznačeno rozmístění pinů na CF kartě a v tabulce jejich názvy. Rozteč pinů u CF je v 1,27x1,27mm. Konektory pro CF karty jsou celkem drahé. Koupit je lze třeba u firmy Omnitron.


Rozmístění pinů CF
Vývod Název Směr Vývod Název Směr
1 GND PWR 26 CD1 OUT
2 D3 I/O 27 D11 I/O
3 D4 I/O 28 D12 I/O
4 D5 I/O 29 D13 I/O
4 D5 I/O 29 D13 I/O
5 D6 I/O 30 D14 I/O
6 D7 I/O 31 D15 I/O
7 CS0 IN 32 CS1 IN
8 A10 IN 33 VS1 OUT
9 ATASEL IN 34 IORD IN
10 A9 IN 35 IOWR IN
11 A8 IN 36 WE IN
12 A7 IN 37 INTRQ OUT
13 VCC PWR 38 VCC PWR
14 A6 IN 39 CSEL IN
15 A5 IN 40 VS2 OUT
16 A4 IN 41 RESET IN
17 A3 IN 42 IORDY OUT
18 A2 IN 43 INPACK OUT
19 A1 IN 44 REG IN
20 A0 IN 45 DASP I/O
21 D0 I/O 46 PDIAG I/O
22 D1 I/O 47 D8 I/O
23 D2 I/O 48 D9 I/O
24 IOCS16 OUT 49 D10 I/O
25 CD1 OUT 50 GND PWR

   Významy pinů uvádím jen u těch, co jsou potřebné pro true IDE mód.

Vývod Název Směr Funkce
1, 50 GND PWR GND, zapojit raději oba
13, 38 VCC PWR +5V/+3V3, zapojit raději oba, CF by všechny měly pracovat při +5V,
některé navíc s 3V3
25, 26 CD1, CD2 OUT v CF jsou spojeny s GND a slouží jako indikace vložení karty,
piny v konektoru bývají nejkratší, aby se dotkly až jako poslední
33, 34 VS1, VS2 OUT pinem VS1 v log.0 CF udává, že je schopná pracovat na +3V3,
VS2 je využíván PCMCIA, neuplatňuje se
24 IOCS16 OUT když je zde log.0, tak CF oznamuje, že očekává 16-bitový přenos
36 WE IN v true IDE nevyužit, připojit na VCC
44 REG IN v true IDE nevyužit, připojit na VCC
9 ATA SEL IN uzemněním se zapne true IDE mód
18, 19, 20 A0 - A2 IN signály pro výběr registrů řadiče
8, 10, 11, 12
14, 15, 16, 17
A2 - A10 IN v true IDE nejsou využity, připojit na GND
7, 32 CS0, CS1 IN spolu s A0 - A2 slouží k výběru registrů řadiče
2 - 6, 21 - 23
27 - 31, 47 - 49
D0 - D15 I/O datová sběrnice
39 CSEL IN slouží k výběru MASTER/SLAVE, log.0 je MASTER nebo SINGLE, takže
pro pokud není zapojen, chová se jako SLAVE
34 IORD IN signál pro čtení dat z bufferu, v klidovém stavu musí být v log.1,
což přepne D0-D15 do vysoké impedance, v log.0 se objeví na D0-D15
data a se vzetupnou hranou se posouvá ukazatel v bufferu
35 IOWR IN signál pro zápis dat ze sběrnice do bufferu, v klidu v log.1, data jsou
ze sběrnice načteny vzestupnou hranou záporného impulzu
42 IORDY OUT log.0 indikuje nepřipravenost I/O sběrnice
41 RESET IN HW reset řadiče, aktivní v log.0
37 INTRQ OUT signál pro přerušení po dokončení některých operací
43 INPACK OUT v true IDE není využit
45 DASP I/O tento signál slouží patrně pro komunikaci MASTER a SLAVE zařízení
46 PDIAG I/O tento signál slouží patrně pro komunikaci MASTER a SLAVE zařízení

Rozmístění a funkce pinů HDD

Rozmístění pinů na HDD konektoru
Vývod Název Směr Vývod Název Směr
1 RESET IN 2 GND PWR
3 D7 I/O 4 D8 I/O
5 D6 I/O 6 D9 I/O
7 D5 I/O 8 D10 I/O
9 D4 I/O 10 D11 I/O
11 D3 I/O 12 D12 I/O
13 D2 I/O 14 D13 I/O
15 D1 I/O 16 D14 I/O
17 D0 I/O 18 D15 I/O
19 GND PWR 20 - -
21 DMARQ OUT 22 GND PWR
23 IOWR IN 24 GND PWR
25 IORD IN 26 GND PWR
27 IORDY OUT 28 CSEL I/O
29 DMACK IN 30 GND PWR
31 INTRQ OUT 32 IOCS16 OUT
33 A1 IN 34 PDIAG I/O
35 A0 IN 36 A2 IN
37 CS0 IN 38 CS1 IN
39 DASP I/O 40 GND PWR

   Funkce pinů jsou stejné jako u CF. Přibyly pouze signálu DMAx, které se uplatňují pouze při DMA přenosech, což s jednočipem nehrozí.

Registry řadiče

   Veškeré operace s CF/HDD se provádí pomocí těchto registrů. Příslušný registr se volí pomocí adresových vodičů A0-A2 a CS0 a CS1. Kromě datového registru, který má 16 bitů, jsou všechny ostatní 8-bitové a používají se jen signály D0-D7. D8-D15 jsou ignorovány. V tabulce jsou uvedeny adresy jednotlivých registrů.

Adresy registrů
A2 A1 A0 CS1 CS0 Při čtení Při zápisu
0 0 0 1 0 Data register Data register
0 0 1 1 0 Error register Features register
0 1 0 1 0 Sector count Sector count
0 1 1 1 0 Sector number Sector number
1 0 0 1 0 Cylinder low Cylinder low
1 0 1 1 0 Cylinder high Cylinder high
1 1 0 1 0 Drive/Head register Drive/Head register
1 1 1 1 0 Status registr Command registr
1 1 0 0 1 Alternate register Digital output
1 1 1 0 1 Drive adress nevyužit

   A teď trochu podrobněji k jednotlivým registrům. Nebudu popisovat úplně všechny, pouze ty nejdůležitější.

Data register

   Tento registr slouží pro zápis a čtení dat z/do interního datového bufferu. Je to jediný registr, který je 16-bitový.

Sector count register

   Tento registr slouží k zadání počtu sektorů, které se budou zapisovat zároveň (respektive číst). Po každém úspěšném zápisu je hodnota snížena o 1. Registr může obsahovat hodnoty 0-255, přičemž 0 znamená 256 sektorů najednou. První ze skupiny sektorů je zapsán na adresu danou registry Sector number, Cyl. low, Cyl. high a Drive/head registrem. Nevím sice jak se adresa mění při CHS adresování, ale v LBA módu se jednoduše inkrementuje.
   Ve skutečnosti se nezapisuje/nečte víc sektorů najednou, ale vždy se jeden nahraje do bufferu a pak zapíše a zase další do bufferu atd. Jediná výhoda je, že není třeba znovu zadávat adresu zápisu. Některé zařízení možná neprovádí fyzický zápis po každém sektoru a ukládají celý blok do cache, ale mnou testované zapisují po jednom sektoru.

Sector number register

   Tento registr udává číslo sektoru pro zápis/čtení v CHS módu nebo v LBA módu obsahuje část adresy (bity A0-A7).

Cylinder low register

   V CHS módu je to nižších 8 bitů z 16-bitového čísla cylindru (stopy). V LBA módu je to další část adresy, a to bity A8-A15.

Cylinder high register

   V CHS módu je to vyšších 8 bitů z 16-bitového čísla cylindru (stopy). V LBA módu je to další část adresy, a to bity A16-A23.

Drive/head register

   V CHS módu nižší 4 bity udávají číslo hlavy (povrchu plotny). V LBA módu jsou nižší 4 bity poslední část adresy, a to bity A24-A27. Významy vyšších 4 bitů jsou v tabulce.

Význam bitů v SDH registru
Bit Význam
7 log.0 znamená, že za data bude připojen CRC kontorlní součet,
dnešní řadiče prý mají mít tento bit trvale nastaven, protože používací ECC,
podle jiné dokumentace zese už dnes nemá význam, ale neuškodí ho nastavit
6 log.0 znamená CHS adresování, log.1 LBA adresování
5 dnes již nemá význam (původně spolu s bitem 6 udával velikost sektoru)
4 pokud jsou na sběrnici 2 zařízení, tak tento bit volí mezi MASTER/SLAVE,
log.0 znamená MASTER nebo SINGLE (jen 1 zařízení)

   Vyšší 4 bity tohoto registru musí být obnoveny před každou instrukcí, protože mimo jiné určují, pro které ze 2 zařízení na sběrnici je příkaz určen!

Status register

   Obsahuje některé stavové bity. Význam je uveden v tabulce. Je to jediný registr, ke kterému lze přistupovat během interních operací. Pokud je aktivní BUSY flag, tak neplatí žádný jiný bit !!!

Význam bitů status registru
Bit Význam
7 Busy flag - log.1 indikuje zaneprázdněnost, nesmí se přistupovat k žádným registrům
6 Drive ready - log.1 indikuje připravenost příjímat instrukci/data, pokud došlo k chybě,
zůstane nastaven až do přístího čtení tohoto registru
5 Drive write fault - log.1 indikuje, že došlo k chybě při zápisu, tento bit zůstává nastaven
až do dalšího čtení tohoto registru
4 Drive seek complete - u HDD je nastaven, jakmile dojde k nastavení hlaviček na zvolenou stopu,
tento bit zůstává nastaven až do dalšího čtení status registru
3 Data request (DRQ)- indikuje připravenost k datovému přenosu
2 Corrected data flag - nastaven pokud došlo k opravě dat
1 Index - u HDD je nastaven 1x za otáčku plotny
0 Error flag - nastaven vždy, když došlo k chybě, pouze když je v log.1, tak platí obsah
Error registru

Features register

   Původní funkci toho to registru neznám, ale u dnešních zařízení se dá použít jen jako parametr pro instrukci (např. EFh - Set Features).

Command register

   Příkazový registr. Vykonávání daného příkazu začíná hned po zápisu do tohoto registru. Seznam a popis jednotlivých příkazů je uveden dále.

Jednotlivé příkazy pro Command registr

   Opět nehodlám popisovat všechny příkazy a jejich paramentry, protože je jich opravdu hodně, ale pouze ty nejnutnější. Podrobný popis naleznete v některé oficiální dokumentaci k ATA (pár set stran). Před každým příkazem je třeba nastavit bit MASTER/SLAVE v Drive/Head registru !!!

20h - Read sector

   Před každým použitím této instrukce se musí znovu nastavit registry Drive/Head, Cylindr low a high, Sector number a Sector count! Ihned po zapsání této instrukce se do bufferu načte příslušný sektor (u HDD se musí čekat na nastavení stopy a "podtočení" plotny pod hlavičky). Během této chvíle je nastaven příznak BUSY. Hned po načtení dat do bufferu je BUSY příznak vynulován a nastaví se příznak DRQ. Teď už je možné přečíst 256 wordů (512B) z bufferu. Po přečtení všech 512B dat je DRQ vynulován.
   Pokud byl registr Sector count nastaven na větší počet sektorů než 1 a ještě nebyly všechny přečteny, znovu se nastaví BUSY flag a načítá se další soktor. Pak je opět nastaven bit DRQ a mohou se číst data. Takto se pokračuje dokud nejsou přečteny všechny sektory - dokud se hodnota Sector count registru nerovná 0. Přečíst se musí vždy všech 512B. Po vykonání instrukce je opět nastaven bit Drive ready ve status registru.

30h - Write sector

   Před každým použitím tohoto příkazu se musí znovu nastavit registry Drive/Head, Cylindr low a high, Sector number a Sector count! Ihned po zapsání instrukce je nastaven příznak DRQ, který indikuje připravenost CF/HDD přijmout do bufferu 512B dat. Po naplnění bufferu je DRQ příznak vynulován, a po dobu vlastního zápisu je nastaven BUSY příznak.
   Pokud se zapisuje větší počet sektorů najednou, tak se po zapsání (u HDD většinou do cache, takže je zápis velmi rychlý) opět nastaví DRQ bit a je možné zapsat další sektor do bufferu. Takto se pokračuje do nulové hodnoty Sector count registru.

ECh - Identify drive

   Identifikace zařízení. Po zapsání příkazu se buffer naplní 512B identikačních údajů. Postup čtení je stejný jako u instrukce 20h (čtení sektoru). V tabulce jsou uvedeny některé informace ubsažené v identifikačním "sektoru".

Data v identifikačním sektoru
Ofset Délka Význam
0B 2B ID word - 16 bitových příznaků, podstatné jsou vpodstatě jen tyto:
bit 15 - non-magnetic drive, podle tohoto bitu se dáurčit HDD/CF
bit 10 - rychlost přenosu > 10MB/s
bit 9 - rychlost přenosu 5-10MB/s
bit 8 - rychlost přenosu < 5MB/s
bit 7 - vyměnitelný disk
bit 6 - nevyměnitelný disk
+2B 2B počet cylindrů
+6B 2B počet hlav
+12B 2B počet sektorů na stopu
+20B 20B serial number v ASCII, zarovnáno vlevo
+54B 40B model number v ASCII, zarovnáno vlevo
+120B 4B celkový počet adresovatelných sektorů v LBA módu (nezbytné pro HDD větší než 8GB)

Exh - Power commands

   Jsou to příkazy pro řízení spotřeby. Mají význam především pro HDD.

Power commands
Příkaz Význam
E0h Standby - u HDD se zastaví plotna a vypnou některé obvody
E1h Idle - normální režim, plotna se točí
E2h Sleep auto power down - tento příkaz slouží k automatickému přechodu do sleep režimu
po uplynutí nastaveného času, před použitím tohoto příkazu se musí do Sector count
registru zapsat čas (1=5s, hodnoty 1-12 jsou přepsány na 60s), probudit ho lze resetem
E3h Idle auto power down - tento příkaz slouží k automatickému přechodu do standby režimu
po uplynutí nastaveného času, před použitím tohoto příkazu se musí do sector count
registru zapsat čas (1=5s, hodnoty 1-12 jsou přepsány na 60s), probudit ho lze resetem
E6h Sleep - okamžitě přejde do sleep módu, vše se vypne a probudit ho lze jen resetem

EFh - Set features

   Slouží k nastavení parametrů CF/HDD. Před použitím tohoto příkazu se nejdřív musí zapsat jeho parametr do Features registru. Několik z mnoha možných paramtrů je uvedeno v tabulce.

Set features parametry
Paramtr Význam
01h zapne 8-bitový režim přenosu dat
81h vypne 8-bitový režim přenosu dat
55h vypne Read look-ahead (cache)
AAh zapne Read look-ahead (cache)

   V 8-bitovém režimu se přenáší data pouze vodiči D0-D7 a word je přenášen nadvakrát. Dříve to uměly i pevné disky, ale dnes už ne (některé typy možná ano). Problém ale je, že tento režim údajně už nepodporují ani některé CF karty, takže jsem se jím vůbec nezabýval. Podrobný popis 8-bitového režimu a dalších Features parametrů pro CF i HDD naleznete v některé oficiální ATA dokumentaci.

91h - Set drive parameters

   Nastaví fyzickou geometrii HDD. U většiny HDD je tento příkaz naprosto nezbytný a musí se provést před prvním čtením/zápisem sektoru. Má 2 parametry. Prvním z nich je registr Sector count, do kterého se musí nahrát počet sektorů na stopu (cylindr). Druhý parametr je registr Drive/Head. Do části Head (nižší 4 bity) se musí nahrát počet hlav zmenšený o 1! V horní půlce tohoto registru se musí nastavit, stejně jako u každého jiného příkazu, bit MASTER/SLAVE. Obě hodnoty se musí přečíst z Identifikačního bloku (příkaz ECh). Po nastavení parametrů se použije příkaz 91h.

Způsoby adresování

   První možnost je CHS - Cylinder-Head-Sector adresování. Je to dost stará a nepraktická metoda. Původně byla vyvinuta pro diskety. Jde vlastně o fyzické adresování HDD. Pomocí registrů se zvolí hlava (povrch plotny), stopa na plotně (cylindr) a nakonec sektor, což je výseč každé stopy. Původní CHS omezoval hodnoty C/H/S na 1024/16/63. Za předpokladu, že 1 sektor má 512B, může být adresována maximálně kapacita 1024*16*64*512=504MB. Tuto limitaci sice odstranil nový bios, ale princip zůstal zachován. Sektory se počítají od 1 místo od 0, také se zbytečně složitě nastavují adresy - nelze jednoduše uložit adresu do 1 proměnné, ale musí být rozdělěná do C/H/S. Každý disk má navíc různé počty C/H/S, takže i obyčejná inkrementace adresy je relativně komplikovaná (rozhodně složitější než u LBA). I přes to je z důvodů kompatibility tento mód podporován i na nových discích. U disků ale už dávno není konstantní počet sektorů na stopu (neúsporná metoda), takže si řadič CHS adresu přepočítává stejně jako LBA a s fyzickým adresováním už dnes CHS nemá nic společného.
   Druhou a mnohem lepší metodou je LBA adresování - Logical Block Addressing (někdy se uvádí Linear Block Addressing). U tohoto způsobu adresování tvoří registry Cylinder, Sector a Head (Dive/Head) dohromady jedno 28-bitové číslo, které vybírá jeden sektor. Řadič disku si LBA adresu sám přepočte na fyzické adresování. Při velikosti sektoru 512B může být adresována kapacita až 512*2^28=128GB. Pro vyšší kapcity se používá 48-bitové LBA, ale tím jsem se nezabýval - pro jednočipy by 128GB mohlo stačit. Výhoda tohoto systému je jasná - celou adresu lze uložit do jedné proměnné a stačí kontrolovat maximální číslo sektoru podle velikosti HDD.

A teď už nekolik konkrétních operací s ukázkovými programy

   Pro všechny ukázkové programy bude společné toto univerzální schéma. Jako MCU jsem zvolil ATmega32 z řady AVR. Tento typ jsem vybral, protože je největší z řady AVR v pouzdře DIL. Pro experimenty s IDE je vhodný díky velké rychlosti (až 16MHz), ale hlavně díky své relativně velké RAM - 2kB. Bez problému se tak dá pracovat s několika sektory najednou. Do zapojení, jsem ale pro složitější experimenty přidal ještě statickou RAM o velikosti 512kB (lze ji koupit u GME). Její adresování je provedeno přes rozšiřující registry IC2 a IC3. Ty adresují mimo SRAM také vývody pro výběr registrů řadiče HDD/CF A0-A2. Vývody CS0 a CS1 jsou zapojeny fixně na GND a +5V, protože s tímto zapojením je možné bez problému přistupovat ke všem potřebným registrům. Vývod Reset je nevyužit a je připojen na +5V. Jěště jsem se nesetkal se HDD/CF, který by reset k funkci potřeboval. LED připojená na vývodu DASP indikuje interní operace HDD/CF. Díky oddělení adres řadiče je možné PORTA použít rovněž jako datový a komunikovat tak s IDE zařízením 16-bitově. Dále jsem do zapojení přidal LCD 2x20 znaků pro přímé zobrazování některých údajú. Poslední součástí je převodník MAX232 pro přenášení většího množství dat do PC rychlostí až 115,2kbd. Pro rychlejší přenosy ho lze nahradit USB/UART převodníkem FT232BM, který spolu s ATmega32 na 16MHz zvládne přenosovou rychlost až 2Mbd.



!!! Po zapnutí napájení ... !!!

   Ihned po zapnutí napájení musí MCU nastavit piny IOWR a IORD do log.1. Především signál IORD by mohl způsobit nemalé problémy. Pokud by zůstal v log.0, tak je výstup IDE zařízení aktivní a může se dostat do konfliktu s dalším zařízením na sběrnici. Jednou po nepovedeném programování se mi díky tomu málem upekla CF karta i s MCU.
   Po zapnutí napájení před první instrukcí by se mělo čekat na vynulování "busy" příznaku, a následně na nastavení "drive ready" příznaku.

Jak na zápis do libovolného registru

   Tímto postupem lze zapsat do libovolného z registrů:

1) počkat na "Busy" příznak
2) nastavit adresu vybraného registru signály A0-A2 a CS0, CS1
3) vyslat na datovou sběrnici D0-D7 (nebo D0-D15 při zápisu do datového registru) požadované data
4) generovat záporný impulz na IOWR pinu v délce (pri PIO 0 alespoň 300ns)

   Čekání na vynulování příznaku Busy sice není nutné, ale alespoň je jistota, že disk příkaz neignoruje. Zápis do Data registru lze provádět jen pokud je nasatven bit DRQ!

Jak na čtení registru

   Tímto postupem lze číst libovolný:

1) počkat na "Busy" příznak
2) nastavit adresu vybraného registru signály A0-A2 a CS0, CS1
3) nastavit datovou sběrnici MCU jako vstup a všechno ostatní na sběrnici přepnout do vysoké impedance
4) nastavit pin IORD do log.0 a počkat alespoň 300ns
5) přečíst data ze sběrnice D0-D7 nebo D0-D15 (při přenosu z datového registru)
6) IORD zpět do log.1

   Čekání na vynulování busy příznaku Busy opět není nezbytné. Z Data registru lze číst jen pokud je nastaven bit DRQ. Výjimku tvoří Status registr, u kterého se samozřejmě na "Busy" čekat nedá, a měl by se dát číst kdykoliv.

Power commands (pro HDD)

   Tato funkce se viditelně projeví jen u HDD. Následujícím postupem se HDD uvede nejprve do režimu "standby" a po chvíli zase zpět do "idle":

1) zapsat příkaz E0h do Command registru
2) počkat několik vteřin na zastavení plotny
3) zapsat příkaz E1h do Command registru

   Ukázkový program provede uvedené kroky a zároveň vypisuje na LCD stav disku.
zdroják a překlad do hex.

Čtení identifikačního bloku

   Následujícím způsobem lze přečíst identifikační blok HDD:

1) zapsat do Command registru příkaz ECh
2) čekat, dokud není DRQ příznak v log.1
3) 256x přečíst Data registr (a data někam ukládat)

   Následující ukázkový program načte identifikační blok do interní RAM, vypíše na LCD fyzickou geometrii a také jestli je připojen HDD nebo CF.
zdroják a překlad do hex.

Čtení sektoru

   Následujícím způsobem lze přečíst zvolený sektor/sektory v LBA nebo CHS módu:

1) zapsat číslo sektoru nebo LBA A0-A7 do registru Sector number
2) zapsat číslo low část čísla cylindru nebo LBA A8-A15 do registru Cylinder low
3) zapsat číslo high část čísla cylindru nebo LBA A16-A23 do registru Cylinder high
4) zapsat číslo hlavy nebo LBA A24-A27 do nižších 4 bitů registru Drive/Head a ve vyšších 4 bitech nastavit MASTER/SLAVE bit a LBA/CHS bit podle způsobu adresování.
5) zapsat počet čtených sektorů do registru Sector count (0=256 sektorů)
6) zapsat do Command registru příkaz 20h (čtení sektoru)
7) počkat na nastevení "DRQ" příznaku ve status registru
8) 256x přečíst Data registr (a data někam ukládat)
9) pokud se měl číst jen 1 sektor, tak hotovo, pokud více, tak opakovat postup od bodu 7) dokud nejsou přečteny všechny sektory

   Následující ukázkový program přečte zvolený sektor a odešle ho přes USART do PC.
zdroják a překlad do hex.

Zápis sektoru

   Následujícím způsobem lze zapsat zvolený sektor/sektory v LBA nebo CHS módu:

1) zapsat číslo sektoru nebo LBA A0-A7 do registru Sector number
2) zapsat číslo low část čísla cylindru nebo LBA A8-A15 do registru Cylinder low
3) zapsat číslo high část čísla cylindru nebo LBA A16-A23 do registru Cylinder high
4) zapsat číslo hlavy nebo LBA A24-A27 do nižších 4 bitů registru Drive/Head a ve vyšších 4 bitech nastavit MASTER/SLAVE bit a LBA/CHS bit podle způsobu adresování.
5) zapsat počet zapisovaných sektorů do registru Sector count (0=256 sektorů)
6) zapsat do Command registru příkaz 30h
7) počkat na nastevení "DRQ" příznaku ve status registru
8) 256x zapsat word do Data registru
9) pokud se měl zapisovat jen 1 sektor, tak hotovo, pokud více, tak opakovat postup od bodu 7) dokud nejsou zapsány všechny sektory (po dobu zápisu je nastaven "Busy" příznak)

   Následující ukázkový program příjme přes USART 512B dat z PC a následné je uloží do zvoleného sektoru.
zdroják a překlad do hex.

Poslední aktualizace: 10.1.2006