Produkty Novinky Články Návody Kontakty

MMC/SD rozhraní

Jak asi z názvu nadpisu tušíte, nyní si ukážeme jak zprovoznit rozhraní MMC/SD pro připojení paměťových karet. Paměťové karty MMC, resp. SD, lze využívat jako další vysokokapacitní médium. Dokonce je možné paměťové karty využít i jako média pro uložení kořenového souborového systému.

Zapojení

Komunikace s kartami typu SD probíhá přes rozhraní SD card nebo přes rozhraní SPI. My jsme zvolili rozhraní SD, protože je pro paměťové karty nativní. Pro připojení Sd karty je na zákaldní desce dostupný konektor J48 typu microSD.
Rozhraní SD můžeme zapojit dvěma způsoby - buď využijeme celou šíři datové sběrnice, tj. 4 bity, nebo využijeme jen jeden datový vodič. My jsme po řadě experimentů s několika SD kartami zvolili z důvodů stability variantu s 1bitovou datovou sběrnicí. Rozhraní SD je totiž taktováno až na 50MHz, což vyžaduje přizpůsobenou sběrnici s definovanou impedancí. A to pomocí drátových propojek dosáhnout nelze (tedy ne snadno). Přenosová rychlost bude sice menší, ale stabilita je důležitější.
Potřebné pull-up odpory a blokující kondenzátory dle definice SD rozhraní jsou už součástí zapojení microSD konektoru na základní desce Baseboard. Zapojení rozhraní SD card modulu SAM9260 je tak vskutku triviální.
obrázek sam9260-mmc
Obrázek 1.2 Modul SAM9260 - zapojení MMC/SD rozhraní
Referenční zapojení rozhraní SD modulu SAM9260 je v případě použití základní desky Baseboard vidět na obrázku 1.2. Jen podotknu, že mikrokontrolér AT91SAM9260 má dvě rozhraní typu MMC/SD. My budeme používat rozhraní A.
Modul zasuneme do pájecího pole základní desky a nachystáme si několik drátových propojek různých barev.
Jako vždy nejprve připojíme k modulu napájecí napětí +5V a zem GND - stejnojmenné pinheady na boku základní desky propojíme s piny 1 a 3 pinheadu J3 na modulu SAM9260.
Pak přivedeme signály MCCK, MCCDA a MCCDA0 rozhraní SD card modulu SAM9260 na konektor J38 na základní desce - propojíme piny 23, 26 a 25 pinheadu J3 na modulu SAM9260 s piny 6, 5 a 1 pinheadu J38 na základní desce.
Potom přivedeme signál CD (Card Detect) z konektoru J38, který slouží jako indikace za/vysunutí paměťové karty, na pin PC7 mikrokontroléru AT91SAM9260. Tím je rozhraní SD card zapojeno.
Poznámka: To, že právě pin PC7 slouží jako vstup pro signál CD, je dáno konfigurací modulu SAM9260, která se pomocí patche přídává do zdrojového kódu linuxového jádra.

SD karta

Zkouška funkčnosti rozhraní SD je podobně jako u rozhraní USB host velmi jednoduchá - prostě necháme nabootovat modul, přihlásíme se do Linuxu a vložíme paměťovou kartu. Libovolná SD karta by měla fungovat. Po jejím vložení by se mělo objevit hlášení:
mmc0: host does not support reading read-only switch. assuming write-enable. 
mmc0: new SD card at address 0002 
mmcblk0: mmc0:0002 00000 1.86 GiB
 mmcblk0: p1
Systém nám tímto hlášením oznámil, že na rozhraní mmc0 nepodporuje detekci zákazu zápisu na SD kartu a že tudíž předpokládá, že na kartu je povolenou zapisovat. Ano, má pravdu, signál WP (Write Protect) jsme k modulu nepřipojovali. Dále nám systém oznámil, že nalezl novou SD kartu a přidělil jí v rámci sběrnice adresu 002. Následně se dozvídáme, že systém zaregistroval v adresáři /dev nové blokové zařízení mmcblk0, což je zařízení na rozhraní mmc0 s adresou 002. Zařízení je paměťové médium o velikosti 1.86GB a obsahuje jeden oddíl p1. Výpisem adresáře /dev snadno zjistíme, že tento oddíl je dostupný jako zařízení /dev/mmcblk0p1. Výborně, rozhraní MMC/SD funguje.
Pokud vám systém místo uvedeného hlášení vypsal I/O chyby či chyby zápisu, zkuste vyměnit drátové propojky, ověřte správnost zapojení nebo použijte jinou SD kartu. I/O chyby totiž značí nestabilitu na sběrnici, přes kterou je SD karta připojena. S ohledem na kvalitu sběrnice zhotovené pomocí drátových propojek se může stát, že modul není schopen s kartou komunikovat spolehlivě.
Dalším prubířským kamenem, který ukáže, jestli jsme vše správně zapojili a jestli rozhraní MMC/SD funguje spolehlivě, je připojení souborového systému na kartě (nejčastěji FAT). Ručně můžeme SD kartu, resp souborvý systém na ní přítomný, připojit /odpojit pomocí příkazů:
# mount /dev/mmcblkp1 /media/mmc
# umount /dev/mmcblk0p1
Jako bonus jsme si pro vás připravili skript, který připojení a odpojení souborového systému karty řeší automaticky při za/vysunutí karty. Tento skript (/sbin/automount-mmc) je součástí připraveného firmware. Jeho volání zajišťuje správce souborů zařízení mdev, jak mu ostatně určuje jeho konfigurační soubor /etc/mdev.conf. Pokud jste tedy při zasunutí karty nezaznamenali žádné chybové hlášení, tak je obsah vaší karty automaticky připojen a je dostupný v adresáři /media/mmc.
Poznámka: Zkušenosti ukazují, že dráha, kterou vykoná microSD karta při vysouvání je příliš krátká na to, aby byl pomocí skriptu /sbin/automount-mmc bezpečně odpojen souborový systém SD karty ještě před úplným vysunutím karty. Proto je bezpečnější odpojovat souborový systém SD karty ručně a teprve poté vysunout kartu z konektoru.
Poznámka: Skript /sbin/automount-mmc připojuje jakékoliv blokové zařízení typu MMC/SD karta stále do jednoho adresáře bez ohledu na počet oddílů na paměťové kartě. Běžně paměťová karta více oddílů nemá, ale pokud ta vaše ano, tak musíte uvedený skript poupravit, aby např. pro každý oddíl zvlášť vytvářel a pak zas opětovně rušil extra adresář.