Vysoké učení technické v Brně Fakulta elektrotechniky a komunikačních technologií Ústav automatizace a měřící techniky
Záznamová karta pro mikroprocesor Rabbit Diplomová práce
Tomáš Kreuzwieser Brno, 2004
Zadání diplomové práce. . .
Prohlášení „Prohlašuji, že jsem předloženou diplomovou práci zpracoval sám s konzultační pomocí vedoucího projektu a uvedených konzultantů. Použité literární prameny jsou uvedeny v literárních odkazech.ÿ
Brno, 2. června 2004
...........................
Poděkování „Tímto chci poděkovat svému vedoucímu diplomové práce Ing. Zdeňku Bradáčovi za cenné rady a připomínky při vypracování diplomové práce. Dále děkuji svým rodičům za jejich podporu během studia.ÿ
Brno University of Technology Faculty of Electrical Engineering and Communication Department of Control, Measurement and Instrumentation
Storage memory card for Rabbit microcontroller Thesis
Major: Cybernetics, Control and Measurement Student: Tomáš Kreuzwieser Supervisor: Ing. Zdeněk Bradáč Abstract : The aim of this thesis is to design and realize an interconnection between Rabbit RCM3200 MCU and Multimedia Card (MMC). The thesis is an example of embedded system based on Rabbit RCM3200 MCU intended for mass data storage, e.g. for various applications in measurements. The thesis includes hardware design and realization of printed circuit board (PCB) and creation of libraries providing standard functions of FAT file system, such as data transfers, deleting, creating and moving files and directories. Designed library includes semaphores for using these functions in real time operating systems. The core of the unit is platform independent in order to be usable in other MCU systems. In the first part of the thesis all the currently available types of flash memory cards are described and compared. The second part deals with MMC card, serial peripheral interface (SPI), principles of FAT and Rabbit RCM3200 microcontroller. The last part is a description of concrete software solutions and includes several examples.
Keywords: Embedded FAT file system, FAT, FAT12, FAT16, FAT32, File Allocation Table, FAT File System Specification, Boot Sector, Bios Parameter Block, BPB, Directory Structure, Long Directory Entries, FSInfo, MultiMedia Card, MMC, CompactFlash, CF, SPI, microcontroller, Rabbit, RCM3200, SPI, CCITT-16, CRC16, CRC7
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
vi
Obsah Seznam obrázků
x
Seznam tabulek
xi
1 Úvod
1
2 Technologie paměťových karet 2.1 Rozdíl mezi pamětí technologie NAND a NOR . . . . . . . . . . . .
2 2
3 Historie vývoje paměťových karet 3.1 CompactFlash . . . . . . . . . . . 3.2 SmartMedia . . . . . . . . . . . . 3.3 MultiMedia Card . . . . . . . . . 3.4 MemoryStick . . . . . . . . . . . 3.5 SecureDigital Memory Card . . . 3.6 eXtreme Digital . . . . . . . . . . 3.7 Srovnání velikostí . . . . . . . . .
. . . . . . .
3 3 4 5 6 6 7 8
. . . . . . . . . . . . . . . . . .
9 9 10 10 10 10 11 12 14 14 14 15 16 16 18 19 19 19 20
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
4 MultiMedia Card 4.1 Vlastnosti . . . . . . . . . . . . . . . . . . . . 4.2 Fyzická specifikace . . . . . . . . . . . . . . . 4.2.1 Rozměry karty . . . . . . . . . . . . . 4.3 Připojení k řídícímu systému . . . . . . . . . . 4.4 Módy činnosti . . . . . . . . . . . . . . . . . . 4.4.1 MMC mód . . . . . . . . . . . . . . . . 4.4.2 SPI mód . . . . . . . . . . . . . . . . . 4.5 Registry MultiMedia Card v módu SPI . . . . 4.5.1 Operating Conditions Register (OCR) 4.5.2 Card Identification (CID) Register . . 4.5.3 Card Specific Data (CSD) Register . . 4.6 Příkazy MultiMedia Card v módu SPI . . . . 4.6.1 Skupiny příkazů . . . . . . . . . . . . . 4.6.2 Formát příkazů . . . . . . . . . . . . . 4.7 Odezvy karty na příkazy . . . . . . . . . . . . 4.7.1 Odezva R1 . . . . . . . . . . . . . . . . 4.7.2 Odezva R1b . . . . . . . . . . . . . . . 4.7.3 Odezva R2 . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . . . . . . . . . . . . .
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
. . . . .
20 21 22 23 23
5 Sběrnice SPI 5.1 Sběrnice SPI u modulu RCM3200 . . . . . . . . . . . . . . . . . . . 5.1.1 Zapojení SPI portů . . . . . . . . . . . . . . . . . . . . . . . 5.1.2 Funkce pro práci s SPI porty . . . . . . . . . . . . . . . . . .
24 27 27 27
6 Kontrolní součty a CRC kódy 6.1 Kontrolní součet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 CRC kódy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28 28 28
7 Struktura disku a souborový systém FAT 7.1 Základní pojmy . . . . . . . . . . . . . . . . . 7.1.1 Fyzická struktura média . . . . . . . . 7.1.2 Logická struktura média . . . . . . . . 7.1.3 Systém FAT . . . . . . . . . . . . . . . 7.2 Master Boot Record a Partition Table . . . . 7.2.1 Zásady pro vytváření diskových oblastí: 7.2.2 Základní kódy systému souborů . . . .
. . . . . . .
29 29 29 29 30 31 32 32
. . . . . . . . . . . . . .
34 34 34 34 35 37 37 38 38 40 41 41 42 43 43
4.8 4.9 4.10 4.11
4.7.4 Odezva R3 . . . . . . Inicializace SPI módu . . . . Nastavení velikosti bloku dat Čtení a zápis . . . . . . . . Čtení registrů CID a CSD .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
8 Logický disk systému FAT 8.1 Boot Record logického disku . . . . . . . . . . . . . . 8.1.1 Bios Parameter Block (BPB) . . . . . . . . . 8.1.2 Extended Bios Parameter Block (EBPB) . . . 8.1.3 Načtení základních údajů z BPB a z Extended 8.2 Alokační tabulka souborů (FAT) . . . . . . . . . . . . 8.2.1 Typy souborového systému FAT . . . . . . . . 8.2.2 Určení typu FAT . . . . . . . . . . . . . . . . 8.2.3 Obsah FAT . . . . . . . . . . . . . . . . . . . 8.2.4 Sledování řetězce FAT . . . . . . . . . . . . . 8.2.5 Převod čísla clusteru na číslo sektoru . . . . . 8.3 File System Info (FSI) . . . . . . . . . . . . . . . . . 8.4 Adresář . . . . . . . . . . . . . . . . . . . . . . . . . 8.4.1 Běžný adresář . . . . . . . . . . . . . . . . . . 8.4.2 Root adresář . . . . . . . . . . . . . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . .
. . . . . . .
. . . . . . . . . BPB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . .
vii
. . . . . . .
. . . . . . . . . . . . . .
. . . . .
. . . . . . .
. . . . . . . . . . . . . .
. . . . .
. . . . . . .
. . . . . . . . . . . . . .
. . . . .
. . . . . . .
. . . . . . . . . . . . . .
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
. . . . . . . . . .
44 46 47 47 48 50 50 50 50 51
9 RCM3200 9.1 Úvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3 Vývojový kit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52 52 54 55
10 Návrh prototypové desky 10.1 Část napájení . . . . . . . . . . . 10.2 Konektory pro RCM3200 . . . . . 10.3 Konektor CompactFlash a MMC 10.4 Testovací rozhraní . . . . . . . . .
. . . .
56 56 57 57 57
. . . . . . . . . . . .
59 59 60 61 63 63 63 63 64 66 67 69 70
8.5
8.6 8.7 8.8
8.4.3 Adresářový záznam . . . . . . . . . . . . . . . . . 8.4.4 Speciální adresářové záznamy . . . . . . . . . . . Uložení souborů a adresářů do nadřazeného adresáře . . 8.5.1 Uložení souboru nebo adresáře s krátkým jménem 8.5.2 Uložení souboru nebo adresáře s dlouhým jménem Soubor . . . . . . . . . . . . . . . . . . . . . . . . . . . . Jméno disku . . . . . . . . . . . . . . . . . . . . . . . . . Unicode . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.8.1 Kódovací schéma . . . . . . . . . . . . . . . . . . 8.8.2 Unicode Consorcium . . . . . . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
11 Softwarové vybavení 11.1 Úvod . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Vlastnosti . . . . . . . . . . . . . . . . . . . . . . 11.3 Cross platform . . . . . . . . . . . . . . . . . . . 11.4 Návrh knihovních funkcí . . . . . . . . . . . . . . 11.5 Funkční prototypy koncových funkcí EMBFATFS 11.5.1 Funkce pro MMC . . . . . . . . . . . . . . 11.5.2 Funkce pro FAT . . . . . . . . . . . . . . . 11.5.3 Obdoby standardních funkcí . . . . . . . . 11.5.4 Příklady vyšších funkcí . . . . . . . . . . . 11.5.5 Funkce main(void) . . . . . . . . . . . . . 11.6 Struktury . . . . . . . . . . . . . . . . . . . . . . 11.7 Testovací program . . . . . . . . . . . . . . . . .
. . . .
. . . . . . . . . . . .
. . . .
. . . . . . . . . . . .
. . . .
. . . . . . . . . . . .
. . . .
. . . . . . . . . . . .
. . . . . . . . . .
. . . .
. . . . . . . . . . . .
. . . . . . . . . .
viii
. . . .
. . . . . . . . . . . .
. . . . . . . . . .
. . . .
. . . . . . . . . . . .
. . . . . . . . . .
. . . .
. . . . . . . . . . . .
. . . . . . . . . .
. . . .
. . . . . . . . . . . .
12 Závěr
72
Reference
74
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
Přílohy A.1 Schéma zapojení druhé verze univerzální desky . . . . . . . . . . . . A.2 Plošný spoj druhé verze univerzální desky . . . . . . . . . . . . . . A.3 CD-ROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ix
xii xii xii xvi
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
x
Seznam obrázků 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
Srovnání velikostí jednotlivých typů paměťových karet . . . Rozměry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Připojení paměťové karty MMC k řídícímu systému . . . . . Způsob komunikace v MMC módu . . . . . . . . . . . . . . Zapojení konektoru v MMC módu . . . . . . . . . . . . . . . Způsob komunikace v SPI módu . . . . . . . . . . . . . . . . Zapojení konektoru v SPI módu . . . . . . . . . . . . . . . . Formát odezvy R1 . . . . . . . . . . . . . . . . . . . . . . . Formát odezvy R2 . . . . . . . . . . . . . . . . . . . . . . . Inicializace SPI módu . . . . . . . . . . . . . . . . . . . . . . Nastavení velikosti bloku dat pro I/O operace s MMC kartou Čtení a zápis bloku dat MMC karty . . . . . . . . . . . . . . Celková koncepce systému se sběrnicí SPI . . . . . . . . . . Propojení stanic Master a Slave . . . . . . . . . . . . . . . . Význam parametrů CPOL a CPHA na SPI . . . . . . . . . . Čtení dat z paměti s rozhraním SPI . . . . . . . . . . . . . . Zápis dat do paměti s rozhraním SPI . . . . . . . . . . . . . Způsob čtení z FAT . . . . . . . . . . . . . . . . . . . . . . . Struktura adresáře . . . . . . . . . . . . . . . . . . . . . . . Modul RCM3200 . . . . . . . . . . . . . . . . . . . . . . . . Architektura modul RCM3200 . . . . . . . . . . . . . . . . . Porty modulu RCM3200 . . . . . . . . . . . . . . . . . . . . Konektory modulu RCM3200 . . . . . . . . . . . . . . . . . Úvodní stránka příkladu . . . . . . . . . . . . . . . . . . . . Výpis root adresáře . . . . . . . . . . . . . . . . . . . . . . . Schéma zapojení druhé verze univerzální desky . . . . . . . . Plošný spoj druhé verze univerzální desky (top) . . . . . . . Plošný spoj druhé verze univerzální desky (bottom) . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
8 10 11 12 12 13 13 20 20 21 22 23 24 25 25 26 26 40 49 52 54 55 55 71 71 xiii xiv xv
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
xi
Seznam tabulek 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
Card Identification (CID) Register . . . . . . . . . . . . . Card Specific Data (CSD) Register . . . . . . . . . . . . . Verze specifikace MMC (část CSD STRUCT registru CSD) Verze specifikace MMC (část SPEC VERS registru CSD) . Podporované třídy příkazů (část CCC registru CSD) . . . Začlenění příkazů do jednotlivých tříd, první část . . . . . Začlenění příkazů do jednotlivých třírd, druhá část . . . . Formát příkazu . . . . . . . . . . . . . . . . . . . . . . . . Seznam příkazů dostupných v módu SPI . . . . . . . . . . Činnost příkazů dostupných v módu SPI . . . . . . . . . . SPI porty modulu RCM3200 . . . . . . . . . . . . . . . . . Master Boot Record a Partition Table . . . . . . . . . . . Struktura záznamu partition tabulky . . . . . . . . . . . . Začátek a konec oddílu (formát slova) . . . . . . . . . . . . Základní kódy systému souborů . . . . . . . . . . . . . . . Bios Parameter Block . . . . . . . . . . . . . . . . . . . . . Extended Bios Parameter Block pro FAT12 a FAT16 . . . Extended Bios Parameter Block pro FAT32 . . . . . . . . Záznam FAT12 . . . . . . . . . . . . . . . . . . . . . . . . Záznam FAT16 . . . . . . . . . . . . . . . . . . . . . . . . Záznam FAT32 . . . . . . . . . . . . . . . . . . . . . . . . File System Info . . . . . . . . . . . . . . . . . . . . . . . . Atributy objektů . . . . . . . . . . . . . . . . . . . . . . . Adresářový záznam SFNE . . . . . . . . . . . . . . . . . . Adresářový záznam LFNE . . . . . . . . . . . . . . . . . . Formát časových údajů . . . . . . . . . . . . . . . . . . . . Formát data . . . . . . . . . . . . . . . . . . . . . . . . . . První bajt libovolného záznamu . . . . . . . . . . . . . . . Znaky povolené v záznamu SFNE . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15 15 15 16 16 17 17 18 18 19 27 32 32 33 33 35 35 36 39 39 39 42 44 45 45 46 46 47 47
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
1
Úvod
Záznam informací sehrál v historii lidstva svou nezaměnitelnou roli a byl důležitý pro úspěšný kulturní a průmyslový rozvoj civilizací již od dávných dob. Důvodem rozvoje byly obvykle potřeby vojenské, obchodní a vědecké. Uchovávání informace je neodmyslitelně spjato s jedním z nejdůležitějších vynálezů lidstva – písmem. Objevilo se přibližně před pěti tisíci lety jako výsledek poměrně hluboké jazykové analýzy. Jeho význam spočívá především v tom, že umožnuje přenášet informace v čase a prostoru. Až do vzniku písma byla výměna informací vázána výhradně na konkrétní místo a čas, ve kterém probíhal rozhovor. Naproti tomu, písemné zprávy je možné přenášet i na jiná místa a uchovávat je pro další generace. Vynález písma je tak významný, že slouží jako mezník k rozdělení dějin na prehistorii a na období historické [3]. Současná doba je charakteristická uchováváním informací v nejrůznějších formách, nejenom písma a obrázků, jak tomu bylo v minulosti. Dnes jsou data získávána nejčastěji převodem a digitalizací hudebních, hlasových či video nahrávek z analogové podoby do podoby digitální, nebo pocházejí z dnes zvláště se rozmáhajících digitálních fotoaparátů a kamer. V neposlední řadě jsou digitální data získávána také z různých měřících přístrojů. Tato data je nutné po zpracování a případné kompresi někam uložit. To je zvláště významné v našem oboru. S vývojem stále lepších měřících přístrojů tento problém získává na důležitosti. Paměťové karty Multimedia Card jsou dnes prakticky nejlevnější a nejrozšířenější polovodičovou pamětí na trhu, a proto se využívají v různých embedded systémech jako levné paměťové médium. V mé diplomové práci jsem dostal za úkol tuto paměťovou kartu připojit k modulu Rabbit RCM3200, zrealizovat podpůrnou elektroniku a naprogramovat ovladače pro některý z běžně používaných souborových systémů. Výsledek mé práce je využitelný v embedded systémech, které potřebují zaznamenávat velké množství dat, nebo potřebují data zaznamenávat na vyměnitelná média. Při práci jsem kladl důraz na maximální spolehlivost. Modul RCM3200 obsahuje rychlý mikroprocesor, založený na známém procesoru Z80 firmy Zilog [5], paměť programu, paměť dat, dva konektory s piny I/O a 10/100BaseT ethernetové rozhraní. To vše na malé destičce plošných spojů o rozměrech 69×47 mm. Jako souborový systém jsem si zvolil systém FAT, protože je běžně použitelný ve všech operačních systémech. Používá se ve většině embedded zařízení, je spolehlivý a relativně jednoduchý.
1
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
2
Technologie paměťových karet
Nejpoužívanější pamětí pro trvalé uložení dat v přenosných zařízeních je paměť typu flash. Nelze ji přirovnat k disketě, ani pevnému disku, spíše k operační paměti. Rozdíl mezi paměťmi technologie NOR a pamětí NAND flash je jednak v tom, že u NAND flash paměti nejsou data ztracena po vypnutí napájení a také v tom, že data jsou zapisována po blocích. Na paměti NOR je zápis umožněn po jednotlivých bajtech [6]. Paměti flash mají několik výhod: • Neobsahují žádné pohyblivé součásti, proto jsou tiché a odolné vůči otřesům. • Velice nízká spotřeba energie (k zachování dat není potřeba žádná energie, ta je nutná pouze při zápisu nebo čtení). • Malé rozměry a hmotnost. Spolu s velkou kapacitou u některých typů jsou ideální do všech přenosných elektronických zařízení. • Spolehlivost. Mnoho karet používá kontrolu ukládání dat pomocí ECC a inteligentní řadiče, které zabraňují ukládání dat do špatných paměťových oblastí. • Nejedná se o magnetická média, nejsou tedy citlivá na elektromagnetické záření.
2.1
Rozdíl mezi pamětí technologie NAND a NOR
NAND • Čtení a zápis po blocích (stránkách). • Rychlý zápis/čtení velkého bloku dat. • Náhrada pevných disků v přenosných zařízeních. NOR • Čtení a zápis po jednotlivých bajtech. • Rychlý přístup k jednotlivým buňkám paměti. • Pomalé čtení/zápis velkého bloku dat. • Paměti uschovávající důležité informace (například BIOSy počítačů, řídící čipy počítačových komponent nebo mobilních telefonů).
2
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
3
Historie vývoje paměťových karet
Historie paměťových karet flash započala v roce 1990 s nástupem paměťových PC karet standardu PCMCIA. Tyto karty sloužily jako rozšíření stávajícího diskového prostoru a používaly se hlavně v přenosných počítačích. V roce 1992 došlo k revizi PC standardu IDE/ATA (PC ATA Specification). Při té příležitosti byl ustanoven standard IDE/ATA kompatibilních I/O PC karet. Toto rozhraní umožňovalo přímé připojení běžných IDE disků přes pasivní redukci.
3.1
CompactFlash
Na základě této iniciativy vznikl v roce 1995 první návrh přenosných paměťových karet ve smyslu jak je známe dnes. Jejich jméno je CompactFlash. Hned od počátku byl tento návrh pojat jako otevřený standard s důrazem na eliminaci problémů s kompatibilitou zařízení různých výrobců. Tato skutečnost mu také zajistila úspěch. Záštitu nad tímto projektem nese sdružení velkých výrobců elektroniky, které si říká The CompactFlash Association, zkráceně CFA. CompactFlash (dále jen CF) technologie měla, a stále má, poměrně moderní vlastnosti. Vyznačuje se nízkou hmotností, malou spotřebou, vysokou dosažitelnou kapacitou a vysokou rychlostí. Tyto karty jsou vhodné pro jednoduché uchování a transport nejrůznějších typů digitálních informací s maximální spolehlivostí. V dnešní době poskytuje CompactFlash ze všech paměťových karet nejlepší poměr kapacita/cena. V některých zařízeních může být výhodný integrovaný IDE řadič, který umožňuje přímé připojení jako běžný IDE disk. Avšak někdy může být tato vlastnost naopak nevýhodou, protože k připojení je zapotřebí mnoho volných I/O pinů řídící jednotky. Primárně byl sice standard CompactFlash určen pro paměťové karty, ale postupem času se z tohoto návrhu vytvořila univerzální komunikační sběrnice, elektronicky kompatibilní s PCMCIA. Nejčastěji je využívána ve fotoaparátech firmy Canon. Vlastnosti: • existuje v provedení Type I a Type II (Type II je širší) • hmotnost: 2 až 10 gramů • přenosová rychlost média: 150 kB/s až 4,5 MB/s
3
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
• provozní teplota: -55 ◦ C až +85 ◦ C • integrovaný IDE řadič • životnost: až 1 mil. cyklů • padesátipinové rozhraní • provozní napětí: 3,3 V nebo 5 V • rozměry: Type I – (42,8 mm×36,4 mm×3,33 mm) Type II – (42,8 mm×36,4 mm×5 mm)
3.2
SmartMedia Další významnou kartou je SmartMedia. Je to standard paměťových karet firmy Toshiba. Na trhu jsou od roku 1996. Součástí karty není řadič, což mělo umožnit výrobu velmi levných paměťových karet. Původní název tohoto typu karty je Solid State Floppy Disk Card (SSFDC). Velikostí se podobá kreditní kartě, ale je asi o polo-
vinu kratší. Pravděpodobně nejpoužívanější a nejznámější je díky fotoaparátům Olympus, kde byla hojně používána. Dnes je postupně nahrazována kartou xD. Vlastnosti: • rozměry: 45 mm×37 mm×0,76 mm • hmotnost: 1.8 g • provozní teplota: 0 ◦ C až +85 ◦ C • životnost: 1 mil. cyklů • rozhraní: 22 plošek • výborný poměr kapacita/cena • spotřeba energie: čtení – maximálně 56 mA
4
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
zápis – maximálně 14 mA • rozměry: Type I – (42,8 mm×36,4 mm×3,33 mm) Type II – (42,8 mm×36,4 mm×5 mm)
3.3
MultiMedia Card
V roce 1998 byla na trh uvedena karta MultiMedia Card a konkurenční MemoryStick. MultiMedia Card (MMC) je opět otevřený standard. Stejně jako CompactFlash má i MultiMedia Card (dále jen MMC) svoji organizaci, která dbá nad dodržováním stanoveného standardu. Jmenuje se MultiMedia Card Association (MMCA) a byla založena v lednu roku 1998. Zakládajícími členy této asociace byly firmy SanDisk a Siemens. Tyto paměti byly vyvinuty především pro oblast digitálního záznamu zvuku a částečně i obrazu (odtud název). Pro svůj malý rozměr se používají v mobilních komunikačních systémech (PALM, Nokia, Siemens, Casio atd.). V digitálních fotoaparátech se dnes již prakticky nepoužívají. Této kartě se budu věnovat v samostatné kapitole, protože její využití je součástí mé práce. Uvedu jen některé základní vlastnosti pro porovnání s ostatními kartami. Vlastnosti: • rozměry: 32 mm×24 mm×1,4 mm • přenosová rychlost média: až 2,5 MB/s • provozní teplota: -25 ◦ C až +85 ◦ C • životnost: 1 mil. cyklů • spotřeba energie: čtení – maximálně 100 mA zápis – maximálně 33 mA • sedmipinové rozhraní • provozní napětí: 2,7 V až 3,6 V
5
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
3.4
MemoryStick
Toto médium je pokusem firmy SONY ustanovit světový standard na základě vlastního vývoje. Mechanicky je toto médium (též nazývané SmartStick) řešeno obdobně jako MMC. Má deset pinů (přímé ploché kontakty). Výhodou je poměrně otevřený návrh, který umožňuje implementaci i dalších funkcí (kamera, GPS, komunikační funkce. . .). Obsahuje obdobné sériové rozhraní jako MMC. Firma SONY očekávala výrazné prosazení své paměti, nicméně licenční politika SONY a široká podpora SD paměti odsuzuje tuto paměť do velmi problematické pozice. Přímým nástupcem paměti MemoryStick je MemoryStick Pro. Toto médium je dnes dostupné v kapacitách až 1 GB a má oproti MemoryStick výrazně rychlejší přístup. Teoretický kapacitní limit je zde 32 GB. Vlastnosti: • rozměry: 50 mm×21,5 mm×2,8 mm • hmotnost: 4 g • přenosová rychlost média MS: čtení – 1,5 MB/s zápis – 2,5 MB/s • desetipinové rozhraní • provozní napětí: 2,7 V až 3,6 V
3.5
SecureDigital Memory Card
V roce 1999 byl uvolněn standard SecureDigital Memory Card (SD Card) a Secure MultiMedia Card (SMMC). Jedná se o rozšíření MultiMedia Card o bezpečnostní mechanizmy ochrany copyrightu. Jsou elektricky a rozložením kontaktů zpětně kompatibilní s MultiMedia Card. SD Card je však oproti MultiMediaCard o polovinu širší a proto je většinou nelze použít místo MMC karet. Tato karta opět vznikla v dílně společnosti SanDisk. Používají ji desítky výrobců mobilních zařízení (PALM, Panasonic, PDA,
6
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
mobilní telefony Nokia 9110, Siemens SL45, přes 60 výrobců MP3 přehrávačů atd.) Na rozdíl od MMC je tato karta hojně využívána i v digitálních fotoaparátech. Vlastnosti: • rozměry: 32 mm×24 mm×2,1 mm • hmotnost: 1,5 g • moderní médium kompatibilní s MMC • přenosová rychlost: v průměru 3 MB/s (v budoucnu až 20 MB/s) • provozní teplota: -25 ◦ C až +85 ◦ C • životnost: až 1 mil. cyklů • devítipinové rozhraní • provozní napětí: 3,3 V
3.6
eXtreme Digital
Zatím nejnovější z rodiny paměťových karet je karta nazývaná xD (eXtreme Digital). Na trhu je od roku 2002. Karta vznikla ve spolupráci firem Olympus, Fuji a Toshiba. Důvodem vývoje této karty byla snaha paměťové karty miniaturizovat a zároveň u nich dosáhnout velké kapacity. Je velmi malá a lehká. Používá se především v digitálních fotoaparátech Olympus a Fuji. Prozatímní nevýhodo těchto karet je jejich vysoká cena. Vlastnosti: • rozměry: 20 mm×25 mm×1,7 mm • hmotnost: 2 g • přenosová rychlost média: čtení – 5 MB/s zápis – 3 MB/s • osmnáctipinové rozhraní
7
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
3.7
Srovnání velikostí
Na obrázku 1 je porovnání velikostí jednotlivých typů paměťových karet.
Obrázek 1: Srovnání velikostí jednotlivých typů paměťových karet
Podrobnější informace o paměťových kartách naleznete v [6], [7] a [8].
8
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
4
MultiMedia Card
MultiMedia Card je jedna z nejmenších a nejlehčích paměťových karet. Je velice populární díky svému sedmivodičovému připojení, spolehlivosti a nízké ceně. Je vhodná do aplikací, kde není rozhodující maximální rychlost, ale prioritní je spolehlivost, nízká cena a malá spotřeba. Stejně jako u jiných typů paměťových karet i u karet MultiMedia Card postupem času začalo vznikat mnoho zařízení, které tento standard využívají pouze jako rozhraní pro jiný účel. Proto je v současné době na trhu mnoho těchto karet pro GSM, Bluetooth a podobné účely. Podrobnosti o MultiMedia Card lze najít v [10], [11], [12], [13], [14] a [15].
4.1
Vlastnosti
• Jedná se o paměť NAND Flash. • Napájecí napětí musí být v rozmezí 2,7 V až 3,6 V. • Variabilní frekvence od 0 MHz do 20 MHz. • Přenosová rychlost média je až 2,5 MB/s. • Spotřeba energie: čtení – maximálně 100 mA zápis – maximálně 33 mA • Typický proudový oděr 20 mA až 25 mA pro čtení, 25 mA až 35 mA pro zápis a 0,04 mA až 0,15 mA v režimu spánku. • Na jedné sběrnici může být více MMC karet. • Hmotnost 1,5 g. • Pracovní rozsah teplot -25 ◦ C až +85 ◦ C. • Snáší vibrace až 15 G a nárazy až 1000 G. • Power management. • Velikost sektoru je (stejně jako u magnetických disků) 512 B. • Zaručeno minimálně 1 mil. zápisů a neomezené čtení. • Střední doba mezi chybami je vetší než 10 miliónů hodin.
9
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
• Možnost vkládat a odpojovat kartu bez odpojení napájení. • Obsahuje registr stavu, registr maximální rychlosti a registr nastavení. • Karta je připojena pomocí sedmipinového rozhraní.
4.2 4.2.1
Fyzická specifikace Rozměry karty
Rozměry pouzdra jsou 32 mm×24 mm a tloušťka je pouhých 1,4 mm. Na spodní straně karty je umístěno 7 plochých kontaktů s roztečí 2,54 mm. Pohled na spodní stranu karty je na obrázku 2. Funkce pinů jsou pro jednotlivé přístupové módy různé a jsou popsány v kapitole 4.4.1 a 4.4.2.
Obrázek 2: Rozměry
4.3
Připojení k řídícímu systému
Propojení paměťové karty MultiMedia Card k mikroprocesoru je vhodné provést prostřednictvím krátkého kabelu. Pokud není možné krátký kabel použít, je nutné vykompenzovat vliv vedení jednoduchou dolní propustí. Dva možné způsoby zapojení1 této propusti ukazuje obrázek 3.
4.4
Módy činnosti
Karta MMC může pracovat v jednom ze dvou módů. Tyto módy se jmenují MMC a SPI. Aby splňovala požadavky standardu MMC, tak musí umět oba dva. 1
Popis pinů odpovídá zapojení módu SPI (viz kapitola 4.4.2).
10
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
Obrázek 3: Připojení paměťové karty MMC k řídícímu systému
V každém z módů je karta jinak zapojena a pro komunikaci používá jiný komunikační protokol a jiné registry. Mód MMC popisuje kapitola 4.4.1 a mód SPI kapitola 4.4.2. Výběr pracovního módu probíhá během inicializace karty (viz kapitola 4.8). Mód SPI bude popsán podrobně, protože ho používám ve svém programu. 4.4.1
MMC mód
Charakteristické vlastnosti: • Komunikace probíhá pomocí tří komunikačních vodičů (SCK, COMMAND, DATA). • Karta adresována podle svého jedinečného sériového čísla. • Povinné CRC součty při přenosech. Na obrázku 4 je zobrazen způsob komunikace řídícího systému s MMC kartou v MMC módu a obrázek 5 zobrazuje zapojení konektoru a názvy pinů, které se pro každý mód liší. Signály: Signál SCK synchronizuje komunikaci mezi kartou a řídícím systémem. Je generován na straně řídícího systému. Pomocí signálu COMMAND předává systém příkazy kartě, a nebo naopak, karta předává stavy řídícímu systému. Signál DATA je použit ke čtení z karty nebo zápisu do karty.
11
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
Nevýhodou tohoto módu je to, že není možné vypnout CRC kódy (viz kapitola 6.2), které jsou kartou generovány při čtení a nutnost jejich počítání řídícím systémem při zápisu. Tyto výpočty jsou velice náročné na výpočetní výkon karty i řídícího systému.
Obrázek 4: Způsob komunikace v MMC módu
Obrázek 5: Zapojení konektoru v MMC módu
4.4.2
SPI mód
Charakteristické vlastnosti: • Protokol SPI je elektrotechnický standard. • Tři komunikační vodiče (MISO, MOSI, SCK). • Výběr karty prováděn pomocí signálu /CS. • CRC součty pro přenosy je možné vypnout.
12
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
Největší výhodou tohoto módu je právě připojení karty pomocí SPI sběrnice, kterou disponují téměř všechny moderní mikroprocesory užívané v embedded aplikacích. Podrobně je SPI sběrnice popsána v kapitole 5. Další výhodou je možnost podle potřeby vypnout nebo zapnout počítání CRC kódů při datových přenosech. Na obrázku 6 je zobrazen způsob komunikace řídícího systému s MMC kartou v SPI módu. Obrázek 7 zobrazuje zapojení konektoru. Signály: Signál MISO slouží jako vstup řídícího systému a jako výstup karty (Master Input, Slave Output). Signál MOSI je výstup systému a zároveň vstup karty (Master Output, Slave Input). SCK je synchronizační hodinový signál generovaný řídícím systémem. Signálem /CS vybírá řídící systém MMC kartu2 .
Obrázek 6: Způsob komunikace v SPI módu
Obrázek 7: Zapojení konektoru v SPI módu 2
V případě použití více MMC karet v módu SPI je samozřejmě nutné použít pro každou kartu vlastní signál /CS. Signály MOSI, MISO a SCK mohou být společné.
13
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
14
Kvůli přímé podpoře sběrnice SPI mikroprocesorem Rabbit jsem pro implementaci zvolil právě tento mód a v dalších kapitolách se budu věnovat pouze jemu (nebude-li uvedeno jinak).
4.5 4.5.1
Registry MultiMedia Card v módu SPI Operating Conditions Register (OCR)
OCR je 32 bitů dlouhý registr vyplněný výrobcem karty. Na základě nastavení bitů udává povolené napájecí napětí karty MMC v rozsahu od 2,0 V do 3,6 V s krokem 0,1 V. Každý nastavený bit signalizuje funkčnost karty s tímto konkrétním napětím. Ve většině případů nemá tento registr žádné praktické využití. Z tohoto důvodu bývá u některých neznačkových karet vyplněn chybně (všechny bity jsou nastaveny). 4.5.2
Card Identification (CID) Register
CID je 128 bitů dlouhý registr určený pouze pro čtení. Jsou v něm uloženy informace o kartě a o výrobci. Bližší popis je v tabulce 1. Část Serial Numer je využívána pro adresaci při použití více karet zároveň na stejné sběrnici v módu MMC. Z hodnot READ BL LEN, C SIZE a C SIZE MULT registru CSD můžeme vypočítat hodnoty NASOBITEL (vztah 1), VELIKOST BLOKU (vztah 2), POCET BLOKU (vztah 3) a VELIKOST MMC (vztah 4). N ASOBIT EL = 2C
SIZE M U LT +2
V ELIKOST BLOKU = 2READ
, (C SIZE M U LT < 8)
BL LEN
, (READ BL LEN < 12)
(1)
(2)
P OCET BLOKU = (C SIZE + 1) ∗ N ASOBIT EL
(3)
V ELIKOST M M C = P OCET BLOKU ∗ V ELIKOST BLOKU
(4)
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
Jméno
15
Typ
Délka
Výsek
Manufacturer ID
Binární
8
[127:120]
Číslo výrobce přidělené asociací MMCA [9].
Application ID
Binární
16
[119:104]
Číslo předpokládané aplikace přidělené MMCA, může být změněno uživatelem.
Product Name
String
48
[103:56]
Jméno produktu. Nebývá vyplněno.
Product Revision
BCD
8
[55:48]
BCD kódem zakódované datum poslední revize. První 4 bity udávají tzv. major verzi a druhé dva tzv. minor verzi.
Binární
32
[47:16]
Jedinečné číslo karty. Používá se pro adresaci v módu MMC.
BCD
8
[15:8]
Datum výroby, počítáno od roku 1997. První čtyři bity udávají měsíce, další čtyři roky.
CRC7 checksum
Binární
7
[7:1]
Kontrolní součet počítaný CRC7 kódem
Nepoužit
Binární
1
[0:0]
Vždy 1
Serial Numer Manufacturing Date
Komentář asociací
Tabulka 1: Card Identification (CID) Register 4.5.3
Card Specific Data (CSD) Register
Tento 128bitový registr obsahuje všechna důležité nastavení potřebné pro přístup na paměťovou kartu a jsou tu také uloženy informace o podporovaných protokolech, maximálních přenosových rychlostech a podporovaných třídách příkazů. Dá se z něj vyčíst topologie média včetně velikosti. Důležité položky tohoto registru jsou zaneseny v tabulce 2 a podrobněji rozebrány v tabulkách 3, 4 a 5. Položka
Délka
Výsek
2
[127:126]
CSD STRUCT
Komentář Struktura CSD (viz tabulka 3).
SPEC VERS
4
[125:122]
CCC
12
[95:84]
Podporované třídy příkazů (podrobně viz tabulka 5).
Verze specifikace MMC protokolu (podrobnosti viz tabulka 4).
READ BL LEN
4
[83:80]
Udává mocninu velikost bloku (vždy 9, tedy 512 B, viz vztah 2).
C SIZE
12
[73:62]
Hodnota potřebná pro výpočet počtu bloků (viz vztah 3).
C SIZE MULT
3
[49:47]
Hodnota potřebná pro výpočet počtu bloků (viz vztah 1).
CRC7 checksum
7
[7:1]
Kontrolní součet.
Nepoužit
1
[0:0]
Vždy 1.
Tabulka 2: Card Specific Data (CSD) Register
CSD STRUCT
Verze CSD struktury
Protokol
0
CSD verze 1.0
MultiMedia Card verze 1,0 až 1,2
1
CSD verze 1.1
MultiMedia Card verze 1,4 až 2,2
Tabulka 3: Verze specifikace MMC (část CSD STRUCT registru CSD)
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
SPEC VERS
Verze MultiMedia Card protokolu
0
MultiMedia Card verze 1,0 až 1,2
1
MultiMedia Card verze 1,4
2
MultiMedia Card verze 2,0 až 2,2
Tabulka 4: Verze specifikace MMC (část SPEC VERS registru CSD) CCC bit
Podporovaná třída
0
class 0
1
class 1
2
class 2
...
...
11
class 11
Tabulka 5: Podporované třídy příkazů (část CCC registru CSD)
4.6
Příkazy MultiMedia Card v módu SPI
Veškerá komunikace s MMC kartou v SPI módu spočívá výhradně v zasílání řídících příkazů směrem z řídícího systému na sběrnici a v případném čekání na odpovědi. Příkazů je celkem 64 (0 až 63). Mnoho z nich je možno použít pouze v MMC módu a mnoho jich je rezervovaných pro budoucí využití. Odezvy (anglicky response) se označují R1, R2 a R3. Liší se významem a délkou. Prodrobněji o nich pojednává kapitola 4.7. 4.6.1
Skupiny příkazů
Příkazy SPI lze rozdělit do skupin z hlediska jejich činnosti a z hlediska zařazení do třídy kompatibility. Seznam podporovaných tříd je uveden v registru CSD (viz tabulky 2 a 5). Rozdělení podle typu: • Příkazy pro reset a inicializaci karty. • Příkazy pro čtení registrů. • Příkazy pro čtení bloku nebo bloků paměti. • Příkazy pro zápis bloku nebo bloků paměti. • Příkazy pro mazaní úseku paměti. • Příkazy pro zamykání celé karty nebo určité části datové oblasti.
16
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
17
Rozdělení podle tříd kompatibility: • CLASS 0 (základní příkazy) • CLASS 2 (čtení bloku nebo bloků paměti) • CLASS 4 (zápis bloku nebo bloků paměti) • CLASS 5 (mazání úseku paměti) • CLASS 6 (ochrana proti zápisu) • CLASS 7 (zamykání karty) Ostatní neuvedené třídy z rozsahu CLASS0 až CLASS11 nejsou podporovány v SPI módu, nebo jsou rezervovány pro budoucí využití. Začlenění příkazů do jednotlivých tříd ukazují tabulky 6 a 7. Třída
Popis třídy
0
1
9
10
0
základní příkazy
+
+
+
+
1
pouze MMC mód
2
čtení
3
pouze MMC mód
4
zápis
5
mazání úseku paměti
6
ochrana proti zápisu
7
zamykání karty
8
rezerva
9
pouze MMC mód
12
13
16
17
18
+
+
+
24
25
+
+
+ +
+
Tabulka 6: Začlenění příkazů do jednotlivých tříd, první část
Třída
Popis třídy
0
základní příkazy
1
pouze MMC mód
2
čtení
3
pouze MMC mód
4
zápis
5
mazání úseku paměti
6
ochrana proti zápisu
7
zamykání karty
8
rezerva
9
pouze MMC mód
27
28
29
30
35
36
38
42
58
59
+
+
+ + +
+
+
+
+ +
Tabulka 7: Začlenění příkazů do jednotlivých třírd, druhá část
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
4.6.2
Formát příkazů
Každý z příkazů je 48 bitů dlouhý paket, který musí být nejdříve vyplněn a následně celý odeslán MMC kartě. Rozmístění jednotlivých položek v této struktuře je přehledně zobrazeno v tabulce 8. Pozice bitů
47
46
Délka
1
Hodnota
0 start bit
Popis
[45:40]
[39:8]
[7:1]
0
1
6
1
x
32
7
1
x
x
trans. Bit
index CMD
1
argument
CRC7
stop bit
Tabulka 8: Formát příkazu CRC součet (položka CRC7) se v SPI módu nekontroluje. Poslední bajt [7:0] (tedy CRC7 i se stop bitem) musí být vždy nastaven na hodnotu 95h . Čtyři bajty velká proměnná s názvem argument slouží k předávání parametrů konkrétnímu příkazu a její využití se u každého příkazu liší. Seznam příkazů pro SPI mód je v tabulce 9 a popis jejich činnosti v tabulce 10. CMD
Odezva
Argument
Zkratka
0
R1
žádný
GO IDLE STATE
1
R1
žádný
SEND OP COND
9
R1
žádný
SEND CSD
10
R1
žádný
SEND CID
12
R1
žádný
STOP TRANSMISSION
13
R2
žádný
SEND STATUS
16
R1
[31:0] velikost bloku
SET SECTOR SIZE
17
R1
[31:0] lineární adresa
READ SINGLE BLOCK
18
R1
[31:0] lineární adresa
READ MULTIPLE BLOCK
24
R1
[31:0] lineární adresa
WRITE SINGLE BLOCK
25
R1
[31:0] lineární adresa
WRITE MULTIPLE BLOCK
27
R1
[31:0] lineární adresa
PROGRAM CSD
28
R1b
[31:0] lineární adresa
SET WRITE PROT
29
R1b
[31:0] lineární adresa
CLR WRITE PROT
30
R1b
[31:0] lineární adresa
SEND WRITE PROT
32
R1
[31:0] lineární adresa
TAG SECTOR START
33
R1
[31:0] lineární adresa
TAG SECTOR END
34
R1
[31:0] lineární adresa
UNTAG SECTOR
35
R1
[31:0] lineární adresa
TAG ERASE GROUP ST
36
R1
[31:0] lineární adresa
TAG ERASE GROUP END
37
R1
[31:0] lineární adresa
UNTAG ERASE GROUP
38
R1b
[31:0] stuff bits
ERASE
42
R1b
[31:0] stuff bits
LOCK UNLOCK
58
R3
žádný
READ OCR
59
R1
[0:0] 0 = vypnuto
CRC ON OFF
Tabulka 9: Seznam příkazů dostupných v módu SPI
18
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
CMD
Popis činnosti příkazu
0
Resetuje MMC kartu.
1
Aktivuje inicializační proceduru.
9
Žádost o zaslání registru CSD.
10
Žádost o zaslání registru CID.
12
Konec přenosu při blokovém čtení nebo zápisu.
13
Žádost o zaslání struktury o stavu karty.
16
Nastavuje velikost bloku pro čtení nebo zápis.
17
Čtení jednoho bloku.
18
Čtení bloků od zadané pozice. Přenos končí zasláním příkazu CMD12.
24
Zápis jednoho bloku.
25
Zápis bloků od zadané pozice. Přenos končí zasláním příkazu CMD12.
27
Umožňuje programovat některé z bitů v registru CSD.
28
Zapíná ochranu proti zápisu.
29
Vypíná ochranu proti zápisu.
30
Zjišťuje, zda je zapnuta ochrana proti zápisu.
32
Nastavuje první sektor určený ke smazání.
33
Nastavuje poslední sektor souvislé oblasti určený ke smazání.
34
Odznačí jeden konkrétní sektor z již označené oblasti ke smazání.
35
Nastavuje adresu poslední skupiny určené ke smazání.
36
Nastavuje adresu první skupiny určené ke smazání.
37
Odznačí jednu skupinu určenou ke smazání.
38
Smaže všechny označené sektory.
42
Používá se k zamykání a odemykání karty a k nastavení hesla.
58
Žádost o zaslání registru OCR.
59
Slouží k zapnutí/vypnutí CRC kódů při zápisu dat (ne u příkazů).
Tabulka 10: Činnost příkazů dostupných v módu SPI
4.7 4.7.1
Odezvy karty na příkazy Odezva R1
Typ odezvy R1 je odpověď na většinu příkazů. Je dlouhá jen jeden bajt. Nastavené bity (log. 1) udávají případný problém. Grafické zvýraznění rozložení jednotlivých chybových příznaků je na obrázku 8. 4.7.2
Odezva R1b
Odezva R1b je identická s odezvou R1. Rozdíl je pouze v tom, že na R1b je třeba čekat o něco (specifikací neudáno) déle, než na základní R1.
19
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
Obrázek 8: Formát odezvy R1
4.7.3
Odezva R2
Tato odezva rozšiřuje základní odezvu R1 o dalších osm bitů. I zde nastavení některého z bitů znamená chybu. Rozložení chybových příznaků je zobrazeno na obrázku 9.
Obrázek 9: Formát odezvy R2
4.7.4
Odezva R3
R3 je speciální odezva pro příkaz CMD58 (READ OCR). Je čtyřicet bitů dlouhá. Prvních osm bitů [39:32] je odezva R1. Za nimi následuje 32 bitů registru OCR (Operating Conditions Register).
20
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
4.8
Inicializace SPI módu
Ve většině publikací je uveden chybný algoritmus. Inicializovat MMC kartu do módu SPI je možné podle postupu, který je ve formě vývojového diagramu znázorněn na obrázku 10. Tento algoritmus pracuje se všemi MMC kartami, které jsem zkoušel.
Obrázek 10: Inicializace SPI módu
Na začátku je na sběrnici SPI vysláno 10 bajtů (80 bitů) s hodnotou ffh , které nastartují samotnou komunikaci po sběrnici. Poté je nastaven signál /CS MMC do log. 0 (signál /CS je aktivní v nule). Tím je vybrána příslušná karta (na jedné sběr-
21
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
nici SPI může být až několik desítek zařízení). Náslesdně je na sběrnici odeslán 5 B dlouhý příkaz GO IDLE STATE (viz kapitola 4.6.2), který kartu MMC zresetuje. Během resetování jsou na sběrnici kartou vysílány hodnoty ffh . Po provedení resetu je vrácena odezva formátu R1, která signalizuje zda nedošlo k chybě. Jakákoliv odezva odlišná od hodnoty 01h signalizuje chybu. Po zresetování je deaktivován signál /CS (nastaven do log. 1) a odeslán jeden bajt s hodnotou ffh , který slouží jako pauza pro MMC kartu. Obdobným způsobem jako reset karty MMC je provedena i její inicializace příkazem SEND OP COND. Jediným rozdílem je to, že u odezvy R1 nesmí mýt nastaven poslední bit signalizující průběh inicializace.
4.9
Nastavení velikosti bloku dat
Velikost bloku dat, který se z MMC čte, nebo na MMC zapisuje například pomocí příkazů READ SINGLE BLOCK nebo WRITE SINGLE BLOCK je třeba určit pomocí příkazu SET SECTOR SIZE. Vývojový diagram této činnosti je na obrázku 11.
Obrázek 11: Nastavení velikosti bloku dat pro I/O operace s MMC kartou
Význam jednotlivých bloků je stejný jako u inicializace SPI módu, která je popsána v kapitole 4.8 a zobrazena na obrázku 10. Nedoporučuji s nastavováním velikosti příliš experimentovat a nenastavovat jiné velikosti bloku než 512, 1024 a 2048 B.
22
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
4.10
Čtení a zápis
Čtení a zápis na MMC probíhá podle následujícího algoritmu. Pokud ještě není nastavena správná velikost bloku (viz kapitola 4.9), je nutné tak učinit před zahájením přenosu.
Obrázek 12: Čtení a zápis bloku dat MMC karty
4.11
Čtení registrů CID a CSD
Čtení registrů CID a CSD probíhá podle stejného algoritmu jako v případě čtení sektoru. Jedinou změnou je to, že není přečteno (N+2) B, kde N je nastavená velikost příkazem SET SECTOR SIZE, ale počet přečtených bajtů přímo odpovídající velikosti registru.
23
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
5
Sběrnice SPI
Sběrnice SPI (Serial Peripheral Interface) je sériové komunikační rozhraní [21], které se v mikropočítačové technice používá především pro připojení vnějších pamětí, A/D převodníků a dalších obvodů k mikrokontroléru. SPI se také používá pro vzájemnou komunikaci mezi mikrokontroléry. U některých mikrokontrolérů je SPI využíváno i pro programování jejich vnitřní paměti flash.
Obrázek 13: Celková koncepce systému se sběrnicí SPI
V systému mohou být zapojeny dva nebo více obvodů. Jeden z obvodů, obvykle procesor, je typu Master, ostatní jsou typu Slave. Jednotlivé obvody jsou propojeny čtyřmi vodiči: MOSI – Datový výstup MOSI (Master Out, Slave In) obvodu Master je připojen na vstupy MOSI všech obvodů Slave. MISO – Datový vstup MISO (Master In, Slave Out) obvodu Master je propojen s výstupy MISO všech obvodů Slave. SCK – Výstup hodinového signálu SCK je připojen na vstupy SCK všech obvodů Slave. Tento signál bývá také někdy označován jako CLK. SS – Každý obvod Slave má vstup SS (Slave Select) pro výběr obvodu. Je-li SS v neaktivní úrovni, je rozhraní SPI daného obvodu neaktivní a jeho výstup MISO je ve vysokoimpedančním stavu. Vstupy SS jednotlivých obvodů jsou
24
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
samostatnými vodiči propojeny s obvodem Master. Je-li obvodem Master mikrokontrolér, bývají tyto vodiče připojeny k některému z jeho portů. Tak lze snadno vybírat obvod, se kterým má být v daném okamžiku vedena komunikace. Tento signál bývá také někdy označován jako CS. Přenosy na sběrnici SPI probíhají vždy mezi obvodem Master a některým z obvodů Slave. Oba obvody obsahují posuvné registry, které jsou v okamžiku komunikace propojeny tak, jak je schematicky naznačeno na obrázku 14.
Obrázek 14: Propojení stanic Master a Slave
Obvod Master generuje hodinový signál, který řídí posouvání obou posuvných registrů. Klidová úroveň signálu SCK a vztah mezi datovým a hodinovým signálem je dán parametry CPOL a CPHA (viz obrázek 15). Pokud je rozhraní SPI realizováno specializovaným řadičem, je obvykle možné tyto parametry v řadiči nastavit. Je-li rozhraní SPI realizováno programově, musí být okamžiky změny úrovně datových a hodinových signálů zvoleny tak, aby přijímající obvod vzorkoval ustálená data.
Obrázek 15: Význam parametrů CPOL a CPHA na SPI
Napěťové úrovně jednotlivých signálů rozhraní SPI jsou dané použitou technologií. Maximální frekvence hodinového signálu je 2 MHz. Na obrázcích 16 a 17 je
25
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
příklad komunikace s jednoduchou sériovou pamětí při čtení a zápisu dat. Mikrokontrolér musí nejprve do paměti zapsat povel (čtení) a adresu dat. Potom jsou z paměti přečtena příslušná data. U pamětí MMC je situace o něco složitější, protože je používán složitější komunikační protokol s využitím příkazů a odpovědí, ale obecný princip zůstává zachován.
Obrázek 16: Čtení dat z paměti s rozhraním SPI
Obrázek 17: Zápis dat do paměti s rozhraním SPI
26
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
5.1
Sběrnice SPI u modulu RCM3200
5.1.1
Zapojení SPI portů
Modul RCM3200 (viz kapitola 9) disponuje čtyřmi SPI porty [22]. V tabulce 11 je zaznamenáno přiřazení signálů jednotlivým SPI portům. Signál SPI
Signál RCM3200
SCK
CLKA nebo CLKB
MOSI
TXA, TXB par. portu C nebo ATXA, ATXB par. portu D
MISO
RXA, RXB par. portu C nebo ARXA, ARXB par. portu D
/CS
Jakýkoli výstupní pin
Tabulka 11: SPI porty modulu RCM3200 V jednom okamžiku však smí být aktivní SPI kanály pouze na jednom z paralelních portů. Zároveň tedy můžeme využít maximálně dva SPI porty. 5.1.2
Funkce pro práci s SPI porty
Řízení SPI portů prohá pomocí čtyř funkcí: SPIinit() – inicializace režimu SPI SPIwrite() – zápis dat na sběrnici SPIread() – čtení dat ze sběrnice SPIWrRd() – zápis i čtení dat Výběr portu se provádí pomocí definice makra SPI SER C nebo SPI SER D: #define SPI SER C – SPI porty jsou na paralelním portu C #define SPI SER D – SPI porty jsou na paralelním portu D Příklad: #define SPI CLK D Rychlost SPI sběrnice se nastavuje definicí SPI CLK DIVISOR na hodnotu 3 až 255. Čím nižší hodnota je nastavena, tím je komunikace rychlejší. Příklad: #define SPI CLK DIVISOR 5
27
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
6 6.1
28
Kontrolní součty a CRC kódy Kontrolní součet
Kontrolní součet je hodnota získaná jednorázovým přepočtem nějakého objemu dat bajt po bajtu pomocí speciálního vzorce, sloužící ke kontrole správnosti přenosu dat. Kontrolní součet se stanoví jednorázově před přenosem dat a pošle se jako doprovodná informace s daty. Po přenosu se vypočte znovu kontrolní součet a ten se porovná s původním. Liší-li se obě čísla, nastala zřejmě chyba v přenosu. Čím více bity je vyjádřen kontrolní součet, tím je použití této metody spolehlivější [23].
6.2
CRC kódy
CRC (anglicky Cyclic Redundancy Check) je metoda kontroly správnosti přenosu nebo uložení dat, která je založena na cyklickém výpočtu kontrolního kódu z dat před přenosem a po přenosu. Existují dva běžně používané šestnáctibitové generátory CRC. Standard CCITT (zvaný CRC-CCITT) používá polynomický generátor, daný funkcí G16(x) (vztah 5) a reprezentující binární číslo 10001000000100001b . Protokol IBM zvaný SDLC využívá CRC-16 s jiným polynomem. V obou případech je pak CRC zbytek po binárním dělení daného data polynomickým generátorem. CRC-CCITT detekuje všechny jednobitové a dvoubitové chyby, všechny chyby dané lichým počtem bitů, všechny chyby dané šestnáctibitovými a menšími chybovými sekvencemi v řetězci. Znamená to detekování 99.998 % všech chyb. Pro větší datové přenosy (než 4 kB) je to už málo vyhovující, proto se používají 32 bitů dlouhé CRC, které detekují 99.999999977 % všech chyb [23]. K výpočtu stačí jednoduchý posuvný registr, který umožňuje provádění operaci XOR (tj. nonekvivalenci jednotlivých bitů) s pevně danou maskou. Hodnota této masky je jednoznačně určena generujícím polynomem [24], [25]. G16(x) = x16 + x12 + x5 + 1
(5)
U MMC karet je ke kontrole přenosu bloku dat použit CRC-CCITT 16. Pro příkazy a odezvy na tyto příkazy je v módu MMC použit CRC7 s polynomem G7 (vztah 6). V SPI módu můžou být CRC pro přenosy vypnuty příkazem CRC ON OFF. Kontrolní součet CRC7 pro příkazy se vůbec nepoužívá [11]. G7(x) = x7 + x3 + 1
(6)
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
7
Struktura disku a souborový systém FAT
7.1 7.1.1
Základní pojmy Fyzická struktura média
Každé médium může mít více povrchů (surfaces), stran (sides) a hlav (heads), přičemž počet povrchů je roven počtu hlav. Data jsou uložena v soustředných kruzích, takzvaných stopách (tracks). Cylindr (válec) je soubor všech stop určitého poloměru a na každé stopě je pevný počet sektorů. Nezáleží na vzdálenosti od středu média. Systém nepočítá s více jak 1024 cylindry (10 bitů pro adresaci cylindru). Pokud má disk více cylindrů, BIOS provede přepočet parametrů disku. Pro operační systém se pak jeví jako disk s méně cylindry, ale více povrchy, než ve skutečnosti má [27]. Je zřejmé, že pro flash paměti, které jsou zcela bez mechanických částí a pro moderní pevné disky, které mají většinou jen jednu plotnu (dva povrchy), již toto fyzické dělení pozbylo smyslu a všechny funkce jádra pracují s daty disku lineárně bez ohledu na jejich fyzické umístění. Jedinou výjimkou je služba BIOSu INT 13h , která pracuje přímo s parametry číslo hlavy (povrchu), číslo stopy a číslo sektoru. Tato služba je však ihned po natažení jádra operačního systému zakázána [2]. 7.1.2
Logická struktura média
Sektor: Každý pevný disk, disketa nebo flash disk se systémem FAT je složen ze sektorů. Jeden sektor má obvykle velikost 512 B. S jinou velikostí sektoru většina OS neumí pracovat. Velikost sektoru tedy musí být vždy 512 B. Fyzické číslování sektorů: Tento způsob číslování používá BIOS. Reprezentuje fyzické umístění sektoru na médiu. Každý sektor musí být adresován pomocí třírozměrné adresy Povrch; Stopa; Sektor. První sektor má index 1. Logické3 číslování sektorů: Logické číslování sektorů představuje lepší způsob než fyzické číslování. Využívá se v operačních systémech. Celé medium je jednorozměrné pole sektorů. U pevných disků se relativní sektory číslují od okraje media (fyzicky na povrchu 0, stopa 0 a sektor 1) až do vyčerpání všech povrchů, stop a sektorů. Sektor 0 je roven cylindru 0 3
Někdy nazývané také jako lineární či relativní.
29
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
(a zároveň stopě 0), hlavě 0 a fyzickému sektoru 1. Na rozdíl od fyzického číslování se u logického číslování indexuje vždy od 0. V následujícím textu budu používat pouze logické číslování. Cluster: Sektory jsou organizovány do clusterů. Jeden cluster obsahuje minimálně jeden sektor. Cluster je nejmenší alokovatelná jednotka ve všech strukturách souborového systému FAT. Z toho plyne, že každý soubor s nenulovou délkou musí zabírat prostor minimálně jednoho clusteru. Cluster také někdy nazýváme alokačním blokem. 7.1.3
Systém FAT
Hierarchický souborový systém: Způsob organizace souborů v operačním systému umožňující jejich hierarchické členění do struktury adresářů a podadresářů (složek). Celá souborová struktura začíná na disku kořenovým adresářem (viz root directory), který může obsahovat další adresáře a soubory, ale není podadresářem žádného jiného adresáře. Pro libovolné další adresáře pak platí, že mohou opět obsahovat soubory a podadresáře, a navíc má každý z nich jednoznačně přiřazen nadřazený adresář. Příkladem tohoto hierarchického systému je systém FAT. Tabulka obsazení disku (FAT): Speciální oblast na zformátovaném datovém médiu obsahující informace o adresářové struktuře. Z těchto informací lze odvodit, jak jsou jednotlivým souborům přiděleny alokační bloky (informaci o zaplnění disku soubory a o umístění jednotlivých souborů a jejich částí). Poprvé je vytvořena systémem při formátování média. Z důvodů bezpečnosti jsou na většině médií vytvářeny a udržovány současně dvě (obecně nF AT s) stejné kopie téže tabulky, které leží bezprostředně za sebou. Podle velikosti záznamu FAT tabulky, který popisuje jeden cluster, dělíme systémy FAT na 12bitové, 16bitové a 32bitové. Adresář (Directory): Adresář je seznam souborů a podadresářů uložených na paměťovém médiu. Způsob uspořádání těchto seznamů u běžně používaných počítačových systémů je hierarchický. U FAT se jedná o obrácenou stromovou strukturu, kde je vrcholem tzv. kořenový adresář (root directory). Z něj pak „vyrůstajíÿ ostatní adresáře, které mohou obsahovat soubory či další adresáře. Z pohledu programátora je to jeden nebo více clusterů, které mají speciální
30
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
význam. Jsou v nich uloženy informace o souborech a podadresářích které z tohoto výchozího adresáře vycházejí. Každý z clusterů tohoto adresáře je rozdělen na 32 B velké části, kterým říkáme adresářové záznamy. Každý soubor nebo adresář může zabírat několik těchto záznamů. Problematice adresářů se podrobně věnuje kapitola 8.4. Kořenový adresář (Root Directory): Je to výchozí adresář disku. Začínají v něm všechny cesty k libovolnému souboru či adresáři. U FAT12 a FAT16 má speciální umístění hned za poslední FAT tabulkou a jeho velikost je omezena na 512 adresářových záznamů (obecně nRootEnts4 ). U FAT32 je root directory běžný adresář, který začíná na clusteru určeném proměnnou RootClust4 . Datová oblast (Data Area): Část disku za root directory (popřípadě za poslední tabulkou FAT u systému FAT325 ) až do konce disku. V této oblasti jsou uloženy data souborů a adresářů.
7.2
Master Boot Record a Partition Table
Úplně první sektor pevného disku (sektor 0) obsahuje takzvaný Master Boot Record (MBR)6 , který se při bootu počítače může zavést do paměti a spustit. To, zda je rutina spuštěna, je ovlivněno nastavením bootovací sekvence v setupu počítače. Poslední část tohoto prvního sektoru obsahuje tabulku rozdělení disku (Partition Table). V této taulce jsou čtyři záznamy, z nichž je každý 16 B dlouhý. S touto tabulkou pracuje program fdisk (nebo jeho ekvivalent). Z dané struktury plyne omezení na maximálně 4 primární diskové oddíly. Omezení se obchází vytvářením takzvaných extended oddílů, které v sobě mohou sdružovat další oddíly (tzv. rozšířené oddíly). Z pohledu disku je extended partition primární disk jako každý jiný, rozdíl je v tom, že je v něm další tabulka rozdělení platná pouze v rámci tohoto rozšířeného oddílu. Hodnoty sektoru a cylinderu jsou 6bitové respektive 10bitové V okamžiku bootu zavede ROM-BIOS Master Boot Record a skočí na jeho adresu. Tato rutina přečte Partition Table a rozhodne, která partition je označena jako aktivní. Potom načte příslušný boot sektor aktivní partition do paměti a také ho spustí. 4
Ze struktury BPB (viz kapitola 8.1) U FAT32 je root directory běžný adresář (jen není omezen maximálním počtem záznamů). 6 Někdy je jako MBR označován celý sektor. 5
31
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
Posun
Velikost
000h
1beh
Obsah Rutina zavedení a spuštění boot sektoru aktivní partition
1beh
10h
Záznam 1. primární partition (viz tabulka 13)
1ceh
10h
Záznam 2. primární partition (viz tabulka 13)
1deh
10h
Záznam 3. primární partition (viz tabulka 13)
1eeh
10h
Záznam 4. partition (viz tabulka 13)
1feh
02h
Označení tabulky partition (aa55h )
Tabulka 12: Master Boot Record a Partition Table Posun
Velikost
Obsah
00h
1
Vlajka BOOTu: 0h = neaktivní, 80h = aktivní
01h
1
Začátek: číslo hlavy
02h
2
Začátek: sektor a cylinder prvního sektoru (viz tabulka 14)
04h
1
Kód systému souborů (viz tabulka 14)
05h
1
Konec: číslo hlavy
06h
2
Konec: sektor a cylinder posledního sektoru (viz tabulka 14)
08h
4
Číslo počátečního relativního sektoru (16b Lo, 16b Hi)
0ch
4
Velikost (celkem sektorů) (16b Lo, 16b Hi)
Tabulka 13: Struktura záznamu partition tabulky Je pochopitelné, že program v MBR musí obsahovat pouze volání služeb BIOSu, protože ještě není načteno jádro operačního systému. Nejdůležitější z těchto volání jsou přerušení 9h (služby klávesnice), 10h (služby obrazovky) a 13h (služby disku). 7.2.1
Zásady pro vytváření diskových oblastí:
Je několik zásad, které je třeba při vytváření nového diskového oddílu dodržet. 1. Každá oblast (mimo první) musí začínat na hranici sudých cylindrů. První partition může začínat na cylinderu 0, hlavě 0, sektoru 2 (protože sektor 1 zabírá Master Boot Record). 2. Každá oblast musí končit na hranici cylindru. 7.2.2
Základní kódy systému souborů
V tabulce 15 jsou zaneseny základní kódy systému souborů. Dnes již mají tyto údaje pouze informativní charakter, ale každý „slušnýÿ program, který rozděluje disk je alespoň přibližně nastavuje. Často se stává, že jednomu typu odpovídá mnoho různých systémů. Například typ 83h patří všem souborovým systémům, které byly psány pro operační systém Linux. V současné době jich již existuje nespočetné množství. Opakem je FAT, kde k jednomu podobnému systému připadá hned několik typů systému souborů. Typů systému souborů je samozřejmě
32
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
33
Bit
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
C/S
c
c
c
c
c
c
c
c
c
c
s
s
s
s
s
s
Tabulka 14: Začátek a konec oddílu (formát slova) Kód
Typ
Kód
Typ
00h
Neznámý typ
0bh
FAT32
01h
DOS 12-bitová FAT
0ch
FAT32 LBA
04h
DOS 16-bitová FAT
0eh
FAT16 LBA
05h
Extended partition7
0fh
Extended LBA
06h
FAT16
82h
Linux SWAP
07h
NTFS
83h
Linux Native
Tabulka 15: Základní kódy systému souborů daleko více, tohle je jen úzký výběr. Podrobnější informace lze nalézt například v manuálových stránkách programu fdisk v Linuxu. Číslo sektoru na ofsetu 08h každé partition (viz tabulka 13) je ekvivalentní hlavě, sektoru a cylindru8 počáteční adresy partition. Vztah pro výpočet adresy relativního sektoru z trojrozměrné adresy je následující: r = (ΩHc) + (Ωh) + (f − 1)
(7)
r h = ( ) mod H Ω
(8)
Nebo naopak:
c=
r ΩH
f = 1 + (r mod Ω)
(9)
(10)
V uvedených rovnicích symbol r označuje relativní sektor, f fyzický sektor, c číslo cylindru, H celkový počet hlav disku, h číslo hlavy, Ω počet sektorů na jeden cylindr, s číslo stopy a operátor mod zbytek po celočíselném dělení. V kapitole 7 bylo čerpáno z pramenů [2] a [26]. 7
Extended partition je velice důležitý souborový typ, který slouží k vytvoření tzv. rozšířené oblasti (extended partition). Ta má ten význam, že v ní mohou být zapouzdřené další oblasti. V úplně prvním sektoru (sektor 0) takové rozšířené partition je další partition tabulka (obdoba MBR), obsahující záznamy o oblastech v této rozšířené oblasti a případně odkaz na další rozšířenou oblast. 8 Této trojici se říká trojrozměrná adresa. Podrobněji viz kapitola 7.1.2.
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
8
Logický disk systému FAT
Paměťové karty Master Boot Record a Partition Tabulku neobsahují9 . Celé médium je jen jeden logický disk. Teoreticky rozdělení těchto disků na více logických oddílů sice nic nebrání, ale žádný z běžných operačních systémů tuto možnost nepodporuje. Paměťová karta (nebo logický disk hard disku) má následující strukturu: 1. Boot Record a rezervované sektory 2. Záznam FSI (přítomen pouze u FAT32) 3. První FAT 4. Druhá FAT 5. Root adresář (u FAT32 není) 6. Pole dat (zde jsou veškerá data, včetně adresářových záznamů)
8.1 8.1.1
Boot Record logického disku Bios Parameter Block (BPB)
Na rozdíl od předešlých částí kapitoly 7, které byly psány obecně pro IBM-PC kompatibilní souborové systémy, se následující část bude týkat pouze souborových systémů FAT12, FAT16 a FAT32. Boot sektor (relativní sektor 0) logického disku se souborovým systémem FAT obsahuje dvě struktury. První z nich se jmenuje BPB (Bios Parameter Block). Její obsah je zobrazen v tabulce 16. Druhá se jmenuje Extended Bios Parameter Block (EBPB) a popisuje ji kapitola 8.1.2. 8.1.2
Extended Bios Parameter Block (EBPB)
Hned za základní strukturou BPB, která je pro všechny systémy FAT stejná, následuje takzvaný rozšířený blok BPB (Extended Bios Parameter Block). Ten se pro FAT12/FAT16 a FAT32 liší. EBPB pro FAT12 a FAT16 je uveden v tabulce 17 a pro FAT32 v tabulce 18. 9
Stejně jako například diskety, kazetopáskové nebo CD-ROM média.
34
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
Posun
Velikost
Označení
00h
3
jmpBoot
Skok na začátek rutiny bootu Název výrobce (OEM)
35
Obsah
03h
8
oemname
0bh
2
nBytesPerSec
Počet bytů na jeden sektor (vždy 512)
0dh
1
nSecPerClust
Počet sektorů na jeden cluster
0eh
2
nSecRes
10h
1
nFATs
Počet rezervovaných sektorů (počet sektorů před první FAT)
11h
2
nRootEnts
Max. počet adresářových položek root adresáře u FAT12 nebo FAT16. U FAT32 musí být nastavena 0.
13h
2
nSecs16
Celkový počet sektorů logického disku (u velkých disků je nastavena 0)
15h
1
mDesc
Deskriptor média (f8h pro HDD)
16h
2
nSecPerFat16
Počet sektorů na jednu FAT. U FAT32 musí být nastavena 0.
18h
2
nSecPerTrack
Počet sektorů na stopě (cylinder)
1ah
2
nHeads
1eh
4
nSecHidden
Speciální skryté sektory (u disku je to velikost předchozích oblastí)
20h
4
nSecs32
Celkový počet sektorů logického disku (jen pro FAT32, pro FAT16 platí hodnota nSecs16)
Počet FAT tabulek (vždy 2)
Počet záznamových hlav (povrchů)
Tabulka 16: Bios Parameter Block Posun
Velikost
Označení
Obsah
24h
1
DriveNum
Dnes již nevyužívaná hodnota, dříve hodnota udávající typ média
25h
1
nResByte
Rezervovaný bajt
26h
1
BootSig
Signatura rozšířeného Boot sektoru (29h )
27h
4
SerNum
Sériové číslo svazku (např. sériové číslo (1234–89ab)h je uloženo jako abh 89h 34h 12h )
2bh
11
VolName
Název svazku (doplněný mezerami)
36h
8
FSType
Název systému souboru (například FAT16)
Tabulka 17: Extended Bios Parameter Block pro FAT12 a FAT16 8.1.3
Načtení základních údajů z BPB a z Extended BPB
Kompletní záznam BPB je složen ze dvou částí. První z nich, kterou nazýváme jen BPB, je shodná pro všechny souborové systémy FAT. Druhá část je pro FAT12/FAT16 a pro FAT32 rozdílná. Z kompletní struktury BPB musíme určit několik základních hodnot. Především nás bude zajímat velikost jedné FAT (v sektorech), celkový počet sektorů logického disku, počet sektorů, které obsazuje root adresář, celkový počet sektorů použitelných k uložení dat a tomu odpovídající počty clusterů. Velikost jedné FAT tabulky je číslo, které udává počet sektorů potřebných k uložení informací o všech clusterech datové oblasti disku. (
velikost F AT =
nSecP erF at16 pro nSecP erF at16 6= 0 nSecP erF at32 pro nSecP erF at16 = 0
(11)
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
36
Posun
Velikost
Označení
24h
4
nSecPerFat32
Obsah
28h
2
ExtFlags
2ah
2
FSVer
2eh
4
RootClust
30h
2
FSInfo
32h
2
BkBootSec
34h
12
Reserved
Rezervované místo
40h
1
DriveNum
Fyzické číslo disku
41h
1
Reserved1
Rezervovaný bajt
42h
1
BootSig
Signatura rozšířeného boot-sektoru (Extended Boot Record Signature)
43h
4
SerNum
Sériové číslo svazku (např. sériové číslo (1234–89ab)h je uloženo jako abh 89h 34h 12h )
47h
11
VolName
Název svazku (doplněný mezerami)
52h
8
FSType
Název systému souboru (např. FAT32)
Počet sektorů na jednu FAT tabulku. Nastavení příslušných bitů umožňuje vypnutí klonování FAT tabulek (standardní hodnota je 0–klonují se všechny FAT) Číslo verze souborového systému FAT (vždy 0 – verze 0:0) Číslo clusteru na kterém začíná root adresář Udává polohu sektoru se strukturou FSI (obvykle 1 – hned za BPB) Číslo sektoru se zálohou Boot sektoru
Tabulka 18: Extended Bios Parameter Block pro FAT32 Tento nestandardní postup určování velikosti FAT i jiných hodnot (viz dále) vyplývá ze špatného navržení všech datových struktur systému FAT12 a ze snahy o udržení zpětné kompatibility v novějších verzích. Obdobně jako velikost F AT určíme i celkový počet sektorů a clusterů na médiu (nebo logickém disku). (
celkovy pocet sektoru =
celkovy pocet clusteru =
nSecs16 pro nSecs16 6= 0 nSecs32 pro nSecs16 = 0
(celkovy pocet sektoru + nSecP erClust − 1) nSecP erClust
(12)
(13)
Počet sektorů a clusterů, který zabírá root adresář u FAT12 nebo FAT16 spočítáme podle vztahů 14 a 15. (
pocet sektoru rootu =
pocet clusteru rootu = 10
((32·nRootEnts)+(nBytesP erSec−1)) nBytesP erSec
0
pro FAT12/16 pro FAT3210
(pocet sektoru rootu + nSecP erClust − 1) nSecP erClust
(14)
(15)
U FAT32 není na root adresář vyhrazeno žádné místo. Root je klasický adresář, který začíná na clusteru RootClust.
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
37
První datový sektor leží za rezervovanými sektory, za všemi FAT (vždy dvě) a za root adresářem (je-li přítomen). Výpočet tedy provedeme dle vztahu 16.
prvni datovy sektor11 = nSecRes+(nF AT s·velikost F AT )+pocet sektoru rootu (16) Počet datových sektorů a clusterů určíme potom následovně:
pocet datovych sektoru = celkovy pocet sektoru − prvni datovy sektor
pocet datovych clusteru =
(17)
(pocet datovych sektoru + nSecP erClust − 1) (18) nSecP erClust
Proměnné nSecs16, nSecs32, nF AT s, nBytesP erSec, nRootEnts a RootClust, které se vyskytují ve vzorcích, jsou položky z BPB nebo z Extended BPB.
8.2
Alokační tabulka souborů (FAT)
FAT je lineární tabulka, kterou OS používá pro udržení informací o fyzické pozici dat na disku a pro nalezení volného místa na uložení nových souborů. 8.2.1
Typy souborového systému FAT
Každá FAT tabulka se skládá z 12bitových (FAT12), 16bitových (FAT16) nebo 32bitových (FAT32) položek. První dva typy se liší pouze velikostí jedné položky. Naproti tomu FAT32 přináší několik vylepšení. FAT12 – Je velmi efektivní pro média s kapacitou menší než 384 kB, protože se celá FAT tabulka vejde do jednoho sektoru o velikosti 512 B. Každý záznam ve FAT12 má velikost 12 bitů. Z toho plyne, že adresový prostor FAT12 je omezen na 4096 clusterů (212 ). Je to nejstarší (a dnes již nejméně používaný) typ souborového systému FAT. FAT16 – Adresový rozsah FAT16 je 65536 (216 ) clusterů. FAT tabulka může zabírat maximálně 128 kB ( 2·65536 ). Maximální velikost disku při 32 kB clusterech je 1024 tedy 2048 MB. 11
Jeho index je roven nule, stejně jako je tomu u každého logicky číslovaného sektoru.
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
FAT32 – S příchodem operačního systému Windows 95 OSR2 se začal používat souborový systém FAT32. Ten využívá 32-bitového záznamu v tabulce FAT. Díky tomu je možné adresovat až (232 ) clusterů. Výhodou je možnost použití výrazně větších logických disků a možnost snížit velikost clusteru třeba až na velikost jednoho sektoru. To nám přinese úsporu místa při ukládání velkého množství malých souborů. Na druhou stranu by nám velká FAT tabulka způsobila výrazné zpomalení při jejím procházení. Zejména při hledání volného clusteru pro uložení nového souboru na zaplněnějším disku, nebo při zjišťování volného místa. V tom případě bychom museli procházet velkou část (nebo dokonce celou) tabulku FAT. Z tohoto důvodu bylo zavedeno nové rozšíření, které se jmenuje FSI (File System Info) a které tyto výkonnostní problémy řeší. Podrobně tuto strukturu popisuje kapitola 8.3. 8.2.2
Určení typu FAT
Při inicializaci práce se souborovým systémem FAT je nutné nejprve určit jeho typ. Typ souborového systému je sice zanesen v tabulce 17 a 18 (ve struktuře EBPB) pod označením FSType, ale podle materiálu firmy Microsoft je tento údaj pouze informativní a skutečný typ je nutné určit podle počtu clusterů. Tuto závislost udává vztah 19. F AT 12
pro celkovy pocet clusteru < 4085 typ F AT = F AT 16 pro celkovy pocet clusteru v rozsahu h4085; 65524i (19) F AT 32 pro celkovy pocet clusteru > 65524 8.2.3
Obsah FAT
Jak již bylo řečeno, FAT tabulka je souvislá oblast disku, která obsahuje informace o tom, jak jsou jednotlivým souborům nebo adresářům přiděleny alokační bloky (datové clustery). Každému datovému clusteru disku musí příslušet jedna položka o velikosti 12, 16 nebo 32 bitů. Minimální platné číslo datového clusteru je 2 (clustery 0 a 1 jsou vynechány)12 . Počet položek ve FAT tedy musí být o 2 větší než je skutečný počet datových clusterů. Při vytváření FAT (v průběhu formátování) je nutno na tuto skutečnost pamatovat, protože to může (ve speciálních případech) ovlivnit počet sektorů, který FAT tabulka zabírá. 12
Dnes pravděpodobně netuší proč tomu tak je ani firma Microsoft. Jen kvůli tomu, aby první bajt FAT mohl být tzv. deskriptor média, který stejně nemá žádný smysl, jistě ne.
38
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
Úplně první bajt FAT se nazývá deskriptor média nebo též identifikační bajt FAT. Musí být stejný jako proměnná mDesc v záznamu BPB (viz tabulka 16). Zbytek tabulky FAT, který by za normálních okolností zaujímaly položky 0 a 1, je vyplněn log. 1. Užitečná část FAT tabulky se skládá z dvanácti, šestnácti nebo třicetidvoubitových záznamů. Každý z nich reprezentuje jeden cluster disku. Takže například záznam s pořadovým číslem 2 (číslováno od 0) je první platný záznam FAT a popisuje první (index 0) datový cluster disku. Záznam s číslem 3 leží o 32 bitů dál (pro FAT32) a vypovídá o datovém clusteru s indexem 1 (tedy druhém datovém clusteru). Tabulka 19 obsahuje všechny přípustné hodnoty záznamu pro FAT12. Hodnota záznamu od
do
znamená
000h
-
002h
fefh
číslo clusteru další buňky řetězu
volný cluster
ff0h
ff6h
jinak obsazený cluster
ff7h
-
ff8h
fffh
špatný cluster konec alokačního řetězu
Tabulka 19: Záznam FAT12 Tabulka 20 obsahuje všechny přípustné hodnoty záznamu pro FAT16. Hodnota záznamu od
do
znamená
0000h
-
0002h
ffefh
číslo clusteru další buňky řetězu
volný cluster
fff0h
fff6h
jinak obsazený cluster
fff7h
-
fff8h
ffffh
špatný cluster konec alokačního řetězu
Tabulka 20: Záznam FAT16 Tabulka 21 obsahuje všechny přípustné hodnoty záznamu pro FAT32. Hodnota záznamu od
do
00000000h
-
znamená
00000002h
ffffffefh
číslo clusteru další buňky řetězu
fffffff0h
fffffff6h
jinak obsazený cluster
fffffff7h
-
fffffff8h
ffffffffh
volný cluster
špatný cluster konec alokačního řetězu
Tabulka 21: Záznam FAT32
39
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
8.2.4
Sledování řetězce FAT
Mějme například soubor TESTY01.TXT, který začíná na datovém clusteru s indexem 8h . Číslo počátečního clusteru jsme přečetli ze SFNE záznamu v adresářové struktuře (viz tabulka 24). Podrobnosti o adresářových záznamech budou uvedeny v kapitole 8.4. Zatím se spokojíme jen s tím, že na clusteru 8h opravdu začíná. Princip čtení je ukázán na obrázku 18.
Obrázek 18: Způsob čtení z FAT
Co všechno můžeme z obrázku 18 vyčíst: • Soubor TESTY01.TXT na disku zabírá 10 clusterů. První bajt tohoto souboru je na clusteru 8h a poslední je na clusteru 1bh . Řetěz je 8h , 9h , ah , bh , 15h , 16h , 17h , 19h , 1ah a 1bh . Každý záznam ukazuje na další záznam v řetězu. Poslední záznam obsahuje speciální hodnotu konce alokačního řetězce (End Of File). • Jeho velikost musí být v rozsahu (9 · 512 · nSecP erClust ; 10 · 512 · nSecP erClustiB. • Cluster 18h je označen jako špatný a není článkem řetězu. • Clustery 6h , 7h , ch –14h a 1h –1fh jsou prázdné, připravené k použití. • Na disku je ještě volné místo. • Další řetěz začíná na clusteru 2h a končí na clusteru 5h . Abyste zjistili jméno tohoto souboru nebo adresáře, museli byste prohledat všechny záznamy adresáře na disku a najít takovou položku, která bude mít svůj počáteční cluster nastaven na hodnotu 2h . Tento postup naštěstí není využíván.
40
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
41
• První záznam (cluster 0h ) je vždy tzv. deskriptor média. • Druhý záznam (cluster 1h ) musí být vždy vyplněn log. 1 (například ffffh pro FAT16). • Je-li souborový systém FAT32, pak by měla mít proměnná F irstF reeCluster ze struktury FSI (viz tabulka 22) hodnotu 6h . 8.2.5
Převod čísla clusteru na číslo sektoru
Takže víme, že první cluster datové oblasti má index 2 a také víme, že datová oblast začíná za root adresářem13 . Z těchto informací můžeme spočítat polohu libovolného datového clusteru vzhledem k počátku disku. Získanou hodnotu pak předáme přímo funkci pro nízkoúrovňové čtení nebo zápis sektorů. Matematicky je tento výpočet popsán vztahem 20.
sektor14 = prvni datovy sektor + ((cislo clusteru − 2) · nSecP erClust)
8.3
(20)
File System Info (FSI)
File System Info (FSI) je rozšíření, které bylo přidáno u systému FAT32. Je to struktura, která začíná na zvláštním sektoru a její pozice je udána proměnnou F SInf o ze struktury EBPB (viz tabulka 18). Většinou se jedná o sektor umístěný bezprostředně za sektorem BPB (za prvním sektorem). Hlavním důvodem přidání této struktury je zrychlení vyhledávání prvního volného clusteru pro nově ukládaná data a zrychlení výpočtu volného místa. U systému FAT12 tato struktura nebyla potřeba, protože tabulka FAT byla malá a nebyl problém ji velmi rychle celou prohledat. U systému FAT16 se dělaly poměrně velké clustery, které velikost FAT opět zmenšovaly. Tyto velké clustery však byly velmi neefektivní pro ukládání malých souborů, protože každý soubor s nenulovou délkou zaplní celistvý násobek počtu clusterů. Takový soubor tedy zabírá nejméně jeden cluster například o velikosti 32 kB i když je jeho skutečná délka třeba jen 1 B. O souborech s nulovou délku bude řeč v kapitole 8.4. 13
Popřípadě za poslední FAT tabulkou, jedná-li se o systém FAT32, kde není root adresář přítomen. 14 V případě, že by na médiu bylo více logických disků, je samozřejmě nezbytné k výsledku vztahu 20 nebo 16 přičíst ještě počet sektorů od začátku média k začátku logického disku.
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
Podobná situace je i v případě adresářů. Každý z adresářů (včetně prázdných15 ) zabere také prostor minimálně jednoho clusteru. Posun
Velikost
Označení
Obsah
0h
4
LeadSig
4h
480
Reserved1
Označení struktury FSI (41615252h ). Rezervovaný prostor. Musí být vynulován.
1e4h
4
StrucSig
Další označení struktury FSI (61417272h ).
1e8h
4
Free Count
1ech
4
Next Free
První volný cluster disku.
1f0h
12
Reserved2
Další rezervovaný prostor. Musí být vynulován.
Počet volných clusterů disku.
Tabulka 22: File System Info
Free Count – Počet volných clusterů je obsažen v proměnné F ree Count. Je-li tato hodnota nastavena na hodnotu fffffffh , tak jejich počet neznáme a je třeba je znovu spočítat. Next Free – Číslo clusteru od kterého probíhá hledání volného datového clusteru je uloženo v proměnné N ext F ree. Není-li tato hodnota známa, pak je proměnná N ext F ree nastavena na hodnotu ffffffffh a je třeba provést hledání od prvního datového clusteru (od clusteru s indexem 2). Je-li již cluster s indexem N ext F ree obsazen, je provedeno hledání volného clusteru směrem od N ext F ree + 1 do konce média a následně od hodnoty 2 opět do hodnoty N ext F ree − 1. Je-li cluster nalezen, tak je hodnota N ext F ree nastavena na index tohoto nově nalezeného clusteru. V opačném případě nastavíme proměnnou F ree Count na 016 .
8.4
Adresář
Jak již bylo napsáno v úvodu, adresáře slouží ke strukturovanému ukládání souborů na disku. Každý adresář může obsahovat soubory a jiné podadresáře. Této struktuře adresářů a souborů říkáme adresářový strom (anglicky directory tree). Původní verze systémů FAT dokázaly jméno každého souboru nebo adresáře uchovávat ve tvaru 8 + 3. Tedy 8 znaků pro základ jména a 3 znaky pro příponu. Výběr znaků byl navíc značně limitován. Jméno nesmělo obsahovat prakticky nic mimo velkých znaků anglické abecedy a několik speciálních znaků. Nové rozšíření k systému FAT16 (a později i k FAT32), které dovolovalo uložení jména dlouhého 15
Žádný adresář není vlastně úplně prázdný, protože obsahuje odkaz sám na sebe a na svůj nadřazený adresář (viz kapitola 8.4.1). 16 Je plný disk, žádný volný cluster.
42
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
43
až 256 znaků a podporu UNICODE (viz kapitola 8.8) bylo přídáno až s příchodem operačního systému Windows 95. Každý adresář tvoří jeden či více clusterů, které jsou rozděleny na 32 B velké záznamy (anglicky File Name Entry). Více clusterů adresáře opět (jako u souborů) tvoří řetězec ve FAT tabulce. Každý ze záznamů může obsahovat informaci o jednom objektu. Pod pojmem objekt rozumíme krátký název souboru, krátký název adresáře, jméno disku (anglicky label) a dlouhou část jména souboru nebo adresáře. Podrobně budou záznamy popsány v kapitole 8.4.3. Adresáře lze rozdělit na dva základní druhy: 1. Běžný adresář 2. Root adresář 8.4.1
Běžný adresář
Běžné adresáře vznikají až když jsou potřeba. Jejich množství není omezeno. Jediným limitujícím faktorem je velikost disku. Na rozdíl od root adresáře musí každý nový adresář obsahovat adresář „.ÿ, který ukazuje sám na sebe a adresář „. .ÿ, který ukazuje na první cluster nadřazeného adresáře. 8.4.2
Root adresář
Každý root (česky kořenový) adresář vzniká při formátování disku a je na rozdíl od běžného adresáře prázdný. Je to základní adresář disku. Na každém disku je právě jeden root adresář. Jsou v něm uloženy informace o souborech a adresářích, které z kořenového adresáře bezprostředně vycházejí. Z tohoto adresáře musí vycházet všechny cesty k libovolnému souboru nebo jinému adresáři na disku. Root adresář se opět liší pro FAT12/FAT16 a pro FAT32. Root adresář systému FAT12 a FAT16: U těchto systémů leží kořenový adresář hned za poslední (téměř ve všech případech za druhou) FAT. Počet záznamů je omezen hodnotou nRootEnts (vždy 512) z BPB (viz tabulka 16). Je to tedy speciální případ adresáře, který má pevně udanou velikost i polohu. Jeho polohu spočítáme z hodnot struktury BPB podle vztahu 21. prvni sektor rootu = nSecRes + (nF AT s · nSecP erF at16)
(21)
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
44
Root adresář systému FAT32: Root adresář systému FAT32 je podobný běžnému adresáři. Jedinou výjimkou je to, že jeho poloha (respektive poloha prvního clusteru) je udána hodnotou RootClust v Extended BPB (viz tabulka 18) a že je po vytvoření formátovacím programem prázdný. Tento adresář není na rozdíl od root adresáře u FAT12 a u FAT16 omezen na pevný počet záznamů. prvni sektor rootu = RootClust 8.4.3
(22)
Adresářový záznam
Adresářový záznam je 32 B velká struktura, které říkáme File Name Entry (FNE)17 . Rozdělují se na SFNE (Short FNE) a na LFNE (Long FNE). Původní SFNE záznam umožňuje uložit jméno souboru nebo adresáře ve tvaru 8+3. V LFNE záznamech je uloženo kompletní dlouhé jméno v UNICODE kódování. Mimo tento dlouhý název je vždy zkrácené jméno objektu uloženo ještě ve formátu 8 + 3 pro zachování kompatibility se staršími programy, které dlouhé názvy neznaly. V původních verzích souborového systému FAT existovaly pouze záznamy typu SFNE. LFNE záznamy mají nastaven speciální atribut LON G F ILEN AM E, podle kterého je lze jednoznačně identifikovat. Tento atribut starší programy pracující se systémem FAT neznaly a proto je ignorují. Naopak nové programy ignorují zkrácené jméno ze záznamu SFNE. V tabulce 23 je seznam všech povolených atributů. Maska
Zkratka
00h
NORMAL
01h
READ ONLY
02h
HIDDEN
Skrytý objekt.
04h
SYSTEM
Systémový objekt.
08h
VOLUME ID
0fh
LONG FILENAME
10h
DIRECTORY
20h
ARCHIVE
Popis Normální soubor (není-li nastaven žádný bit). Objekt je pouze pro čtení.
Jméno disku (volume label). Záznam je typu LFNE (nastaveny nejnižší 4 bity). Objekt je adresář. Objekt je určen k archivaci.
Tabulka 23: Atributy objektů Krátký záznam adresáře (SFNE): Krátký záznam adresáře byl jediný možný druh záznamu použitelný pro uložení jména objektu v dobách kdy na souborovém systému FAT ještě nebyly dlouhé názvy. 17
Česky záznam adresáře.
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
Dnes se používá pro ukládání informací o objektech, jejichž název splňuje podmínky uložení do SFNE (viz kapitola 8.5) a jako nositel informace u objektů s dlouhým jménem. Struktura tohoto záznamu je v tabulce 24. Posun
Velikost
00h
8
Obsah Základ jména.
08h
3
Přípona jména.
0bh
1
Atribut.
0ch
2
Rezervovaná část pro budoucí využití.
0eh
2
Čas vytvoření objektu.
10h
2
Datum vytvoření objektu.
12h
2
Další rezervovaná část.
14h
2
Číslo prvního clusteru v řetězci FAT (16b Hi).
16h
2
Čas poslední modifikace (zápisu).
18h
2
Datum poslední modifikace (zápisu).
1ah
2
Číslo prvního clusteru v řetězci FAT (16b Lo).
1ch
4
Velikost objektu v bajtech.
Tabulka 24: Adresářový záznam SFNE
Dlouhý záznam adresáře (LFNE): Dlouhý záznam adresáře je rozšířením FAT o dlouhé názvy s ohledem na obousměrnou kompatibilitu. Používá se tam, kde pro uložení jména objektu nestačí 8 znaků a pro příponu 3 znaky, nebo jméno nesplňuje jiný požadavek kladený na SFNE. Struktura LFNE záznamu adresáře je uvedena v tabulce 25. Posun
Velikost
00h
1
Pořadové číslo záznamu pro jednotlivé objekty.
Obsah
01h
10
První část unicode jména.
0bh
1
Atribut.
0ch
1
Rezervovaná část pro budoucí využití.
0dh
1
Kontrolní součet.
0eh
12
Druhá část unicode jména.
1ah
2
Číslo prvního clusteru v řetězci FAT (16b Lo) (vždy 0).
1ch
4
Třetí část unicode jména.
Tabulka 25: Adresářový záznam LFNE
45
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
Formát časových údajů: Byte
MSB
LSB
Struktura
hhhhhmmm
mmmsssss
Tabulka 26: Formát časových údajů Formát času je uveden v tabulce 26. Vzor hhhhh udává číslo 0-23 (hodiny), mmmmmm číslo 0-59 (minuty) a sssss 0-29 (sekundy/2). Čas je uložen v pořadí LSB, MSB. Formát datumů: Byte
MSB
LSB
Struktura
rrrrrrrm
mmmddddd
Tabulka 27: Formát data Formát datumů je uveden v tabulce 27. Vzor rrrrrrr udává číslo 0-119 (rok od 1980), mmmm číslo 1-12 (měsíc) a ddddd je 1-31 (den). Datum je stejně jako čas uložen v pořadí LSB, MSB. Kontrolní součet je generován pomocí následujícího algoritmu:
for (sum = i = 0; i < 11; i++) { sum = (((sum & 1) << 7) | ((sum & 0xfe) >> 1)) + name[i]; } 8.4.4
Speciální adresářové záznamy
V tabulce 28 jsou všechny možnosti nastavení prvního bajtu libovolného záznamu. Podle tohoto bajtu můžeme blíže specifikovat jestli je záznam aktivní, smazaný nebo nikdy nebyl použit. Zdánlivě zbytečné rozlišování na prázdné (dosud nepoužité) a smazané záznamy slouží ke zrychlení průchodu adresáře. O této problematice píše kapitola 8.5. Nepoužitý záznam adresáře: Nepoužitý záznam adresáře vzniká při vytváření nového adresáře nebo při rozšiřování starého o další adresářový cluster. Každý nový adresářový cluster je nutné nejprve naformátovat. Proces formátování spočívá v tom, že je celý cluster vynulován, nebo je na hodnotu 00h nastaven alespoň první bajt každého záznamu.
46
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
Hodnota
Zkratka
00h
SLOT EMPTY
Popis
e5h
SLOT DELETED
ostatní
-
05h
SLOT E5
Slot ještě nikdy nebyl použit. Slot je smazaný, ale již byl někdy použit. Slot je platný. Slot je také platný, ale prvním znakem jména je e5h . Proto je nahrazen za 05h . Při nenahrazení bychom záznam brali jako smazaný.
Tabulka 28: První bajt libovolného záznamu Bez této inicializace by v adresářovém clusteru mohly být pozůstatky starých dat. Rozdíl oproti smazanému záznamu je takový, že za nepoužitým záznamem již nesmí být žádné aktivní, protože při nalezení prvního nepoužitého záznamu je další prohledávání adresáře ukončeno. Smazaný záznam adresáře: Při mazání adresářového záznamu je první bajt tohoto záznamu nastaven na hodnotu e5h .
8.5
Uložení souborů a adresářů do nadřazeného adresáře
Postup při ukládání souboru nebo adresáře se liší podle toho, jestli ukládané jméno splňuje požadavky uložení do jednoho záznamu SFNE, nebo jestli tyto požadavky nesplňuje. Požadavky na uložení do jednoho SFNE jsou následující: Základ jména musí být dlouhý nanejvýš 8 znaků, musí být složený jen z čísel, velkých znaků anglické abecedy, ze znaků v tabulce 29 nebo ze znaku ˜ , který má důležité postavení při zkracování dlouhého jména. $
%
’
-
@
‘
!
(
)
{
}
#
&
Tabulka 29: Znaky povolené v záznamu SFNE Přípona musí být dlouhá nanejvýš 3 znaky a musí být složená ze stejných znaků jako základní jméno. 8.5.1
Uložení souboru nebo adresáře s krátkým jménem
Při splnění výše uvedených požadavků je možné jméno uložit pouze do jednoho SFNE záznamu. V tomto záznamu musíme dále vyplnit odkaz na první datový cluster. Chceme-li vytvářet soubor s nulovou délkou, tak stačí použít hodnotu 00h a
47
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
konkrétní datový cluster se souboru přiřadí až před zápisem dat do tohoto souboru. Častěji však vytváříme soubor, do kterého budeme chtít něco zapisovat a proto mu hned přiřadíme datový cluster. U adresáře je nutné nový cluster záznamu přiřadit vždy a navíc je potřeba tento cluster naformátovat a vytvořit v něm adresáře „.ÿ a „. .ÿ. Tyto speciální adresáře jsou specifické, protože nemají přidělen žádný vlastní cluster, ale ukazují na sebe sama v případě „.ÿ nebo na nadřazený adresář v případě „. .ÿ. Příklad: Vytvoříme například podadresář „PODÿ v adresáři „NADÿ. Adresář „NADÿ je přímo v kořenovém adresáři disku. Adresáři „NADÿ je přidělen cluster číslo 100 a adresáři „PODÿ cluster 150. V Každém z těchto dvou adresářů musí být ješte odkaz na nadřazený adresář a odkaz na sebe sama. V adresáři „PODÿ ukazuje „.ÿ na cluster 150 a „. .ÿ na 100. V adresáři „NADÿ „.ÿ na 100 a „.ÿ na 0. Alokace nového clusteru se provádí tak, že se prochází FAT tabulka a hledá se prázdný cluster. U systému FAT32 se začíná FAT tabulka prohledavat od záznamu N ext F ree18 . Při nalezení volného clusteru je tento cluster ve FAT označen koncem alokačního řetezce a jeho index je zapsán do struktury SFNE. Dále je nutné vyplnit správný atribut, položky týkající se datumu a času a nastavit nulovou délku. Tím jsme vypnili celou strukturu SFNE (tabulka 24) a nezbývá nám, než tuto strukturu zapsat na první volnou19 pozici v příslušném adresáři. Na obrázku 19 je znázorněna tipická struktura běžného adresáře včetně jednoho dlouhého jména. 8.5.2
Uložení souboru nebo adresáře s dlouhým jménem
Naopak, nejsou-li podmínky pro uložení do jednoho SFNE splněny, například protože jméno obsahuje mezery nebo diakritiku, je nutné jméno uložit do jednoho SFNE záznamu a několika záznamů LFNE. V LFNE záznamech je uloženo dlouhé jméno a v záznamu SFNE je uložena informace o počátečním clusteru, datu vytvoření, času vytvoření, datu poslední modifikace a času poslední modifikace. Dlouhé jméno je rozděleno na 13B velké části a každá z těchto částí je uložena do jednoho LFNE záznamu. Každý bajt původního jména v lokálním kódování je ještě před zapsáním převeden na znak UNICODE. Tyto záznamy jsou pak očíslovány 18 19
Ze struktury BPB (viz kapitola 8.3) Volné pozice jsou ty, které jsou smazané nebo jsou nepoužité.
48
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
Obrázek 19: Struktura adresáře
a v opačném pořadí uloženy do adresáře. První záznam20 má číslo 1, předposlední N −1 a poslední N +64. Maska 64 (40h ) signalizuje první21 záznam dlouhého jména. Bezprostředně za těmito záznamy následuje jeden záznam SFNE, který má pro zachování kompatibility vyplněno zkrácené jméno a jsou v něm také uloženy informace, které v LFNE záznamech chybí. Je bezpodmínečně nutné, aby všechny záznamy patřící k jednomu objektu ležely za sebou. Pokud již v adresáři není volné místo pro uložení dalších záznamů, tak je nutné do řetězce FAT přidat další cluster. Naopak záznamy jednoho objektu můžou začínat v jednom clusteru a končit v clusteru následujícím. Zkrácené jméno se tvoří tak, že se nejprve z dlouhého jména odstaní diakritika a celé jméno se převede na velké ASCII znaky. V dalším kroku se vynechají znaky, které nesmí být v SFNE záznamu. Následně se odstraní všechny počáteční a koncové mezery. Prvních 8 znaků z takto upraveného dlouhého jména se uloží do datové struktury SFNE jako základ jména a další 3 znaky se uloží jako přípona22 . Nakonec základu jména se přidá znak „˜ÿ a unikátní23 index24 . Tento záznam se doplní o zbytek proměnných a uloží se za LFNE záznamy s dlouhým jménem. 20
Naposledy uložený. První z pohledu čtení z adresáře. Ve skutečnosti poslední část jména. 22 U dlouhých názvů souborů se již jméno nerozlišuje na základ a na příponu. 23 V adresáři nesmí existovat dva SFNE záznamy se stejným indexem. 24 Základ jména samozřejmě nesmí přesáhnout délku 8 znaků. 21
49
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
8.6
Soubor
Z uživatelského pohledu je soubor posloupnost bajtů uložená na záznamovém médiu pod označením, které ji přiřadil uživatel nebo systém. Soubor je v jistém smyslu základní datovou jednotkou. Podle toho, jaké obsahuje soubor informace, hovoříme o pojmu typ souboru. Známými typy jsou např. textové soubory, databázové soubory, programové soubory, obrazové a zvukové soubory atd. Kromě typu souboru rozlišujeme i jeho formát, což je vnitřní způsob uspořádání dat. Pro vnější rozlišení formátů souborů (potažmo typů) se ve většině operačních systémů používá přípona, což je součást názvu souboru. U systému FAT se extenze připojuje za jméno souboru a její délka je omezena na tři znaky. Z programátorského pohledu je soubor úsek25 disku, který zabírá nejméně jeden cluster v datové oblasti. Každý soubor musí být logicky umístěn v nějakém adresáři a právě v tomto adresáři je na tento soubor odkaz prostřednicvím záznamu SFNE a jeho případné dlouhé jméno je uloženo v několika záznamech LFNE předcházejících SFNE.
8.7
Jméno disku
Jméno disku (lépe řečeno oddílu) může být nastaveno ve struktuře Extended BPB (hodnota V olN ame), nebo může být v root adresáři vytvořen SFNE záznam s atributem V OLU M E ID. V obou případech smí být jméno disku pouze 11 znaků dlouhé. Vejde se tedy do jednoho záznamu adresáře (8 + 3). Takto nastavené jméno disku má vyšší prioritu než jméno nastavené hodnotou V olN ame ve struktuře Extended BPB.
8.8 8.8.1
Unicode Kódovací schéma
Počítače, ze své podstaty, pracují pouze s čísly. Písmena a další znaky ukládají tak, že každému z nich přiřadí číslo. Před vznikem Unicode existovaly stovky rozdílných kódovacích systémů pro přiřazování těchto čísel. Žádné z těchto kódování nemohlo obsahovat dostatek znaků: například Evropská unie sama potřebuje několik různých kódování, aby pokryla všechny své jazyky. Dokonce i pro jeden jediný jazyk, jako je angličtina, nevyhovovalo žádné kódování pro všechny písmena, interpunkci a běžně používané technické symboly. Jen v České republice se používá 6 různých kódování češtiny. 25
Nebo několik úseků spojených řetězem FAT.
50
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
Tyto kódovací systémy také byly v konfliktu jeden s druhým. To znamená, že dvě kódování mohou používat stejné číslo pro dva různé znaky, nebo používat různá čísla pro stejný znak. Jakýkoli počítač (zvláště servery) musí podporovat mnoho různých kódování. Kdykoli jsou data předávána mezi různými kódováními nebo platformami, hrozí, že tato data budou poškozena. Unicode přiřazuje každému znaku jedinečné číslo, nezávisle na platformě, nezávisle na programu, nezávisle na jazyku. Začlenění Unicode do klient-server nebo vícevrstvých aplikací nabízí významné ušetření nákladů oproti dřívějším znakovým sadám. Unicode umožňuje, aby jediný softwarový produkt nebo jediná webová stránka byla zaměřena na mnoho platforem, jazyků a zemí beze změn návrhu. To dovoluje přenášet data přes mnoho různých systémů bez porušení. Každý znak je uložen na 16 bitech (oproti ASCII, který má 8 bitů) a umožňuje tedy uložení až 65 535 znaků (ASCII 255). V současné verzi obsahuje více než 34 tisíc znaků ze 24 podporovaných písem. Je tedy značně univerzální a obsahuje vlastně znaky všech národních abeced (Ameriky, Evropa, Střední Východ, Afrika, Asie a Tichomoří). Pro nás je samozřejmě důležité že i ty naše české. 8.8.2
Unicode Consorcium
Roku 1991 bylo oficiálně, po několika letech neformální spolupráce, založeno Unicode Consorcium. Vzalo si za úkol postarat se o prosazení a další vývoj 16 bitového kódování pro znaky nejdůležitějších světových jazyků, spolu s mnoha historickými a archaickými znaky. Consorcium se snaží spojit síly nejdůležitějších průmyslových společností a vývojářů ke standardizaci mezinárodní znakové sady. Výsledkem jeho práce je standard Unicode, který je základem internacionalizace a lokalizace software, který se stal také součástí širšího standardu ISO/EIC 10646;1993. Primární úlohou Consorcia je vyvíjet a podporovat standard Unicode; pomáhat při jeho implementaci do software; a také zajišťovat fundovanou kontrolu nad budoucími revizemi standardu. V kapitole 8 bylo čerpáno z literatury [2], [26] a [29].
51
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
9
RCM3200
9.1
Úvod
RCM3200 je modul zahrnující výkonný mikroprocesor Rabbit 3000 společnosti Rabbit Semiconductor. Pracuje na frekvenci 44,2 MHz, má 512 kB paměti flash, 512 kB statické paměti RAM programu a 256 kB datové SRAM. Dva 34pinové konektory zpřístupňují 52 digitálních I/O linek sdílených se šesti sériovými porty (RS232/485), které mají podporou IrDA, I2 C, SPI, 10bitové PWM a další alternativní funkce. Integrovanou součástí modulu je RJ–45 10/100Base–T Ethernet rozhraní s podporou všech základních protokolů rodiny ARP, ICMP, IP, protokolů TPC i UDP atd.
Obrázek 20: Modul RCM3200
Je to ideální volba pro vývojáře, který požaduje rychlý vývoj a implementaci embedded systému s plně integrovanou 10/100BaseT Ethernet konektivitou na principu tenkého ethernetu. Při velikosti pouhých 69 mm×47 mm pracuje s napájením 3,3 V (I/O linky jsou tolerantní k 5 V) a poskytuje široké spektrum integrovaných periferií. Díky těmto vlastnostem je modul RCM3200 velmi vhodný pro automatizaci, měření a regulaci. Mikroprocesor Rabbit 3000 se vyznačuje extrémně nízkým EMI (ElectroMagnetic Interference). Instrukční sada mikroprocesoru Rabbit 3000 je stejná jako u předchozí řady Rabbit 2000 a je odvozená z populárních procesorů Zilog Z8026 . RCM3200 je dodáván s vývojovým prostředím Dynamic C a s podporou TCP/IP stacku, který je k Dynamic C přibalen zdarma včetně zdrojových kódů. Toto prostředí obsahuje editor, 26
Respektive z jejich rozšíření Z180.
52
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
kompilátor jazyka C a ladící prostředky (Dynamic C SE je součástí vývojových kitů). Vhodná kombinace technických a programových prostředků umožňuje rychlý a levný vývoj aplikací. K dalšímu vybavení RCM3200 patří baterií zálohovaný obvod RTC (Real Time Clock), přímé připojení externích pamětí a I/O. Samozřejmostí jsou režimy s nízkou spotřebou. Slave port umožňuje snadné připojení modulu do již existujícího zařízení a dovoluje z něj vytvořit komunikační koprocesor nadřízeného systému. Modul je možné přímo vkládat do uživatelské základní desky, která může obsahovat pouze periferní obvody. Kompletní běh aplikačního programu může převzít modul. K modulu je možné přímo připojit většinu CMOS kompatibilních digitálních obvodů. Vhodná kombinace technických a programových prostředků umožňuje rychlý a levný vývoj aplikací [30]. Souhrn základních vlastností: • 10/100Base–T Ethernet • Rabbit 3000 mikroprocesor na 44,2 MHz • 3,3 V napájení • Nízké elektromagnetické vyzařování • 512 K Flash • 512 K SRAM (program), 256K SRAM (data) • 52 digitálních I/O • 6 sériových portů (IrDA, SDLC/HDLC, Async) s maximální rychlostí 5,5 Mb/s, z toho 4 SPI Výhody: • Snadný a rychlý vývoj • Krátký čas nutný k uvedení nového výrobku • Kompaktní provedení „vše v jednomÿ • Malé rozměry • Jednoduchý jazyk založený na jazyku ANSI C
53
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
• Vývojové prostředí Dynamic C CE • TCP/IP stack ve zdrojových souborech (evidentně z FreeBSD) • Nízká cena • Možnost přikoupení vývojového kitu Nevýhody: • Vývojové prostředí Dynamic C je dostupné pouze pro platformu Windows • Zastaralá osmibitová CISC architektura založená na Z(1)80 • Malý výběr alternativních kompilátorů • Poměrně nestandardní rozteč 2 mm konektorů J1 a J2 (většina návrhových systémů na tištěné spoje s nimi má problémy, protože nemá společný násobek s obvyklými palcovými rozměry)
9.2
Hardware
Na obrázku 21 je zobrazena architektura modulu RCM3200. Obrázek 22 ukazuje rozdělení jednotlivých funkčních bloků a portů včetně jejich alternativních funkcí.
Obrázek 21: Architektura modul RCM3200
Na obrázku 23 je zapojení konektorů J1 a J2. Tyto konektory mají celkem 52 paralelních I/O pinů rozdělených do sedmi osmibitových portů. Z toho je 44 obousměrných (PA0–PA7, PB0, PB2–PB7, PD2–PD7, PE0–PE1, PE3–PE7, PF0–PF7 a PG0–PG7).
54
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
Obrázek 22: Porty modulu RCM3200
Obrázek 23: Konektory modulu RCM3200
9.3
Vývojový kit
Začátek práce s modulem RCM3200 je usnadněn použitím vývojového kitu, který obsahuje modul RCM3200, prototypovou základní desku, programovací kabel, napájecí zdroj, vývojové prostředí Dynamic C SE, kompletní dokumentaci na CD a tištěnou příručku „Getting Started manualÿ. Podrobnější informace lze nalézt v [30] a [31].
55
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
10
Návrh prototypové desky
V této části se pokusím stručně charakterizovat, jaké byly moje myšlenkové pochody při návrhu druhé verze zkušební desky (první verze byla vytvořena v rámci [1] a [2] ). Tato deska spojuje modul RCM3200 s napájecími obvody a obvody zprostředkovávají styk s okolím. Nedílnou součástí desky jsou samozřejmě konektory pro paměťové karty. První je určen k připojení karty CompactFlash a druhý pro MMC kartu. Schéma a obrázek první verze desky plošných spojů je uveden v příloze. Deska je rozdělena na tyto základní části: • Blok napájení 3,3 V • Blok napájení 5 V • Řídící modul RCM3200 • Rozhraní RS232 • Rozhraní RS485 • Rozhraní pro CF kartu • Rozhraní pro MMC kartu • Výstup pro LCD display • Signalizační LED diody • Blok dalších digitálních vstupů / výstupů
10.1
Část napájení
V zapojení jsem použil dvě napájení. První (3,3 V) pro napájení CompactFlash, MMC a především modulu RCM3200. Z druhého (5 V) je napájen LCD display a převodník napěťové úrovně sériového rozhraní RS232 - obvod MAX232. Pro realizaci obou napětí jsem se rozhodl použít klasický stabilizátor firmy National Semiconductor LM317 v pouzdrech TO220 a v klasickém katalogovém zapojení. Tyto odvody mají dobré parametry i cenu. Řešení s napěťovými měniči by bylo zhruba 10 krát nákladnější. Při konstrukci jsem předpokládal zatížení obou větví poměrně velkým proudem 500 mA, proto jsem oba stabilizátory vybavil chladičem. Ke stabilizaci napětí 5 V by stačil i stabilizátor 7805 v pouzdru TO92, ale vzhledem
56
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
k mnohem lepším parametrům LM317 [32], [33] a zanedbatelnému rozdílu v ceně jsem se rozhodl použít oba stabilizátory stejné. Jedinou nevýhodou u těchto stabilizátorů je fakt, že mají na vývod spojený s chladičem připojen signál Vout namísto pochopitelnějšího vstupního napětí Vin . Nelze je tedy připojit oba na stejný chladič.
10.2
Konektory pro RCM3200
Jak jsem již předeslal výše, modul RCM3200 má dva konektory 2×17 pinů s roztečí 2 mm (viz kapitola 9). Tato rozteč je poměrně nepříjemná, protože je založená na metrickém systému a nemá žádný společný násobek s palcovými rozměry ostatních součástek. To vedlo k tomu, že návrhový systém Eagle jen velice neochotně propojoval konektory s jinými součástkami. Obstarání těchto konektorů v ČR bylo nemožné a bylo je třeba objednat prostřednictvím zasílatelské služby z firmy Rabbit Semiconductor.
10.3
Konektor CompactFlash a MMC
Konektor pro paměťovou kartu CompactFlash, jejíž přípojení bylo řešeno v semestrálním projektu 1 [1], jsem připájel přímo na spodní stranu plošného spoje. Konektor pro MMC kartu je vyveden pomocí pinové lišty (7 pinů) a signály SCK, MISO a MOSI (viz kapitola 4.4.2) jsou připojeny na jeden ze sériových portů RCM3200. Konkrétně na sériový port D (viz kapitola 9).
10.4
Testovací rozhraní
Jako jedno z testovacích rozhraní jsem se rozhodl využít standardní sériovou sběrnici RS232 [34], kterou je vybavena naprostá většina průmyslových zařízení i osobních počítačů. Dnes už je toto rozhraní poměrně zastaralé, proto jsem se rozhodl do návrhu desky zakomponovat i další rozhraní – poměrně nové RS485 [35]. Jedná se o sériovou sběrnici, která je modernější než RS232 a postupně sběrnici RS232 v průmyslu nahrazuje. Mezi její výhody patří vyšší přenosové rychlosti (až jednotky Mb/s), maximální délka vodičů je 1200 m a umožňuje připojení až 32 vysílačů a až 32 přijímačů. Díky technologii kroucených párů je i odolnější proti rušení. Součástí návrhů jsou také dvě LED diody. První z nich indikuje přípojení napájecího napětí, použití té druhé je v režii programátora. V mém případě ji využívám pro indikaci přístupu (zápisu nebo čtení) na paměťové médium MMC. Pomalejší pomocné výpisy je možné směrovat na znakový LCD display 2×16, který je ovládán pomocí čtyřbitové sběrnice [36],[37].
57
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
Vzhledem k velkému množství nevyužitých I/O pinů řídícího modulu RCM3200 jsem se ještě rozhodl vyvést 14 pinů ze dvou souvislých částí konektoru J2. Ty se dají použít pro měření velmi rychlých pomocných signálů. V případě potřeby je možné použít je jako digitální I/O pro obecné použití.
58
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
11 11.1
Softwarové vybavení Úvod
Modul RCM3200 (respektive processor Rabbit 3000) umožňuje programování ve dvou programovacích jazycích, v assembleru a v jazyku ANSI C. Assembler má výhodu ve své větší rychlosti díky efektivněji generovanému kódu, který má pod kontrolou přímo programátor. Naopak nevýhodou je fakt, že takto napsaný program je nepřenositelný na jinou architekturu a zdrojový text programu je mnohem delší a méně přehledný. Programovací jazyk C má naopak výhodu v tom, že je s minimem úprav přenositelný na každou architekturu, pro kterou je k dispozici překladač. Další nezanedbatelnou výhodou jazyka C je mnohem rychlejší vývoj aplikace. Jazyk C je rozumným kompromisem mezi vyšším programovacím jazykem typu C++, Perl atd. a mezi assemblerem. Kvůli nesporným výhodám jsem si pro vývoj tohoto software zvolil právě jazyk C. Pro překlad jsem použil vývojové prostředí Dynamic C SE. Jeho výhodou je to, že obsahuje vestavěný debugger. Naopak značnou nevýhodou tohoto vývojového prostředí je to, že je dostupné pouze pro operační systém Windows. Při programování obslužného software jsem se snažil o maximální přenositelnost. Ta je zajištěna zvolením jazyka C a rozdělením programu na dvě části, které jsou vzájemně relativně nezávislé. První část je tvořena funkcemi, které zprostředkovávají nízkoúrovňovou obsluhu datového média, v tomto případě paměťové karty MMC. Jedná se o základní funkce, které jsou závislé na typu MCU a na typu datového média. Při použití jiného hardware pak stačí přepsat jen tyto funkce. Z celkového rozsahu přibližně 5 000 řádků kódu tvoří tyto platformně závislé funkce necelých 10 %. V případě MMC slouží tyto funkce k inicializaci portů rozhraní, konfiguraci SPI, inicializaci média, čtení konfiguračních registrů, nastavení velikosti bloku a v neposlední řadě také pro čtení/zápis bloku dat. Druhá část odsahuje skupinou funkcí, které představují základní aplikační rozhraní souborového systému FAT. Tato část tvoří naprostou většinu kódu. Nedílnou součástí programu je také mnoho globálních proměnných a struktur, které slouží například jako vyrovnávací buffery, nebo jako pomocné datové struktury, které jsou příliš velké na to, aby se musely v každé funkci pokaždé znovu alokovat. Fyzicky je celý projekt rozdělen do dvou souborů. Základ tvoří soubor embfatfs.c. Soubor embfatfs.lib naproti tomu obsahuje definice konstant a datových struktur. Toto rozdělení pouze do dvou souborů je z toho důvodu, že Dynamic C SE neumí
59
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
přímo vložit jiné soubory jako klasické překladače, ale cestu k takto vkládaným souborům je potřeba nejprve zapsat do speciálního seznamu v souboru lib.dir. Tento postup je poměrně nestandardní a neumožňuje oddělený překlad souborů. To znamená, že se celý projekt musí pokaždé znovu celý překládat. Projekt jsem pracovně pojmenoval EMBFATFS, což je zkratka složená z anglického „Embedded File Allocation Table File Systemÿ. V dalším textu se budu na tento software zkratkou EMBFATFS odkazovat.
11.2
Vlastnosti
Při práci jsem si sám vytyčil několik cílů, které by měl EMBFATFS splňovat. 1. Musí být maximálně spolehlivý (i na úkor výkonu) a přenositelný (Cross Platform). 2. Musí podporovat všechny typy souborového systému FAT (FAT12, FAT16 i FAT32) a musí sám typ souborového systému určit. 3. Musí umět dlouhé názvy souborů (a adresářů) na všech typech FAT. 4. Musí zvládat práci s cestou o libovolném zanoření a délce alespoň 200 znaků. 5. Musí používat klasická lomítka pro rozdělování cesty na jednotlivé části místo nestandardních lomítek zpětných. 6. Musí být maximálně kompatibilní se standardními knihovnami pro práci se soubory (především s knihovnou stdio.h). 7. Nesmí (stejně jako operační systémy DOS a Windows) rozlišovat mezi velikostí písmen (Case InSensitive). 8. Nesmí být použity žádné rekurze a podobné nežádoucí programátorské postupy. 9. Nemusí umět kódování UNICODE (viz kapitoly 8.4 a 8.8). 10. Operace čtení/zápisu FAT tabulky i adresáře musí být bufferované a každý otevřený soubor musí mít vlastní vyrovnávací buffer o velikosti minimálně jednoho sektoru. 11. Nemusí umět tzv. „žolíkovéÿ znaky a nemusí kontrolovat nepovolené znaky v názvech souborů/adresářů (případné další ošetření bude ponecháno na programátorech, kterým toto zpomalení, ač poměrně významné, nebude vadit).
60
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
12. Co nejvíce velkých datových struktur musí být globálních. 13. Jednoduché proměnné budou lokální. 14. Všechny proměnné, jejichž velikost přesahuje 4 bajty, budou funkcím předávány pomocí ukazatelů (standardní délka adresy je právě 4 bajty). Bod číslo 6 (zachování kompatibility se standardní knihovnou stdio.h) nebylo možné splnit v plném rozsahu, protože Dynamic C CE neumí dynamicky alokovat paměť27 , a tak jsem nemohl realizovat funkce vracející ukazatel na datovou strukturu. Příkladem takovéto funkce je například funkce pro otevření souboru: FILE *fopen (const char *filename, const char *mode); V Dynamic C CE není možné alokovat paměť, která by nebyla při ukončení funkce zrušena. Moje řešení je proto následující: int rfopen(RFILE *stream, char *cesta, char mode); Nejprve nadefinuji statickou proměnnou RFILE stream a funkci int rfopen() na ni předám pouze ukazatel. Tato proměnná je ve funkci naplněna a v případě úspěchu je vrácena hodnota 0. V opačném případě je vrácena chybová hodnota 1. Podobné změny jsou z technických důvodů i u jiných funkcí. Bod číslo 10 jsem musel z důvodu paměťové náročnosti a z nedostatku času zredukovat na bufferování pouze pro čtení. To má za následek poměrně častý zápis do tabulky FAT. Na druhou stranu se však zvýšila spolehlivost.
11.3
Cross platform
Pro usnadnění vývoje jsem se rozhodl udělat program EMBFATFS přeložitelný zároveň na procesoru Rabbit 3000 i na klasickém PC. Tímto postupem jsem si usnadnil ladění, zrychlil překlad a zároveň jsem si zajistil maximální přenositelnost již od samého počátku. Detekce kompilátoru je řešena pomocí této konstrukce: 27
Z pochopitelných důvodů. Režie takového úkonu by jistě nebyla malá a takovéto zacházení s pamětí by vedlo k její velké fragmentaci.
61
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
#ifdef _DCID #define COMPILER_DC #else #define COMPILER_GCC #endif
// preklad probiha na Dynamic C CE // preklad probiha na GCC
Pokud je definováno makro DCID, tak je překlad prováděn pomocí kompilátoru Dynamic C CE [39]. V opačném případě předpokládám překlad pomocí překladače i386 verze GNU GCC [38]. Podle typu překladače potom vyberu funkci z první skupiny (viz kapitola 11.1). Funkce pro PC jsou v názvu identifikátoru označeny řetězcem „GCCÿ a funkce pro MultiMedia Card řetězcem „MMCÿ. Příklad: Formát funkce pro čtení bloku dat na PC a na MMC udávají následující deklarace: int int
__GCC_Read_blok(void *, unsigned long, unsigned short); __MMC_Read_blok(void *, unsigned long, unsigned short);
Společná funkce pro čtení bloku dat včetně definice: int _Read_blok(void *ptr, unsigned long posun, unsigned short len) { #ifdef COMPILER_GCC return __GCC_Read_blok(ptr, posun, len); // cteni bloku dat #else return __MMC_Read_blok(ptr, posun, len); // cteni bloku dat #endif } Funkce EMBFATFS pro PC velice jednoduše simulují práci se skutečným paměťovým médiem tak, že je při inicializaci celý obraz disku nahrán do paměti funkcí int FAT_GCC_Init(void) (která pro tento obraz byla alokována) a při ukončení EMBFATFS je opět celý obraz zapsán zpět na disk funkcí void FAT_GCC_Exit(void). Během práce se systémem FAT jsou volány PC ekvivalenty MMC funkcí, které pracují s úsekem paměti počítače podobně jako s úsekem paměti karty MMC.
62
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
11.4
Návrh knihovních funkcí
Knihovna EMBFATFS (v aktuální verzi 0.5.5) je složena ze stodvacetipěti funkcí, které jsem rozdělil podle standardního postupu do tří úrovní. Do první skupiny patří funkce s prefixem „ ÿ. Tyto funkce přímo ovládají hardware, nebo využívají některou z globálních struktur, které nesmí být změněny. Neuvážené použití těchto proměnných by mohlo způsobit chybnou práci EMBFATFS. V C++ by tyto funkce byly privátními metodami některé třídy a programátor by je nesměl využívat. Druhou skupinu tvoří funkce s prefixem „ ÿ. Jejich používání již nemůže ohrozit činnost EMBFATFS, ale pro většinu aplikací jsou zbytečné. Jediné smysluplné využití mají (stejně jako funkce z první skupiny) při programování funkcí třetí vrstvy. Zbytek (třetí skupinu) tvoří funkce bez prefixu. Je to nejvyšší vrstva knihovny. Funkce této vrstvy jsou určeny pro většinu aplikací. Na platformě PC jí odpovídá standardní knihovna stdio.h. V této kapitole budu popisovat pouze funkce bez prefixu, které jsou určeny k přímému využití. Informace o těch ostatních jsou dostupné formou komentářů přímo ve zdrojových textech, které jsou součástí přiloženého CD.
11.5
Funkční prototypy koncových funkcí EMBFATFS
11.5.1
Funkce pro MMC
int MMC_Init(void) – Provede inicializaci MMC karty. Součástí této funkce je i načtení registrů CID a CSD do globálních datových struktur cid a csd. Tato funkce musí být volána před použitím první funkce pro MMC. V případě neúspěchu je vrácena nenulová návratová hodnota. void MMC_Exit(void) – Ukončení práce s MMC kartou (reset MMC). Za touto funkcí již nesmí být žádná funkce pro MMC volána. void MMC_Info(void) – Vypíše informace o výrobci, označení MMC, sériové číslo, velikost a seznam podporovaných tříd. 11.5.2
Funkce pro FAT
int FAT_Init(void) – Provede inicializaci souborového systému FAT. Vypočítá volné místo, najde první volný cluster a pro FAT32 načte strukturu FSI (viz kapitola 8.3). Tato funkce musí být volána před použitím první funkce pro FAT. V případě neúspěchu je vrácena nenulová návratová hodnota.
63
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
void FAT_Exit(void) – Ukončení práce se souborovým systémem. Za touto funkcí již nesmí být žádná funkce pro FAT volána. int FAT_GCC_Init(void) – Funkce, která načte obraz disku do paměti PC (viz kapitola 11.3). V případě neúspěchu je vrácena nenulová návratová hodnota. void FAT_GCC_Exit(void) – Zápis obrazu disku z paměti PC zpět na pevný disk (viz kapitola 11.3). V případě neúspěchu je vrácena nenulová návratová hodnota. void FAT_Info(void) – Vypíše informace ze struktur BPB, EBPB a určí skutečný typ souborového systému (viz kapitola 7). 11.5.3
Obdoby standardních funkcí
int findfirst(char *cesta, ffblk *ffblk) – Hledá první objekt (soubor, adresář nebo label) v adresáři zadaném parametrem cesta. Struktura ffblk je popsána v kapitole 11.6. Pokud zadaná cesta neexistuje, je vrácena návratová hodnota ffh . Hodnota 1h znamená, že nebyl nalezen žádný objekt. int findnext(ffblk *ffblk) – Hledá další objekt (soubor, adresář nebo label) v adresáři zadaném parametrem cesta ve funkci int findfirst(). Tato funkce se v naprosté většině případů používá v kombinaci s funkcí int findfirst(). Typickým přikladem je funkce void ls(). Návratová hodnota 1h znamená, že nebyl nalezen další objekt. int rfopen(RFILE *stream, char *cesta, char mode) – Otevře soubor stream zadaný parametrem cesta. Parametr mode určuje způsob otevření souboru. Hodnota r otevře soubor pro čtení (od začátku souboru), hodnota w pro zápis (existuje-li, je přepsán) a hodnota a otevře soubor pro čtení nebo zápis. Pozici nastaví na konec souboru. Pokud by se například některá z funkcí pokusila zapisovat do souboru, který je jen pro čtení, tak v ní dojde k chybě. Při neúspěšném otevření souboru je vrácena nenulová návratová hodnota. int rfseek(RFILE *stream, long offset, int whence) – Přesune ukazatel pozice v otevřeném souboru stream o hodnotu offset od pozice zadané parametrem whence. Ta může být SEEK SET (posun od začátku souboru), SEEK CUR (posun od aktuální pozice) nebo SEEK END (posun od konce souboru). V případě neúspěchu je vrácena nenulová návratová hodnota. int rftrunc(RFILE *stream, unsigned long fsize) – Tato funkce zkrátí délku otevřeného souboru stream na hodnotu fsize. V případě neúspěchu je vrácena nenulová návratová hodnota.
64
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
unsigned long rftell(RFILE *stream) – Vrací aktuální pozici v otevřeném souboru zadaném parametrem stream. int rfeof(RFILE *stream) – Obdoba standardní funkce feof(). Vrací nulu, je-li ukazatel pozice před koncem souboru a nenulovou hodnotu, je-li aktuální pozice větší nebo rovna velikost souboru. int rfgetc(RFILE *stream) – Přečte z otevřeného souboru stream znak a posune aktuální pozici o +1. V případě neúspěchu je vrácena konstanta EOF. int rfputc(int c, RFILE *stream) – Zapíše do otevřeného souboru stream znak c. Aktuální pozice je posunuta o +1. Na rozdíl od standardní funkce int fputc() má tato funkce výhodu v tom, že nedochází ke zkrácení souboru v případě, že je zaspán znak napřiklad na začátek souboru. Pokud by programátor chtěl docílit standardního chování, stačí za tuto funkci připsat volání funkce int rftrunc() s hodnotou aktuální pozice. int rgetc(RFILE *stream) – viz funkce int rfgetc(). int rputc(int c, RFILE *stream) – viz funkce int rfputc(). char *rfgets(char *str, unsigned int max, RFILE *stream) – Přečte z otevřeného souboru stream řádek o maximální délce max. Paměť proměnné str musí být předem alokována. Návratová hodnota ukazuje na začátek řetězce str. V případě chyby je nastavena na hodnotu NULL. char *rfputs(char *str, RFILE *stream) – Zapíše do souboru stream řádek str. Návratová hodnota ukazuje na začátek řetězce str. V případě chyby je nastavena na hodnotu NULL. int rfread(void *ptr, unsigned int xsize, int xn, RFILE *stream) – Přečte z otevřeného souboru stream xn bloků (záznamů) dat a uloží je na adresu ptr. Velikost každého z bloků je xsize. Vrací počet načtených záznamů. int rfwrite(void *ptr, unsigned int xsize, int xn, RFILE *stream) – Zapíše do otevřeného souboru stream xn bloků dat z adresy ptr. Velikosti každého z bloků je xsize. Vrací počet zapsaných záznamů. int rfsyncbuf(RFILE *stream) – Vynutí zápis vyrovnávacího bufferu otevřeného souboru stream na disk. V případě neúspěchu je vrácena nenulová návratová hodnota.
65
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
int rfclose(RFILE *stream) – Uzavře otevřený soubor stream. V případě neúspěchu je vrácena nenulová návratová hodnota. 11.5.4
Příklady vyšších funkcí
Určení velikosti souboru unsigned long rfsize(RFILE *stream) – Vrací velikost otevřeného souboru stream. Čtení a nastavení jména disku char *Get_Label(void) – Přečte jméno disku. Vrací ukazatel na začátek proměnné s tímto jménem. int Set_Label(char *label) – Nastaví jméno disku. V případě neúspěchu je vrácena nenulová návratová hodnota. Určení velikosti disku unsigned long Get_Disk_size_read(void) – Funkce vracející velikost disku, která je určována algoritmem postupného čtení. V případě neúspěchu je vrácena nulová návratová hodnota. Výpočet volného místa unsigned long getfreespace(int force) – Vrací velikost volného místa disku v bajtech. Pro FAT12/FAT16 je nutné volné místo skutečně alespoň poprvé spočítat. Bylo-li již někdy spočítáno, je počet volných clusterů uložen do proměnné Free_Count. Je-li nastavena proměnná force na true, je hodnota znovu přepočítána. Výpis obsahu souboru void cat(char *cesta) – Vypíše obsah souboru zadaného úplnou cestou. Výpis adresáře void ls(char *cesta) – Vypíše obsah adresáře zadaného úplnou cestou. void dir(char *cesta) – viz funkce void ls().
66
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
Vytvoření souboru nebo adresáře int mk_file(char *path, char *name) – Tato funkce vytvoří prázdný soubor name v adresáři path. V případě neúspěchu je vrácena nenulová návratová hodnota. int mk_dir(char *path, char *name) – Tato funkce vytvoří prázdný adresář name v adresáři path. V případě neúspěchu je vrácena nenulová návratová hodnota. Mazání souboru nebo adresáře int rm_file(char *path) – Smaže soubor zadaný úplnou cestou path. V případě neúspěchu je vrácena nenulová návratová hodnota. int rm_dir(char *path) – Smaže adresář, který je zadaný úplnou cestou path. V případě neúspěchu je vrácena nenulová návratová hodnota. Přesun souboru nebo adresáře int mv_file(char *source, char *dest) – Přesune soubor zadaný cestami source na dest. V případě neúspěchu je vrácena nenulová návratová hodnota. int mv_dir(char *source, char *dest) – Přesune adresář zadaný cestami source na dest. V případě neúspěchu je vrácena nenulová návratová hodnota. Kopírování souboru int cp_file(char *source, char *dest) – Zkopíruje soubor zadaný cestami source na dest. V případě neúspěchu je vrácena nenulová návratová hodnota. Formátování média int format(void) – Provede rychlý formát média. V případě neúspěchu je vrácena nenulová návratová hodnota. 11.5.5
Funkce main(void)
int main(void) – Hlavní funkce programu. Je zde přítomna kvůli volání testovacích funkcí.
67
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
Příklad:
int main(void) { #ifdef COMPILER_GCC if (FAT_GCC_Init()) { printf("Chyba inicializace\n"); } #else PORTGinit(); SPIinit(); if (!MMC_Init()) { MMC_Info(); #endif if (FAT_Init()) { printf("Medium neni naformatovane\n"); } else { printf("--- INFORMACE O~FAT ---\n"); FAT_Info(); printf("NF=%lu\n", Next_Free); printf("FC=%lu\n", Free_Count); printf("FS=%lu\n", getfreespace(1)); mk_file("", "testovaci soubor 1"); dir("/"); cat("NAPOLEON1.TXT"); mk_dir("", "testovaci adresar 1.dir"); FAT_Exit(); } #ifdef COMPILER_GCC FAT_GCC_Exit(); #else
// cteni obrazu disku
// inicializace portu LED // inicializace SPI // inicializace MMC // informace o MMC // inicializace FAT // chyba inicializace
// // // // // // // // //
informace o FAT prvni volny cluster pocet volnych clusteru volne misto vytvoreni souboru vypsani adresare vypsani souboru vytvoreni adresare konec FAT
// zapis obrazu disku
68
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
MMC_Exit();
// konec prace s MMC
} #endif printf("\nPROGRAM DONE...\n"); for (;;); return 0;
// konec // infinity loop
} Vytvořené programové vybavení je příkladem využití paměti MMC se souborovým systémem FAT. Pro potřeby konkrétních aplikací je nutné funkci main() upravit podle požadavků zákaznické aplikace.
11.6
Struktury
Součástí EMBFATFS je velké množství nových datových typů, datových struktur a unionů (definice jsou uvedeny v souboru embfatfs.lib). Některé z těchto proměnných je důležité znát podrobněji, protože ukazatele na jejich instance jsou i v parametrech funkcí nejvyšší úrovně. Struktura RFILE typedef struct { unsigned long startclust; unsigned long curcluster; unsigned long fsize; unsigned long pos; unsigned int posincurcl; int open; char enable_read; char enable_write; char mode;
// // // // // // // // //
prvni cluster souboru aktualni cluster velikost souboru pozice v souboru pozice v akt. clusteru indikator otevreni povoleni cteni povoleni zapisu zpusob otevreni (rwa)
union DIR_ENTRY de; // buffer zaznamu adresare unsigned long last_de_sector; // pomocna promenna unsigned int last_de_entry; // pomocna promenna unsigned long is;
// prave nacteny sektor
69
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
SECTOR_BLOK sb; }RFILE;
// buffer sektoru
Struktura ffblk typedef struct { unsigned char unsigned short unsigned short unsigned long unsigned long char
ff_attrib; ff_ftime; ff_fdate; ff_fsize; ff_sc; *ff_name;
// // // // // //
unsigned long unsigned long
startclust; tentc;
// prvni cluster objektu // pocitadlo zaznamu adresare
unsigned long unsigned long
last_usl; xgetFATentry;
// optimalizaci prochazeni FAT // optimalizaci prochazeni FAT
int get_FAT_err; }ffblk;
11.7
atribut objektu cas vytvoreni objektu datum vytvoreni objektu velikost objektu prvni cluster objektu jmeno objektu
// chyba pri cteni z FAT
Testovací program
K otestování funkčnosti knihovních funkcí jsem naprogramoval jednoduché webové rozhraní, které umožňuje: • vypsat soubory a adresáře na MMC kartě • stažení (popřípadě prohlédnutí) libovolného souboru • vytvořit několik předdefinovaných souborů a adresářů • naformátovat MMC kartu Po zadání IP adresy 10.10.10.1 do internetového prohlížeče se objeví úvodní stránka, jejíž náhled zobrazen na obrázku 24. Příklad výpisu kořenového adresáře MMC karty je na obrázku 25.
70
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
Obrázek 24: Úvodní stránka příkladu
Obrázek 25: Výpis root adresáře
Pro realizaci tohoto příkladu bylo třeba změnit zdrojový text knihovny http.lib, která je standardní součástí vývojového prostředí Dynamic C CE tak, aby bylo možné cgi skriptům předávat parametry. Upravená verze této knihovny je dostupná pod jménem http emb.lib na přiloženém CD u zdrojového textu tohoto přikladu. Další zajímavé informace o souborovém sytému FAT a o jeho datových strukturach lze nalézt například v [26] a [27], o MultiMedia Card v embedded zařízeních se lze dočíst v [16], [17], [18], [19], [20], o SPI v [21], [22] a o výpočtu CRC pojednává [23], [24] a [25].
71
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
12
Závěr
Ve své diplomové práci jsem se zabýval návrhem prototypové desky, která umožňuje připojení paměťové karty standardu MMC (MultiMedia Card) k mikrořadičovému systému RCM3200, založeném na mikroprocesoru Rabbit 3000, a realizací programových vazebních modulů (knihovních funkcí), které toto paměťové médium obsluhují. Výsledkem práce je univerzální testovací deska, která demonstruje funkčnost navrženého programového vybavení. Součástí práce je i stručný přehled v současné době nejrozšířenějších typů paměťových karet. Karta MMC je podrobně rozebrána v kapitole 4 a komunikační sběrnice, kterou tato karta využívá, v kapitole 5. Využití paměťových karet se v současnosti nabízí všude tam, kde je třeba uchovávat relativně velké množství dat, nebo je třeba tato data uchovávat na výměnných médiích. Je pochopitelné, že v průmyslových aplikacích se podobných možností využití paměťových karet najde celá řada. Paměťové karty MMC mají výhodu v tom, že jsou hodně rozšířené, levné a jsou kompatibilní s modernějšími kartami SecureDigital28 . Návrh prototypové desky jsem vytvořil v CadSoft Eagle verze 4.03. V příloze je schéma zapojení a obraz desky plošných spojů druhé verze tohoto návrhu. První verze této desky vznikla v rámci mé semestrální práce I a II (viz [1], [2]). Z tohoto důvodu je součástí návrhu několik periférií, které v této práci nevyužívám. Například konektor pro paměťovou kartu CompactFlash, nebo sériová rozhraní RS232 a RS485. Z důvodu této univerzálnosti je deska několikanásobně složitější, než deska, která by stačila k pouhému připojení Multimedia Card. Největším přínosem mé diplomové práce je obecně použitelný knihovní modul nazvaný EMBFATFS (EMBedded FAT File System). Ten zajišťuje podporu standardního souborového systému FAT. Tato knihovna obsahuje všechny požadované funkce pro práci s tímto systémem, přesně tak, jak požaduje zadání. Celkově může programátor využít několik desítek funkcí, které nepředpokládají hlubší znalost daného programového vybavení. Tyto funkce jsou jménem i parametry co nejpodobnější standardním funkcím knihovny stdio.h nebo příkazům29 operačního systému UNIX a DOS/Windows. Funkce pro formátování média je dostupná v tzv. rychlé verzi. Programátoři, kteří si chtějí sami vyvíjet funkce na míru své aplikaci, mohou 28
V zařízeních, kde je použita karta MMC je možné za dodržení určitých pravidel (použití módu SPI a použití širšího konektoru) použít i kartu SecureDigital. 29 Ze základních příkazů operačního systému chybí pouze kopírování neprázdných adresářů. Naprogramování této funkce by vyžadovalo rekurzi.
72
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
využít zhruba stovku funkcí pro práci s MMC a se systémem FAT. Tyto funkce jsou na různé úrovni složitosti a k jejich použití je zapotřebí podrobně prostudovat činnost této knihovny přímo ze zdrojových textů. Při inicializaci knihovního modulu EMBFATFS je automaticky detekováno, zda se jedná o souborový systém FAT12, FAT16 nebo FAT32. Všechny funkce podporují dlouhé názvy souborů na všech typech FAT. EMBFATFS stejně jako operační systém DOS/Windows, nerozlišuje mezi velikostí písmen a podporuje neomezené zanoření adresářové struktury. Naopak, z výkonnostních důvodů nepodporuje takzvané zástupné znaky. Při práci jsem se snažil, aby se kód programu dal s minimálními změnami využít i na jiných architekturách, než jen s modulem Rabbit RCM3200, nebo s jinou pamětí, než s MMC. Díky této přenositelnosti bylo možné část kódu, který se přímo netýká MMC, ladit na PC. Při portování na jiný systém nebo na jinou paměťovou kartu stačí přepsat nejzákladnější funkce, které přímo ovládají hardware. Na jednoduché systémy, kde není dostatek paměti, je nutné kód zredukovat na nezbytné minimum. I v tomto případě by však paměťové nároky systému byly poměrně velké. Kapitoly 7 a 8 podrobně popisují strukturu disku a funkci souborových systémů na bázi FAT včetně všech datových struktur jako MBR, FAT, ROOT, Adresář, FSI atd. Kapitola 9 stručně charakterizuje modul RCM3200, tvořící základ mé diplomové práce. Kapitola 10 popisuje návrh desky a kapitola 11 návrh knihovny EMBFATFS. V této kapitole, popisující softwarové vybavení, jsou charakterizovány cíle, vysvětleny mechanizmy pro zajištění přenositelnosti a v krátkosti popsány základní funkce30 . Většina funkcí, které mají obdobu v operačním systému, je ve zdrojových textech přehledně okomentována. Mnoho z těchto funkcí slouží pouze jako příklad použití knihovny. Například unixový příkaz cat „souborÿ, který vypisuje obsah textového souboru, je v EMBFATFS reprezentován funkcí void cat(chat *path). Je zřejmé, že skutečně použitelná funkce by data nemohla vypisovat na standardní výstup31 , ale mohla by je například posílat ve formě UDP datagramů na ethernetové rozhraní, které je součástí modulu.
30 31
Včetně datových struktur, které jsou v těchto funkcích využity. Který je pomocí programovacího kabelu přesměrován do konzole prostředí Dynamic C CE.
73
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
74
Literatura [1] Kreuzwieser T., Bradáč Z.: Semestrální práce I — Záznamová karta pro mikroprocessor Rabbit, ÚAMT FEKT VUT v Brně, 2003. [2] Kreuzwieser T., Bradáč Z.: Semestrální práce II — Záznamová karta pro mikroprocessor Rabbit, ÚAMT FEKT VUT v Brně, 2003. [3] Černý, Holeš: Sémiotika, Praha, Vydavatelství PORTÁL, 2004, ISBN 80-7178-832-5. [4] RabbitCore module [online], Rabbit Semiconuctor, Inc., 2004. Dostupné ve formátu html na http://www.rabbitsemiconductor.com/products/rcm3200/index.shtml [5] Oficiální prezentace firmy ZiLOG [online], ZiLOG, Inc., 2004. Dostupné ve formátu html na http://www.zilog.com [6] Paměťová média pro digitální fotoaparáty a přenosná zařízení [online], AdminXP.cz, 2000 – 2003. Dostupné ve formátu html na http://www.adminxp.cz/hardware/index.php?act=view&aid=180 [7] Popis standardu CF [online], KOBE s.r.o., 2004. Dostupné ve formátu html na http://www.kobe.cz/products/popis cf.htm [8] Ostatní miniaturní paměťové standardy [online], KOBE s.r.o., 2004. Dostupné ve formátu html na http://www.kobe.cz/products/popis ost.htm [9] MMCA [online], The MultiMediaCard Association, 2004. Dostupné ve formátu HTML na http://www.mmca.org [10] SanDisk [online], SanDisk Corporation, 2004. Dostupné ve formátu HTML na http://www.sandisk.com [11] MultiMedia Card Product Manual [online], SanDisk Corporation, 2000. Dostupné ve formátu PDF na http://www.cybermem.com/pdf/r2 mmc1.pdf [12] MultiMedia Card User’s Guide [online], Hitachi poration, 2001. Dostupné ve formátu PDF http://www.configsys.com.hk/images/THL/PDF/mmc.pdf
Corna
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
75
[13] HM288016MM1 [online], Hitachi Corporation, 2000. Dostupné ve formátu PDF na http://www.squirrelpf.com/msavr/files/Hitachi16.pdf [14] MultiMedia Card Application Note [online], Siemens Corporation, 1998. Dostupné ve formátu PDF na http://www.eetkorea.com/ARTICLES/2000APR/2000APR03 BD MSD AN.PDF [15] Interfacing a MultiMediaCard to the LH79520 System Of Chip [online], Sharp Corporation, 2004. Dostupné ve formátu PDF na http://www.sharpsma.com/pub/productfocus/ publications/micro/mcu/tec appnote LH79520 multimediacar.pdf [16] Accelerometer [online], Stuart P., 2001. Dostupné ve formátu HTML na http://www.randomuseless.info/accelerometer/accelerometer.html [17] MMC Reader [online], Stuart P., 2001. Dostupné ve formátu HTML na http://www.randomuseless.info/accelerometer/reader/reader.html [18] Portable MP3 Player [online], D’Antonio P., Riiff D., 2001. Dostupné ve formátu HTML na http://instruct1.cit.cornell.edu/ courses/ee476/FinalProjects/s2000/peterdan/final.htm [19] MMC to Serial Adapter [online], Seanellis, 2001. Dostupné ve formátu HTML na http://homepage.ntlworld.com/seanellis/mmcserial.htm [20] MMC BascomAVR Code [online], Ranjit Diol, 2001. Dostupné na http://www.compsys1.com/support/AVR/mmc/ [21] Sériová rozhraní SPI, Microwire, I 2 C a CAN [online], Dudáček K., 2002. Dostupné ve formátu PDF na http://home.zcu.cz/~dudacek/NMS/Seriova rozhrani.pdf [22] SPI Using the Rabbit Clocked Serial Ports [online], ZWorld, Inc., Revize D. Dostupné ve formátu PDF na http://www.zworld.com/documentation/docs/refs/TN200/TN200.pdf [23] Výkladový slovník [online], Computer Press, a. s., 2004. Dostupné ve formátu HTML na http://www.zive.cz/slovnik/ [24] Zabezpečení dat při přenosech [online], ACES, s.r.o., 1991. Dostupné ve formátu HTML na http://www.earchiv.cz/a91/a141c110.php3
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
[25] High-Speed Computation of Cyclic Redundancy Checks [online], Johnson E., 1995. Dostupné ve formátu PDF na http://wireless.nmsu.edu/hf/papers/crctr.pdf [26] Microsoft Extensible Firmware Initiative FAT32 File System Specification [online], Microsoft Corporation, 2000 (rev. 1.03). Dostupné ve formátu DOC na http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx [27] Fyzická a logická struktura media HDD [online], Kotásek Z., FIT VUT v Brně. Dostupné ve formátu DOC na http://www.fit.vutbr.cz/study/courses/ PZ1/public/TEXTY/HDD/hdd05.doc [28] MTOOLs for Bochs and Win32 and/or DOS [online], Forever Young Software, 2004. Dostupné na http://www.cybertrails.com/ fys/mtools.htm [29] Co je Unicode? [online], Unicode, Inc., 2004. Dostupné na http://www.unicode.org/standard/translations/czech.html [30] Rabbit již 100M bitový [online], Kostomlatský M., 2002. Dostupné na http://www.mcu.cz/modules/news/article.php?storyid=188 [31] RCM3200 RabbitCore [online], Rabbit Semiconductor, 2004. Dostupné na http://www.rabbitsemiconductor.com/products/rcm3200/docs.shtml [32] Stabilizovaný zdroj s LM317 [online], Belza L., 2003. Dostupné na http://www.belza.cz/pwrsply/317zdroj.htm [33] Terminal Adjustable Regulator [online], National Semiconductor, 2003. Dostupné ve formátu PDF na http://www.national.com/ds.cgi/LM/LM117.pdf [34] Multichanell RS-232 Drivers/Receivers [online], MAXIM Integrated Products, 2003. Dostupné ve formátu PDF na http://pdfserv.maxim-ic.com/arpdf/MAX220-MAX249.pdf [35] RS-485/RS-422 Transceivers [online], MAXIM Integrated Products, 2003. Dostupné ve formátu PDF na http://pdfserv.maxim-ic.com/en/ds/MAX1487-MAX491.pdf [36] Inteligentní displeje a jejich připojení k PC [online], Dresler T., 2003. Dostupné na http://www.hw.cz/docs/lcd iq displaye/lcd iq dip.html
76
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
[37] Atmel AT89C2051 LCD sample project [online], Averill P., 1999. Dostupné na http://members.optushome.com.au/dontronics/vicuni/lcd.html [38] GNU Compiler Collection [online], Free Software Foundation, Inc., 2004. Dostupné na http://gcc.gnu.org [39] Dynamic C version 8 [online], ZWorld, Inc., 2004. Dostupné na http://www.zworld.com/products/dc/
77
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
Přílohy A.1
Schéma zapojení druhé verze univerzální desky
A.2
Plošný spoj druhé verze univerzální desky
xii
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
Obrázek 26: Schéma zapojení druhé verze univerzální desky
xiii
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
Obrázek 27: Plošný spoj druhé verze univerzální desky (top)
xiv
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
Obrázek 28: Plošný spoj druhé verze univerzální desky (bottom)
xv
ÚSTAV AUTOMATIZACE A MĚŘICÍ TECHNIKY Fakulta elektrotechniky a komunikačních technologií Vysoké učení technické v Brně
A.3
CD-ROM
Přiložený CD-ROM má následující adresářovou strukturu: /sources Zdrojové kódy vytvořeného programového vybavení. /thesis Elektronická verze diplomové práce ve formátu pdf a tex. /biblio Elektronické verze dokumentů uvedených v seznamu použité literatury. /documentation Ostatní dokumentace. /programs Programy použité při psání a ladění softwarového vybavení.
xvi