# Perfiferní zařízení a řadiče

### Časovací obvody

- čítací registr - 8bitový registr nebo 16/32bitový čítač
	- lze jej nastavit a číst programově nebo z pomocného registru
	- počítá od nastavené hodnoty (`0000` -> `FFFF`)
	- při přetečení (`FFFF` -> `0000`) může generovat přerušení
- předdělička - snižuje frekvenci systémových hodin dělením zvolenou konstantou

**Použití**
- měření časových interrvalů
- generování přerušení po určitém čase
- periodické generování přerušení

**Hodiny reálného času** (RTC)
- obsahují kaskádu čítačů pro sekundy, minuty, hodiny, ...
- registry lze programově číst
- někdy na čipu se SRAM, ve společném pouzdru s krystalem a baterií

### Diskové paměti

**Konstrukční principy**
- hlavy jsou na otočeném nosiči
	- nastavením polohy hlav vybrán cylindr
	- výběrem hlavy zvolena stopa
	- záznam v jednotlivých stopách rozdělen na sektory
- klasické adresování sektorů: **CHS** (Cylinder, Head, Sector)
- novější způsob: **LBA** (Linear Block Address)
	- všechny sektory jsou průběžně očíslovány jednorozměrnou adresou
- sektor (běžně 0.5 kB) = nejmenší objem dat, který lze číst/zapsat
	- při požadavku na změnu 1 bytu
		- přečte se celý sektor do paměti, změní se byte, sektor se zovu zapíše

**Kombinovaná zápisová/čtecí hlava**
- zápis indukční hlavou
	- záznam bitů modulací proudu v hlavě, kódování RLL
- čtení magnetorezistivní hlavou
	- MR senzor - změna el. odporu v magnetickém poli

**Zonální záznam** (ZBR, Zone Bit Recording)
- bez ZBR - ve všech stopách stejný počet sektorů (povrch disku není dobře využit)
- se ZBR - v jednotlivých zónách je různý počet sektorů ve stopě

**Rychlost disku**
- rychlost vystavení hlav
	- podle konstrukce vystavovacího mechanismu
	- cca 0.5-1.0 ms na sousední stopu
	- pro libovolné stopy cca 3-10 ms
- rychlost nalezení sektoru
	- podle rychlosti otáčení
	- 1/2 otáčky = 4.2 ms při 7200 ot/min
- rychlost přenosu
	- podle rychlosti otáčení a kódování
	- přenos z povrchu disku cca. 500-2000 Mbit/s

### Solid State Devices (SSD)

**Architektura Flash NAND**
- stránka (page) = 2048 + 64 bytů (4 sektory)
- blok = běžně 64 stránek
- při kapacitě 4 Gb 4000 bloků
- AND nemá dělení na bloky
- paměťová matice se čte/zapisuje po stránkách
- ECC slouží k opravě chybně přečtených dat
- mazání
	- AND - po stránkách
	- NAND - po blocích

**FTL** (Flash Translation Layer)
- převádí logickou lineární adresu sektoru (LBA) na fyzickou adresu čipu / adresu stránky na čipu
	- paralelní činnost banků pro zvýšení rychlosti
	- rovnoměrné využívání stránek (Wear Leveling) pro vyšší životnost
	- mazání volných stránek pro další zápis (Garbage Collection)
	- správa vadných bloků

**Rozhraní NVMHCI** (Non Volatile Memory Host Controller Interface)
- protokol pro připojení nevolatilních pamětí na PCIe

### Rozhraní ATA, ATAPI a SATA

**Rozhraní ATA**
- specifikace definuje
	- fyzickou vrstvu
		- odvozena od sběrnice ISA
	- registry řadiče
		- **Command** - příkazový registr - zápis povelu pro zařízení
		- **Sector Count** - počet přenášených sektorů
		- **LBA Low, Mid, High** - LBA adresa dat
		- **Device** - výběr zařízení (č. 0/1), číslo hlavy při adresování CHS
		- **Status** - stavový registr
		- **Alternate status** - stavový registr
		- **Features** - pro zápis různých parametrů (volba Ultra DMA, řízení úsporných režimů, ...)
		- **Error** - indikace typu chyby

**Rozhraní ATAPI** (ATA Packet Interface)
- pro připojení CD/DVD
	- do příkazového registru se zapisuje příkaz Packet Command (`0xA0`)
	- příkazy pro CD/DVD se předávají v příkazovém bloku (12 bytů) který se zapisuje do **datového registru**
- příkazový packet
	- do příkaz. registru se zapíše příkaz Packet Command
	- do datového registru se zapíše příkazový packet
	- z/do datového registru se čtou nebo zapisují data

**Rozhraní SATA** (Serial ATA)
- z hlediska aplikačního SW transparentní (používá stejné registry jako u ATA)
- fyzická vrstva
	- každá disková jednotka propojena dvojicí jednosměrných signálů
	- používá se diferenciální signál
	- přenos. frekvence 1.5/3 GHz, rychlost tedy 150/300 MB/s

**SATA II**
- oproti SATA obsahuje rozšíření
	- použití NCQ (Native Command Queuing)
		- příkazy zadávány před dokončením předchozího
		- vykonány v optimálním pořadí (určuje disk)
	- rozvětvení portů (Port Multiplier)
		- musí jej podporovat HBA (Host Bus Adapter)
		- z jednoho HBA až na 15 portů
		- port 15 (0xF) je Control Port
	- podpora SES (SCSI Enclosure Services)
		- komunikace s napájecími zdroji, ovládacím panelem, ...
	- kompatibilita rozhraní se SAS (Serial Attached SCSI)