This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:examples:storage:sdcard [2015/01/16 11:06] – raivo.sell | et:examples:storage:sdcard [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ~~PB~~ | ||
| ====== SD kaart ====== | ====== SD kaart ====== | ||
| + | //Vajalikud teadmised: | ||
| + | [HW] [[et: | ||
| + | [LIB] [[et: | ||
| ===== Teooria ===== | ===== Teooria ===== | ||
| - | [{{ : | + | {{ : |
| - | Secure Digital (SD) on mälukaardi formaat, mille töötas välja SD Card Association (SDA) kasutamiseks | + | Secure Digital (SD) on mälukaardi formaat, mille töötas välja SD Card Association (SDA) eesmärgiga kasutada seda kaasaskantavates seadmetes. Kaartiga suhtlemiseks saab kasutada kaarti enda SD nimelist liidest |
| SD kaart on iseenesest suur hulk mälubitte, mida saab küll muuta, aga muud seadmed ei oska salvestatud andmetega seljuhul midagi peale hakata. Probleemi lahendamiseks kasutatakse failisüsteemi, | SD kaart on iseenesest suur hulk mälubitte, mida saab küll muuta, aga muud seadmed ei oska salvestatud andmetega seljuhul midagi peale hakata. Probleemi lahendamiseks kasutatakse failisüsteemi, | ||
| - | Portatiivsetel mäluseadmetel ja mälukaartidel on laialt levinud FAT (File Allocation Table) failisüsteem, | + | Portatiivsetel mäluseadmetel ja mälukaartidel on laialt levinud FAT (File Allocation Table) failisüsteem, |
| - | ===== Praktika ===== | + | SD mälukaardid on saadaval kolmes füüsilises korpuses, millest kõige suurem on nn tavaline SD kaart, väiksem miniSD kaart ja kõige väiksem microSD kaart. microSD kaart on levinud mobiiltelefonides ja tahvelarvutites. Samuti on see formaat kasutusel ka Robootika Kodulabori Kontrollermoodulil. Lisaks välisele korpusele jagatakse SD kaardid veel põlvkondadeks: |
| + | * I põlvkond: SD - mahuga kuni 2 GB | ||
| + | * II põlvkond: SDHC - mahuga kuni 32 GB | ||
| + | * III põlvkond: SDXC - mahuga kuni 2 TB | ||
| - | [{{ : | + | < |
| - | Kodulabori Kontrollermooduli plaadil on pesa Micro SD mälukaardi sisestamiseks. Ühendatud | + | SD kaardid on erineva kiirusega, mille määratlemiseks kasutatakse klasside süsteemi (inglise keeles //Speed Class Rating//, lühend SCR) |
| + | Levinumad kiiruse klassid | ||
| + | * 2 MB/s | ||
| + | * 4 MB/s | ||
| + | * 6 MB/s | ||
| + | * 10 MB/s | ||
| - | Kodulabori teeki on integreeritud FatFs failisüsteemi moodul millega on võimalik lähemalt tutvuda [[http:// | + | ===== Praktika ===== |
| - | + | ||
| - | FatFs failisüsteemi moodulis on SD kaardiga suhtlemiseks kaks kihti. Esimene ketta kiht paikneb failides diskio.h ja mmc.c. See on otseselt seotud kettaga suhtlemise ja selle initsialiseerimisega. Lisaks paiknevad seal madala taseme kettale kirjutamise ja lugemisega seotud funktsioonid. Lõppkasutaja jaoks kõige tähtsam funktsioon on // | + | |
| - | + | ||
| - | Failisüsteemi tööks on vaja funktsiooni // | + | |
| - | + | ||
| - | Teine failisüsteemi kiht (FatFs) paikneb failis ff.c ja ff.h. Teine kiht suhtleb esimese kihiga madala taseme funktsioonide kaudu ja võimaldab teha failidega seotud toiminguid. Failisüsteemi saab ühendada alles peale ketta töökorda seadmist funktsiooniga // | + | |
| - | Peale ketta ja failisüsteemi töökorda seadmist saab alustada tööd konkreetsete failidega. Faili avamiseks | + | Kodulabori Kontrollermoodulil on pesa microSD mälukaardi sisestamiseks. Mälukaart |
| + | Kodulabori teeki on integreeritud FatFs failisüsteemi moodul millega on võimalik lähemalt tutvuda aadressil: [[http://elm-chan.org/fsw/ff/ | ||
| - | Järgmine näide demonstreerib tekstifaili lugemist ja kirjutamist. Nupule S1 vajutades initsialiseeritakse ketas ja failisüsteem. Nupu S3 vajutamine loob kettale kausta, kuhu omakorda luuakse fail. Faili kirjutatakse ka sisu. Nupp S2 kuvab tekitatud faili sisu ekraanile. | + | Failisüsteemi tööks on vaja välja kutsuda funktsioon // |
| - | ~~PB~~ | + | Teine failisüsteemi kiht paikneb failides //ff.c// ja //ff.h//. See kiht suhtleb esimese kihiga madala taseme funktsioonide kaudu ja võimaldab teha failidega seotud toiminguid. Failisüsteemi saab ühendada alles peale ketta töökorda seadmist, milleks on funktsioon // |
| + | Peale ketta ja failisüsteemi töökorda seadmist saab alustada tööd konkreetsete failidega. Faili avamiseks on funktsioon //f_open//, millele saab ette anda, millises režiimis see avatakse. Valikuid on mitmeid, näiteks // | ||
| + | Järgmine näide demonstreerib tekstifaili lugemist ja kirjutamist. Nupule S1 vajutades initsialiseeritakse kaart ja failisüsteem. Nupu S3 vajutamisel luuakse kettale kaust, kuhu omakorda luuakse fail. Faili kirjutatakse ka sisu. Nupp S2 kuvab tekitatud faili sisu ekraanile. | ||
| + | \\ | ||
| + | \\ | ||
| + | \\ | ||
| <code c> | <code c> | ||
| + | // Kodulabori SD kaardi kasutamise näidisprogramm | ||
| #include < | #include < | ||
| #include < | #include < | ||
| Line 41: | Line 52: | ||
| #include < | #include < | ||
| + | // Põhiprogramm | ||
| int main (void) | int main (void) | ||
| { | { | ||
| - | int f_err_flag = -1; //Ketta vea lipp | + | // Ketta vea lipp |
| - | int d_err_flag = -1; // | + | int f_err_flag = -1; |
| + | // Failisüsteemi | ||
| + | int d_err_flag = -1; | ||
| char f_err_buf[16]; | char f_err_buf[16]; | ||
| char d_err_buf[16]; | char d_err_buf[16]; | ||
| Line 59: | Line 73: | ||
| unsigned char new_value3, old_value3 = 0; | unsigned char new_value3, old_value3 = 0; | ||
| - | // Seab LEDid töökorda ja lülitab | + | // LED-ide |
| pin_setup_output(led_red); | pin_setup_output(led_red); | ||
| pin_setup_output(led_yellow); | pin_setup_output(led_yellow); | ||
| pin_setup_output(led_green); | pin_setup_output(led_green); | ||
| - | // Ekraani | + | // LCD ekraani |
| lcd_gfx_init(); | lcd_gfx_init(); | ||
| - | |||
| - | // Kursori (nähtamatu) ekraani keskele viimine | ||
| lcd_gfx_goto_char_xy(3, | lcd_gfx_goto_char_xy(3, | ||
| - | |||
| - | // Programmi nime kuvamine | ||
| lcd_gfx_write_string(" | lcd_gfx_write_string(" | ||
| + | // Lõputu tsükkel | ||
| while (1) | while (1) | ||
| { | { | ||
| - | // Loeb nuppude väärtused. | + | // Nuppude väärtuste lugemine |
| - | new_value1 = pin_get_debounced_value(button1); | + | new_value1 = pin_get_debounced_value(button1); |
| new_value2 = pin_get_debounced_value(button2); | new_value2 = pin_get_debounced_value(button2); | ||
| new_value3 = pin_get_debounced_value(button3); | new_value3 = pin_get_debounced_value(button3); | ||
| Line 83: | Line 94: | ||
| if((!new_value1) && (old_value1)) | if((!new_value1) && (old_value1)) | ||
| { | { | ||
| - | // SD kaardi initsialiseerimine. Ebaõnnestumise korral seatakse vealipp. | + | // SD kaardi initsialiseerimine |
| + | // Ebaõnnestumise korral seatakse vealipp. | ||
| d_err_flag = disk_initialize(0); | d_err_flag = disk_initialize(0); | ||
| sw_delay_ms(2); | sw_delay_ms(2); | ||
| - | // Failisüsteemi initsialiseerimine. Ebaõnnestumise korral seatakse vealipp. | + | // Failisüsteemi initsialiseerimine |
| + | // Ebaõnnestumise korral seatakse vealipp. | ||
| f_err_flag = f_mount(0, & | f_err_flag = f_mount(0, & | ||
| sw_delay_ms(2); | sw_delay_ms(2); | ||
| } | } | ||
| - | | + | // Nupp S2 vajutatud. Registreeritakse ainult üks vajutus |
| if((!new_value2) && (old_value2)) | if((!new_value2) && (old_value2)) | ||
| { | { | ||
| - | // Faili " | + | // Faili " |
| f_open(& | f_open(& | ||
| - | // Failist esimese 14 tähemärgi lugemine. | + | // Failist esimese 14 tähemärgi lugemine |
| f_gets (read_buf, | f_gets (read_buf, | ||
| f_close(& | f_close(& | ||
| - | // Faili esimese 14 tähemärgi ekraanile kirjutamine. | + | // Faili esimese 14 tähemärgi ekraanile kirjutamine |
| lcd_gfx_goto_char_xy(0, | lcd_gfx_goto_char_xy(0, | ||
| lcd_gfx_write_string(read_buf); | lcd_gfx_write_string(read_buf); | ||
| Line 111: | Line 124: | ||
| if((!new_value3) && (old_value3)) | if((!new_value3) && (old_value3)) | ||
| { | { | ||
| - | // Suvaline muutuja, mis salvestatakse faili. | + | // Suvaline muutuja, mis salvestatakse faili |
| variableName = 4; | variableName = 4; | ||
| - | // Kettale luuakse kaust " | + | // Kettale luuakse kaust " |
| f_mkdir(" | f_mkdir(" | ||
| - | // Loodud kausta tekitatakse tekstifail " | + | // Loodud kausta tekitatakse tekstifail " |
| f_open(& | f_open(& | ||
| - | // Fail avatakse | + | // Fail avatakse |
| f_open(& | f_open(& | ||
| - | // Faili kirjutamine. | + | // Faili kirjutamine |
| f_printf(& | f_printf(& | ||
| Line 130: | Line 143: | ||
| } | } | ||
| - | // Jätab eelmise | + | // Eelmise |
| old_value1 = new_value1; | old_value1 = new_value1; | ||
| old_value2 = new_value2; | old_value2 = new_value2; | ||
| old_value3 = new_value3; | old_value3 = new_value3; | ||
| - | // Kui SD-kaart on initsialisseritud | + | // Kui SD-kaart on initsialiseeritud |
| - | // ja vastupidisel juhul punane LED. | + | // roheline LED ja vastupidisel juhul punane LED |
| if((f_err_flag == 0) && (d_err_flag == 0)) | if((f_err_flag == 0) && (d_err_flag == 0)) | ||
| { | { | ||
| Line 162: | Line 175: | ||
| sw_delay_ms(2); | sw_delay_ms(2); | ||
| } | } | ||
| - | |||
| } | } | ||
| </ | </ | ||