VUTBR – FEKT – UAMT – SE2 http://www.vutr.cz
Prezentace SE2 Připojení paměťové karty MMC k mikropočítači RCM3200
Tomáš Kreuzwieser
[email protected] 1/10
2 3 L2 3M 3 3 22
?
i
P
Úvod Paměťové karty MultimediaCard jsou dnes prakticky nejlevnější a nejrozšířenější polovodičovou pamětí na trhu a proto je nasnadě je využít i v různých embeded systémech, jako levné paměťové médium. V mé semestrální práci jsem dostal za úkol tuto paměťovou kartu připojit k modulu Rabbit RCM3200 a vytvořit ovladače pro některý z běžně používaných souborových systémů. 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 i ve většině embeded zařízení a je relativně jednoduchý.
2/10
2 3 L2 3M 3 3 22
?
i
P
Postup řešení úkolu Návrh prototypové desky Před návrhem desky plošných spojů bylo třeba prostudovat firemní materiály firmy SanDisk, Rabbit semiconductor a zapojení nejrůznějších pomocných součástek. Tuto desku lze rozdělit na tyto základní části: • Blok napájení 3,3V – je zapotřebí ka napájení modulu RCM3200 a MMC karty. Realizován je pomocí univerzálního stabilizátoru LM317, krerý je cenově i parametry velmi výhodný. • Blok napájení 5V – je také řešen stabilizátorem LM317. • Řídící modul RCM3200 – K prototypové desce je přípojen pomocí dvou 34-pinových konektorů s roztečí 2 mm. 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. 3/10
2 3 L2 3M 3 3 22
?
i
P
• Rozhraní RS232 a RS485 – jsou osazeny IO převodníky firmy MAXIM a vyvedeny na pinové konektory. • Rozhraní pro CF kartu – využívá 50-pinový konektor, který je umístěn na spodní straně desky. • Rozhraní pro MMC kartu – je vyvedeno na pinové konektory. • Výstup pro LCD display – nebyl navržen příliš šťastně pomocí 4-bitové sběrnice. Pro plhodnotné využití by bylo třeba LCD display vybavit ještě spínacím tranzistorem. • Signalizační LED diody – Zelená dioda signalizuje zapnuté napájení. Červená je pro určena pro testování. V mém případě svítí při čtení nebo zápisu na MMC. • Blok dalších digitálních vstupů / výstupů – Slouží k přípojení dalších testovacích LED diod, tlačítek a podobně. Možné vylepšení pro další verzi: • Odstranit blok LCD displaye – vzhledem k propracovanosti ladícího systému v DynamicC je tento blok naprosto zbytečný. • Odstranit blok napájení 5 V – je zapotřebí k napájení LCD displaye a sériových rozhraní. 4/10
2 3 L2 3M 3 3 22
?
i
P
Při nahrazení IO převodníků 3,3 V ekvivalenty a odstranění bloku LCD by 5 V rozhraní nebylo zapotřebí. • Rozšířit počet signalizačních LED diod
5/10
2 3 L2 3M 3 3 22
?
i
P
Návrh softwarové části Kvůli lepší přenositelnosti, pohodlnějšímu a rychlejšímu vývoji jsem se softwarovou část rozhodl dělat jako cross-platform aplikaci, kterou je možné přeložit na procesoru Z180 (Rabbit RCM3200) i na počítači PC. V prvím případě program pracuje přímo MMC kartou. Na PC pracuje s image souborem. „Přetíženyÿ jsou jednak funkce pro práci s MMC a jednak funkce pro práci s pamětí. Rozlišení platformy je řešeno pomocí interních preprocesorových direktiv překladače. Toto řešení ma tři výhody: 1. Rychlejší vývoj na PC – kompilace programu je mnohem rychlejší a zkompilovaný program není třeba nikam nahrávat. 2. Pohodlnější vývoj na PC – na PC existuje mnoho nástrojů na ladění programu (GDB, LINT. . .) a je možné přímo testovat funkčnost FAT funkcí přímo v OS. 3. Jednoduchá portace na jiný hardware – Stačí aby pro danou platformu byl k dispozici překladač jazyka ANSI C a přepsat platformně závislé funkce. 6/10
2 3 L2 3M 3 3 22
?
i
P
Tvorba software pro práci s MMC Tyto funkce pro svoji funkci používají hotové funkce SPI rozhraní z knihovny spi.lib. Zajišťují čtení a zápis bloku na MMC kartu, čtení jednotlivých registrů a kontrolu CRC součtů. Základní funkce: int MMC Init(void); void MMC Info(void); void MMC Exit(void); Další funkce: int MMC Read CSD(CSD *csd); int MMC Read CID(CID *cid); unsigned long MMC Get Disk size from CSD(void); Podpůrné funkce: V mých zdrojových textech mají prefix MMC nebo MMC podle jednoduchosti (a vhodnosti) použití pro vývojáře. Vzhedem k jejich množství je zde neuvádím.
7/10
2 3 L2 3M 3 3 22
?
i
P
Tvorba software pro práci s FAT
Slouží ke čtení, zápisu, vytváření, mazání, přejmenování, přesouvání a kopírování souborů/adresářů na souborových systémech FAT16 a FAT32. Pro práci s FAT, sledování řetězů FAT, se záznamy ROOT adresáře, se záznamy klasického adresáře. Osahuje funkce pro dlouhé názvy souborů a adresářů, hledání volných clusterů, startclusterů, pro práci s LABELem, funkce pro zjištování nejrůznějších informací z MBR, z FSI a podobně. Je jich velký počet a proto uvedu jen některé příklady: Základní funkce: int FAT Init(void); void FAT Info(void); void FAT Exit(void); Alternativy ke std. funkcím: int findfirst(char *cesta, ffblk *ffblk); int findnext(ffblk *ffblk); RFILE rfopen(char *cesta, char mode); int rfgetc(RFILE *stream); 8/10
2 3 L2 3M 3 3 22
?
i
P
void rfclose(RFILE *stream); Testovací funkce: void dir(char *cesta); void cat(char *cesta); unsigned long getfreespace(void); User-friendly interface k jiným funkcím (skupinám funkcí): char *Get Label(void); int create dir(char *path, char *name); int create file(char *path, char *name); Pomocné funkce: V mých zdrojových textech mají prefix FAT nebo FAT podle jednoduchosti (a vhodnosti) použití pro vývojáře. Vzhedem k jejich množství je zde neuvádím.
Přidání funkcí pro práci v OS Tyto funkce zatím nejsou impementovány. 9/10
2 3 L2 3M 3 3 22
?
i
P
Ukázkový příklad Slouží k demonstraci možností této knihovny v kombinaci s mikropočítačem Rabbit RCM3200.
10/10
2 3 L2 3M 3 3 22
?
i
P