Mikrokontroléry AVR – FatFS s SD kartou

Tak po dlhšom čase pridávam ďalší článok na tému Mikrokontroléry rady AVR. Tentokrát sem pridám ukážku zápisu do textového súboru na SD kartu s FatFs systémom.

SD karta sa v embedded systémoch využíva na odkladanie vačšieho množstva dát vačšinou do súboru ak sa použije nejaký súborový systém. V súčasnosti existuju dva typy SD kariet a to staršia SD a novšia verzia SDHC, ktorá nie je spätne kompatibilná s SD. SD karta využíva na komunikáciu SPI zbernicu s 3.3V logikou. Takže napájanie SD karty a mikropočítača nie je 5V ale 3.3 V. Ja som si ako súborový systém pre SD kartu vybral FatFs. Príde mi jednoduchý a existuje pre AVR radu mega a radu tiny.

FatFs je produkt japonského chalana menom ChaN http://elm-chan.org/. Popis celého tohto projektu nájde po kliknutí na tento odkaz: FatFs – Generic FAT File System Module
Takzvaný Petit FAT File System Module je určený pre menšie 8-bit mikrokontroléry, z AVR rady sú to Tiny.

SD kartu možeme k mikropočítaču pripojiť podobne ako je to na nasledujúcej schéme:

SD_pinout

Obr. 1 Pinout SD karty

SD_M32

Obr. 2 Pripojenie SD karty k ATmega32

Väčšinou využívam zápis do textového súboru .txt takže prinášam príklad zdrojového kódu, ktorý otvorí súbor data.txt a zapíše doň 8 riadkov Ahoj %d. Po každom zapísanom riadku blikne ledkou PC7 a takisto sú pripojené kontrolné ledky na PC0 a PC1, ktoré signalizujú úspešnosť inicializácie SD karty. Príklad je kompatibilný pre moju vývojovú dosku. Po zapísaní do textového súboru, možeme kartu pripojiť k PC a otvoriť súbor. Mali by ste tam nájsť 8 riadkov s textom Ahoj %d. Ako hodiny je použitý externý kryštál 12MHz. Príklad na stiahnutie tu.

int main()
{
	DSTATUS status = STA_NOINIT;
	FIL file;
	static FATFS fs;

	while(status)
	{
		status = disk_initialize(0);
		if(status) blink_fail();
		else blink_ok();
	}

	f_mount(0,&fs);
	f_open(&file,"data.txt",FA_WRITE | FA_OPEN_ALWAYS);
	f_lseek(&file,f_size(&file));

	short int i = 0;

	while(1)
	{
		for (i = 0;i<8;i++)
		{
			f_printf(&file,"ahoj %d\n",i);
			f_sync(&file);
			blink_ok();
		}

		f_close(&file);
		PORTC |= (1<<PC7);

		break;
	}

	return 0;
}

Pekný článok o práci s SD kartou nájdete napríklad tu: http://atmega32-avr.com/sdsdhc-card-interfacing-with-atmega8-32-fat32-implementation/
Veľa zdaru !

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *

Môžete použiť tieto HTML značky a atribúty: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>