Domov sieťový hardvér Pripojenie SD karty k mikrokontroléru. Záchrana dát z monolitických kariet SD a MicroSD kariet Pinout slot pre SD kartu

Pripojenie SD karty k mikrokontroléru. Záchrana dát z monolitických kariet SD a MicroSD kariet Pinout slot pre SD kartu

Artem Makarov alias Robin

27.09.2014

V poslednej dobe sa na obnovu dát čoraz viac dostávajú flash disky vyrobené na monokryštálovom základe, takzvané monolity. Dnes si povieme o procese obnovy dát z takéhoto monolitu – pamäťovej SD karty zaslanej partnerom z mesta Kemerovo. Video zo svadby bolo nahraté na kartu a keď bola oslava úspešne ukončená a nastal čas pustiť sa do editovania a vydávania darčekových DVD, flashka nadlho umierala.

Obnova monolitických pamäťových kariet SD

Je pozoruhodné, že zvonku nie je jasné, či ide o „klasickú“ SD kartu s doskou PCB, pamäťou NAND a ovládačom, alebo o monokryštál. Kým sa neotvorí plastový obal. Najčastejšie je zlyhanie takýchto pamäťových kariet spôsobené poruchou v prekladových tabuľkách. Menej často - elektromechanické poškodenie.

Ak chcete obnoviť súbory z takejto karty, prvá vec, ktorú musíte urobiť, je prečítať výpisy z kryštálu. Na tento účel sa mechanicky odstráni ochranný lak, ktorý skrýva stopy a kontaktné podložky monolitu (čistenie a brúsenie). Potom flash disk začne vyzerať takto:

Stopy a pinout monolitickej SD karty

Viditeľné sú kontaktné plôšky, ku ktorým je pripojená dátová zbernica, aktivácia čipu, obsadené čítanie/zápis, napájanie atď. Samozrejme, nič nie je označené a datasheety s podrobnosťami o tom, čo kde pripojiť, tiež nie sú voľne dostupné. Pinout možno nájsť buď tak, že vezmete presne ten istý funkčný flash disk (a existuje ich veľké množstvo typov a keď nájdete rovnaký konvenčný Kingston SD vzhľad, môžete vo vnútri získať úplne iné zariadenie) a vyzbrojený logický analyzátor, usilovne zisťovať, čo kam ide a prečo. Alebo zakúpením pinoutu od osoby/kancelárie, ktorá už pre vás takúto prácu vykonala.

Výsledok je asi takýto:

Alebo toto:

Teraz musíme eliminovať vnútorné transformácie vo výsledných výpisoch. Prvým krokom je odstránenie XOR masky, ktorú použil ovládač flash disku pri zapisovaní informácií do buniek NAND. S touto maskou vyzerá sektor takto:

a keď sa vyberie a použije požadovaná maska ​​XOR, sektor získa zmysluplný vzhľad:

Po odstránení transformácií XOR je potrebné nastaviť správnu geometriu sektora, popísať značky a oblasť korekcie údajov ECC. Opravte bitové chyby pomocou algoritmu ECC. Zistite, v akom poradí boli bloky umiestnené a ich veľkosť. Keďže typ regulátora nie je známy (je to monolit!), je potrebné určiť, ktorý kolektor použiť v tomto konkrétnom prípade. Bude to zostavovať konečný obrázok pomocou sektorovej značky alebo pomocou zvyšku prekladových tabuliek?

Po zostavení obrázka skontrolujte relevantnosť konfliktných blokov, ktoré majú rovnakú značku, a nahraďte do obrázka tie, s ktorými bude konečný výsledok najlepší. Po prijatí známeho obrázka so súborovým systémom ho môžete otvoriť v ľubovoľnom editore disku a nahrať súbory, ktoré používateľ potrebuje.

Samozrejme, mnohé operácie sú celkom automatizované, no napriek tomu je množstvo práce spojené s obnovou dát z monolitov (jednokryštálov) veľmi veľké. Nie každý inžinier alebo spoločnosť, ktorá obnovuje informácie, sa chce do takejto práce zapojiť. A cena za tento druh obnovy je veľmi vzdialená od pojmu „rozpočet“.

Tu je ďalší prípad na príklade obnovy SD Sandisk - rovnaký monolit, len vo vnútri vyrobený trochu inak:

Pripravené na čítanie

Obnova MicroSD flash diskov

A takto vyzerajú kontaktné podložky na Micro SD karte. Hneď je potrebné poznamenať, že toto je len niekoľko príkladov mnohých možností usporiadania.

A tu je možnosť pinout pre monolitickú pamäťovú kartu Memory Stick Pro Duo

Tým nechcem povedať, že ide o monolit, no nie je to ani obyčajný USB flash disk. Pamäťový čip (kryštál) je naplnený zmesou (lepidlom).

A takto vyzerá monolitická karta Olympus XD Picture, z ktorej bolo potrebné obnoviť fotografie:

Obnova poškodených Micro SD

Samostatne stojí za zmienku úspešné dokončenie úloh na obnovenie informácií z flash diskov MicroSD, ktoré boli rozbité na kusy, so zlomeným kusom, s prasklinami v tele atď. Niektoré príklady na obrázkoch nižšie:

Vo všetkých prípadoch, keď hovoríme o flash disku rozbitom na kúsky, s rozbitou časťou atď. Informácie je možné obnoviť, ak kryštál NAND zostane nedotknutý. Napríklad na mikroflash disku Sandisk z príkladu nižšie sa v dôsledku neopatrnej obsluhy odlomil kus a poškodil dráhy označené červeným oválom.

Laboratórium Hardmaster je jedno z mála, ktoré má skúsenosti a kvalifikáciu v oblasti obnovy dát z monolitických USB, SD, microSD, Memory Stick atď. pamäťové karty. Ak sú na vašom monolitickom rozbitom flash disku dôležité súbory, ktoré by ste chceli vrátiť, kontaktujte nás!

Pred niekoľkými rokmi v máji 2011 predstavil tvorca kultovej hry „Elite“ David Braben prvý koncept jednodoskového počítača Raspberry Pi. Tento moment sa stal zlomovým bodom v mojom živote. Myšlienka vytvoriť počítač veľkosti flash disku bola na povrchu, ale nabrala na obrátkach až s pomocou Raspberry Pi Foundation.

Už 25. júla 2011 bola zaradená do výroby alfa verzia počítača. Žiaľ, koncept projektu sa zmenil a teraz je umiestnený ako počítač veľkosti kreditnej karty. Napriek tejto okolnosti ho nasledovali milióny ľudí. Aj ja som poslúchol davový efekt a každý deň som kontroloval oficiálnu stránku projektu. Začalo sa dlhé a bolestivé čakanie na „zázrak“, ktorý sa stal 29. februára 2012 – začiatok predaja.

Raspberry Pi bolo možné zakúpiť prostredníctvom siete Farnell alebo od RS Components. Ako sa ukázalo, 29. februára bolo možné urobiť len predobjednávku. Žiadna z kancelárií nemala tieto tabule na sklade. Prvá várka zariadení bola len 10 000 kópií, takže vzhľadom na humbuk okolo projektu bolo zadanie objednávky veľmi ťažké. Po prekonaní všetkých ťažkostí bol však o 14:06 toho istého dňa počítač zakúpený za 46,73 £ od spoločnosti Farnell.

Trvalo tak dlho, kým sa splnila akákoľvek moja zahraničná objednávka. Nesmierne ma rozčúlilo, že spoločnosť Farnell, ktorá si za doručenie účtovala 20 £, odoslala balík 29. mája 2012 (o 2 mesiace neskôr) obyčajnou poštou bez čísla zásielky. Prekvapivo symbióza kráľovskej a ruskej pošty doručila zásielku 22. júna v poriadku. Toto bol najžiadanejší balík za posledných pár mesiacov, a tak som si, neschopná vydržať stres, musela dať v práci voľno a utekať na poštu.

O tom, ako nakonfigurovať Raspberry Pi na prvé spustenie, nemá zmysel hovoriť. O pár rokov som s článkom na túto tému už napísaných v iných zdrojoch a tak ďalej YouTube Zverejnil sa dostatočný počet videí. Chcem hovoriť o pre mňa výraznej konštrukčnej chybe - nevhodnom umiestnení slotu na SD kartu. Keď je karta vložená, výrazne vyčnieva za dosku, čo kazí vzhľad domáceho puzdra.

Na vyriešenie tohto problému existujú dve možnosti: prispájkovať SD->microSD adaptér paralelne ku konektoru nainštalovanému na Raspberry Pi (ako sa to robí si môžete prečítať v článku o Habré), alebo použiť Low-profile MicroSD-> SD adaptér. Prvá možnosť je pre mňa jednoducho neprijateľná - no, neodvážim sa spájkovať dosku, pretože ... Obávam sa, že pokazím prezentáciu mojej Maliny. Myslím si, že najlepšou voľbou je použiť nízkoprofilový adaptér.

Spočiatku sa rozhodlo o kúpe takéhoto adaptéra v jednom zo zahraničných internetových obchodov. Existuje možnosť výberu, ale náklady na takéto drobnosti sú jednoducho neprimerané. Najlacnejšie kópie stoja 10 dolárov a niektoré vzorky úprimne vyzerajú ako domáce. Konečné rozhodnutie vyrobiť si adaptér sami bolo urobené po návšteve webovej stránky DIYGadget. Všimnite si, aké ľahké je zopakovať ich vytvorenie.

pripravený? Prejdime od slov k činom. Aby bol adaptér správny, preštudujme si špecifikácie pre karty SD a microSD. Do tabuliek 1, 2 som sa snažil systematizovať všetko potrebné pre výrobu.

Tabuľka 2: Vývod pamäťovej karty SD

Pripojením príslušných kontaktov na pamäťových kartách a spojením Vss1, Vss2 získame schému elektrického obvodu adaptéra.

Na výrobu adaptéra potrebujeme:
1) Držiak pre microSD (CF TFC-WPCE-08 MICROSD CARD) – 52,22 rub.
2) Kus obojstranného fóliového sklolaminátu s plochou cca 4 cm 2 (2% polohy FÓLIE SKLO TEXTOLIT 1,5 MM 2 STRANY) – 3 ruble.
3) Materiály na inštaláciu (chlorid železitý, cín, tavivo) - 10 rubľov.

Potom náklady na projekt budú 65 rubľov 22 kopeckov a určité množstvo voľného času. Aby ste znížili náklady na dizajn, môžete vymeniť držiak microSD karty za CF TFC-WPCER-08 MICROSD CARD. Žiaľ, tento tovar nebol dostupný na sklade Promelektronika JSC, preto som si zakúpil drahší variant. Dávam do pozornosti, že ak zmeníte typ držiaka, možno nebudete môcť použiť moju šablónu na LUT (technológiu laserového žehlenia).

Na návrh PCB som použil Autocad, pretože... môj obľúbený SprintLayout ma nedokázal potešiť prítomnosťou požadovanej šablóny. Pre tých, ktorí radi upravujú plošný spoj, si môžu stiahnuť zdroj vo formáte DWG a ak nie je potreba, tak zárez vo formáte PDF (odporúčam skontrolovať rozmery pred aplikáciou PDF šablóny).

Po prenesení šablóny na dosku odporúčam vyvŕtať otvory s priemerom 0,5 mm na prechod z jednej vrstvy do druhej.

Prechod z vrstvy na vrstvu robím pomocou tenkého drôtu, ktorý som predtým ožiaril stopy budúceho adaptéra. V miestach, kde sú otvory umiestnené pod držiakom microSD, je potrebné odbrúsiť kvapky cínu pilníkom, aby bol nainštalovaný bez skreslenia. Nakoniec nainštalujeme držiak. Ak boli počas výrobného procesu dosky použité rôzne tavidlá, pred vložením do Raspberry Pi dosku umyte.

Vyrobte si adaptér sami alebo si ho kúpte – výber je na vás. Aby bol váš výber informovanejší, špeciálne pre vás som vybral niekoľko odkazov na nákup:
1) Raspberry Pi Premium nízkoprofilový adaptér MicroSD (TF) na SD karty. Ochranná doska.
2) Raspberry Pi Nízkoprofilový adaptér MicroSD na SD karty, SD karta sa nepoškodí!!
3) Adaptér MicroSD na "krátky" SD / RS-MMC. Pre vozíky Everdrive, Raspberry Pi atď.
4) Nízkoprofilový adaptér MicroSD na SD karty pre Raspberry Pi.
5) Adaptér na SD kartu pre Raspberry pi REV2 + doprava zdarma.

Na záver by som chcel povedať, že všetok materiál je určený len na informačné účely. Použitie vývoja na komerčné účely je prísne zakázané. Reprodukcia materiálov je možná len s mojím súhlasom a v súlade s odkazmi na pôvodný zdroj. Tí, ktorí ma chcú podporiť nielen slovom, ale aj skutkom a zároveň poďakovať, nech sa mi ozvú.

Ak chcete zariadenie zostaviť sami, musíte si stiahnuť nasledujúce súbory:
1. Zdrojová doska pre LUT vo formáte DWG
2. Platba za LUT vo formáte PDF

Veľa šťastia vo vašom snažení!!!

Lekcia 33

Časť 1

SPI. SD karta. TUK

Dnes budeme pokračovať v našej obľúbenej téme o rozhraní SPI. S touto zbernicou spájajúcou ovládače Atmega8a a ATTtiny2313 sme skončili. A dnes si skúsime cez túto zbernicu pomocou tohto rozhrania pripojiť pamäťovú kartu k mikrokontroléru SD (Secure Digital).

Túto kartu je možné pripojiť aj cez rozhranie SDIO, ale keďže takéto rozhranie náš radič hardvérovo nepodporuje, v tejto lekcii sa ho nebudeme dotýkať. Zaujíma nás typ autobusového spojenia SPI, keďže už máme dobré nahromadené znalosti o tejto téme, ako aj hardvérovú podporu v ovládači, ktorý programujeme.

Napriek tomu sa pozrieme na rozloženie nožičiek kariet pri oboch typoch

No keďže nás zaujíma druhý typ, budeme sa mu venovať.

A tu nie je veľa na pochopenie. Všetky tieto skratky poznáme. Všetky štandardné kolíky rozhrania SPI sú tu a tu nie je nič zbytočné.

Teraz o mape všeobecne. Táto karta nám umožňuje ukladať dáta, jej typ pamäte je FLASH, ktorá je v porovnaní s pamäťou typu EEPROM tiež energeticky nezávislá, to znamená, že po vypnutí napájania dáta nikde nezmiznú, ale zostanú uložené. Aj táto pamäť má rozdiely, spoznáme ich počas procesu programovania. Jedným z hlavných rozdielov je, že rovnako ako v pamäti EEPROM nemôžeme do tejto pamäte zapísať jeden bajt. Teoreticky samozrejme môžeme, ale budú sa tam písať buď len jednotky z nášho bajtu alebo len nuly, podľa typu FLASH - NOR alebo NAND. To znamená, že pred zápisom bajtu ho musíme vymazať a vzhľadom na organizáciu tejto pamäte môžeme mazať len po blokoch, takže môžeme písať len po blokoch. Ale je tu najväčší rozdiel oproti EEPROM - to je cena. Na jednu uloženú jednotku informácie (za megabajt, za gigabajt) je to mnohonásobne lacnejšie, niekedy aj rádovo lacnejšie. Preto má FLASH pamäť zvyčajne vždy oveľa väčšie množstvo informácií.

Existujú 4 typy SD, ale budeme to študovať trochu neskôr.

Pripojme túto kartu, keď sme v Proteuse

Všetko je tu jednoduché. Vlastne nie celkom tak. Treba viac odporov

Tieto odpory sú potrebné na zabezpečenie vhodnej úrovne, pretože karta je napájaná 3,3 V. Vo všeobecnosti, podľa technickej dokumentácie, od 2,7 do 3,6 voltov.

Tiež to nie je uvedené v proteuse, ale v skutočnosti budeme napájať našu kartu zo samostatného zdroja napájania inštaláciou mikroobvodu, ktorý prevádza 5 voltov na 3,3 voltov.

Alebo skôr nebudeme nič inštalovať, ale použijeme hotový modul, v ktorom je už všetko nainštalované.

Máme pripojený aj displej, ako pri rozširovaní funkcionality knižnice displejov.

Takto to všetko vyzerá v praxi:

Takto vyzerá modul s držiakom

Takýto modul nájdete všade, stojí cent. Modul, ktorý sa pripája cez SDIO, stojí viac. Tiež vidíme, že modul už má nainštalovaný mikroobvod na zníženie napätia na 3,3 voltu. A pripájame napájanie iba k 5 voltovému kontaktu a nepripájame nič k 3.3

Na module sú tiež nainštalované všetky rozdeľovače úrovní, to znamená, že tento modul je navrhnutý špeciálne na pripojenie k 5-voltovým zariadeniam.

A vykopal som flash kartu na testovanie s 32 megabajtmi, presne megabajt a nie gigabajt

Túto flash kartu sme dostali ako darček spolu s nejakým fotoaparátom a najlepšie sa hodí na naše testy, aspoň si nebudeme myslieť, že tá alebo tá chyba je spôsobená príliš veľkým množstvom pamäte na karte.

Celý kód bol prevzatý aj z minulej lekcie spolu s knižnicou displeja, keďže funkciu, ktorú sme vytvorili v minulej lekcii, budeme využívať veľmi aktívne, no samozrejme bol vytvorený nový projekt a podľa toho aj pomenovaný MYSD_SPI.

Odstránime nepotrebné riadky, v main() budeme mať iba toto

intHlavná( neplatné)

nepodpísanéinti;

Port_ini();

LCD_ini(); //inicializácia displeja

Clearlcd(); //vymazať displej

Setpos(0,0);

Str_lcd( "reťazec 1");

Setpos(2,1);

Str_lcd( "reťazec 2");

Setpos(4,2);

Str_lcd( "reťazec 3");

Setpos(6,3);

Str_lcd( "Reťazec 4");

Oneskorenie_ms(2000);

// pre (i=0;i<=22;i++) {str80_lcd(buffer2+i*20);_delay_ms(1000);}

Zatiaľ čo(1)

Keďže text nebudeme vypisovať znak po znaku, môžeme použiť typ char v premennej

nepodpísanéchar i;

Teraz ešte jedna nuansa.

Na to, aby sme v Proteuse mohli pracovať s SD kartou, nám nestačí pridať samotný držiak s kartou, musíme v jej vlastnostiach pripojiť aj obrazový súbor flash karty.

Nie je ťažké ho vytvoriť. Jedným zo spôsobov je vytvorenie pomocou programu WinImage.

Vytvoríme v ňom nový súbor pomocou položky menu Súbor -> Nový. Vyberte poslednú položku v dialógovom okne a kliknite na tlačidlo "OK"

Na test v Proteuse nám stačí veľkosť 4 megabajty, takže v ďalšom dialógu zmeníme pole s počtom sektorov a vyberieme aj formát FAT12/16, pretože špecifiká práce s 32- bitový súborový systém sa mierne líši a tiež klikneme na „OK“

Vo všeobecnosti samozrejme môžeme nechať FAT32, keďže so súborovým systémom ešte nepracujeme, ale v ďalších častiach lekcie budeme pracovať so súborovým systémom a budeme pracovať s 16.12.

Potom náš vytvorený súbor uložíme pomocou položky ponuky Súbor -> Uložiť ako. A uložíme do priečinka, kde máme uložený projekt proteus. Pomenujeme súbor a klikneme na „Uložiť“

Potom sa tiež budeme musieť uistiť, že tento súbor nie je s atribútom „len na čítanie“, a potom ho budeme môcť pripojiť v Proteus. Budete musieť ručne zadať názov súboru, pretože Proteus vyžaduje nejaký formát a náš súbor jednoducho nebude viditeľný

Nepotrebujeme žiadnu cestu, pretože súbor sa nachádza v priečinku projektu. Kliknite na „OK“.

Nemusíme inicializovať zbernicu, pretože naše SPI bude založené na softvéri, nie všetky flash karty fungujú správne s hardvérom, takže nebudeme musieť používať žiadne registre. Hardvér je samozrejme lepší, ale aby ste dôkladne pochopili, ako protokol funguje, musíte pracovať aj so softvérom, teda šklbať nohami portov. Vo všeobecnosti sa pri pohľade na diagram môže zdať, že máme všetko v hardvéri, keďže som si vybral presne tieto nohy, je to preto, že som si to tak vybral, takže neskôr možno niekto vyskúša prácu s pneumatikami implementácie hardvéru .

Pridajme makro substitúcie pre portové nohy

#include"hlavný.h"

#definovaťMOSI3

#definovaťMISO4

#definovaťSCK5

#definovaťSS2

Pridajme kód na inicializáciu nôh do funkcie inicializácie portu

neplatnéport_ini( neplatné)

PORTD=0x00;

DDRD=0xFF;

PORTB|=(1<< SS)|(1<< MISO)|(1<< MOSI);

DDRB|=(1<< SS)|(1<< MOSI)|(1<< SCK);

MISO pin necháme na vstupe, keďže štandardne sú všetky bity v registri nulové a jednoducho sa ho nedotkneme. Okamžite tiež zapneme vysokú úroveň v MOSI a SS a vytiahneme odpor na MISO.

Napíšme si funkciu na prenos bajtu cez SPI zbernicu

neplatnéSPI_SendByte( nepodpísanécharbyte)

{

}

Pridajme premennú pre cyklus a samotný cyklus

neplatnéSPI_SendByte( nepodpísanécharbyte)

nepodpísanéchari;

pre( i=0; i<8; i++) //presun po bitoch bajtu

{

}

Myslím, že je jasné, prečo počítame do 8, keďže prenášame presne 8 bitov.

No, začnime ich postupne prenášať.

Najprv skontrolujeme bit úplne vľavo, izolujeme ho od celého bajtu maskovaním, a ak sa rovná 1, nastavíme ho na 1 na zbernici MOSI a ak je 0, zbernice sa nedotkneme.

pre( i=0; i<8; i++) //presun po bitoch bajtu

Na displeji sme zobrazili obrázok z SD karty, ale chýbali v ňom niektoré body, prvým bolo pripojenie samotnej karty, druhým bolo, že sa brala do úvahy iba časť funkcií knižnice. Petit FatFs, pozrime sa na tieto body podrobnejšie.

Komunikácia s kartou je možná cez jedno z dvoch rozhraní, SPI alebo SD.



Treba povedať, že rozhranie SD môže fungovať v jednobitovom aj štvorbitovom režime.

Schéma zapojenia karty cez SPI je štandardná a nevyužité piny karty je potrebné pripojiť k zdroju pomocou 10K odporu.


Ale v amatérskych návrhoch sa často zanedbávajú pull-up odpory, čo zjednodušuje schému zapojenia.

Treba si uvedomiť, že pri pripojení cez SPI je karta veľmi náročná na napájacie napätie a mierny pokles napájacieho napätia vedie k nefunkčnosti karty, to je odskúšané z vlastnej skúsenosti, o SD niet čo povedať. rozhranie, ešte som to neskúšal. Toto všetko som napísal, aby som to myslel Pre napájanie nezabudnite nainštalovať kondenzátory. Čo sa týka tlmivky, mala by byť navrhnutá na prúd do 100mA, ale nie je potrebné ju inštalovať.

Vyššie uvedené diagramy ukazujú, že karta potrebuje na prevádzku 3,3 voltov, napätie v prenosových vedeniach by nemalo prekročiť rozsah 0 - 3,3 voltov a tu vyvstáva otázka, čo robiť, ak je MK napájaný; 5 voltov?
Odpoveď je jednoduchá, musíte zosúladiť dátové linky, a to sa dá urobiť pomocou konvenčného odporového deliča.


Diagram ukazuje, že linka MISO nemusí byť koordinovaná rovnakým spôsobom, ako sa dáta prenášajú cez túto linku z karty na MK.
V skutočnosti málokto pripojí kartu priamo k MK, oveľa pohodlnejšie je pripojiť konektor karty k MK alebo kúpiť štít s konektorom a všetkými potrebnými kabelážami.

Spojenie sme vyriešili, poďme sa teraz pozrieť na to, ako používať knižnicu Petit FatFs, ktorý je určený pre 8-bitové mikrokontroléry s malými veľkosťami pamäte.

Knižnica pozostáva z 5 súborov:
celé číslo.h- hlavičkový súbor, ktorý popisuje hlavné typy údajov.

diskio.h- hlavičkový súbor, v ktorom sú deklarované prototypy nízkoúrovňových funkcií pre prácu s diskom a stavové kódy, ktoré vracajú.

diskio.c- v tomto súbore musia byť implementované nízkoúrovňové funkcie;

pffсonf.h- konfiguračný súbor.

pff.h- hlavičkový súbor, v ktorom sú deklarované prototypy funkcií na interakciu so súborovým systémom disku.

pff.c- súbor obsahuje implementácie funkcií pre interakciu so súborovým systémom disku.

Je vidieť, že na to, aby knižnica fungovala, je potrebné implementovať nízkoúrovňové funkcie. Ale ak hovoríme o AVR alebo PIC, pre nich si na webovej stránke môžete stiahnuť príklad práce s knižnicou, ktorá obsahuje súbor mmc, už implementuje nízkoúrovňové funkcie. Musíte tiež nakonfigurovať knižnicu v súbore pff.h a napísať funkcie potrebné na prevádzku SPI.

Funkcie Petit FatFs.

FRESULT pf_mount (FATFS*)- funkcia pripojí/odpojí disk. Túto funkciu je potrebné zavolať pred prácou s diskom, ak funkciu zavoláte s nulovým ukazovateľom, disk sa odpojí. Funkciu je možné vyvolať kedykoľvek.

možnosti
FATFS* fs- ukazovateľ na objekt typu FATFS popis tejto štruktúry nájdete v súbore pff.h. Potrebujeme len deklarovať premennú tohto typu.

Návratové hodnoty:
FR_OK (0)
FR_NOT_READY- zariadenie sa nedá inicializovať
FR_DISK_ERR- pri čítaní z disku sa vyskytla chyba
FR_NO_FILESYSTEM- disk nemá platnú oblasť FAT

FATFS fs;//deklarujeme objekt typu FATFS //pripojíme disk, ak (pf_mount(&fs) == FR_OK) ( //disk je pripojený, pracujeme s ním //odpojíme disk pf_mount(NULL); ) else ( //nepodarilo sa pripojiť disk )

FRESULT pf_open (cesta const char*)- funkcia otvorí existujúci súbor. Po otvorení súboru s ním môžete pracovať, teda čítať z neho a zapisovať doň. S otvoreným súborom môžete pracovať, kým sa neotvorí iný súbor. Funkciu je možné vyvolať kedykoľvek.

možnosti
const char* cesta- ukazovateľ na reťazec označujúci cestu k súboru. Cesta musí byť špecifikovaná úplne vo vzťahu ku koreňovému adresáru, pričom sa adresáre oddeľujú lomkou.

Návratové hodnoty:
FR_OK (0)- vráti, ak je funkcia úspešná
FR_NO_FILE- súbor nenájdený
FR_DISK_ERR- chyba disku
FR_NOT_ENABLED- disk nebol namontovaný

FATFS fs;//deklaruje objekt typu FATFS //pripojí disk if (pf_mount(&fs) == FR_OK) ( //otvorí súbor umiestnený v koreňovom adresári if(pf_open("hello.txt") == FR_OK ) ( //urobte niečo ) //otvorte súbor umiestnený v priečinku new if(pf_open("new/hello.txt") == FR_OK) ( //urobte niečo ) //odpojte disk pf_mount(NULL) else ( //); Nepodarilo sa pripojiť disk)

FRESULT pf_read(void* buff, WORD btr, WORD* br)- funkcia načíta zadaný počet bajtov zo súboru a uloží ich do vyrovnávacej pamäte. Ak je počet prečítaných bajtov menší, ako je uvedené, dosiahol sa koniec súboru.
#define _USE_READ 1

Možnosti:
void* buff- ukazovateľ na vyrovnávaciu pamäť, v ktorej sú uložené načítané dáta
SLOVO btr- počet bajtov, ktoré sa majú prečítať
SLOVO*br- ukazovateľ na premennú, ktorá uchováva počet prečítaných bajtov.

Návratové hodnoty:
FR_OK (0)- vráti, ak je funkcia úspešná
FR_DISK_ERR- chyba disku
FR_NOT_OPENED- súbor nebol otvorený
FR_NOT_ENABLED- disk nebol namontovaný

FATFS fs;//deklaruje objekt typu FATFS BYTE buff;//vyrovnávacia pamäť pre čítanie súboru WORD br; //počítadlo čítaných bajtov //pripojenie disku if (pf_mount(&fs) == FR_OK) ( //otvorte súbor umiestnený v koreňovom adresári if(pf_open("hello.txt") == FR_OK) ( //prečítajte 10 bajtov z toho pf_read(buff, 10, &br if(br != 10) ( //ak sa br nerovná 10 //to znamená, že sme dosiahli koniec súboru) ) );

FRESULT pf_write(const void* buff, WORD btw, WORD* bw)- funkcia umožňuje zapisovať dáta do otvoreného súboru. Aby funkcia fungovala, je potrebné zapísať do súboru pffconf.h
#define_USE_WRITE 1

Možnosti:
void* buff- ukazovateľ na buffer, ktorý chceme zapísať, nulová hodnota ukončí záznam
SLOVO btw- počet bajtov, ktoré chceme zapísať
SLOVO* bw- ukazovateľ na premennú uchovávajúci počet bajtov, ktoré bolo možné zapísať. Analýzou tejto premennej môžete zistiť, či bol dosiahnutý koniec súboru.

Návratové hodnoty:
FR_OK (0)- vráti, ak je funkcia úspešná
FR_DISK_ERR- chyba disku
FR_NOT_OPENED- súbor nebol otvorený
FR_NOT_ENABLED- disk nebol namontovaný

Vzhľadom na to, že knižnica je určená pre mikrokontroléry s malým množstvom pamäte, má táto funkcia niekoľko obmedzení:

  • Nemôžete vytvárať nové súbory a môžete zapisovať iba do existujúcich
  • nemôžete zväčšiť veľkosť súboru
  • nie je možné aktualizovať časovú pečiatku
  • Operáciu zápisu je možné spustiť/zastaviť iba na hranici sektora
  • atribút súboru iba na čítanie nemôže zabrániť zápisu

Aby ste pochopili predposledný bod, musíte vedieť, že pamäť karty je rozdelená na bloky (sektory) po 512 bajtoch a nahrávanie je možné spustiť len od začiatku sektora. Ak teda chceme zapísať 1000 bajtov, prvý sektor sa zapíše úplne a do druhého sa zapíše iba 488 bajtov a zvyšných 24 bajtov sa vyplní nulami.

Ak chcete zapisovať do otvoreného súboru, musíte vykonať nasledujúce kroky:

  • nastavte ukazovateľ na hranicu sektora, ak nie je nastavený na hranicu, ukazovateľ sa zaokrúhli na spodnú hranicu sektora
  • zavolajte funkciu write požadovaný počet krát
  • finalizujte záznam volaním funkcie s nulovým ukazovateľom

Aby sme mohli uviesť príklad fungovania funkcie nahrávania, je potrebné zvážiť ešte jednu funkciu.

FRESULT pf_lseek(posun DWORD)- nastaví ukazovateľ čítania/zápisu v otvorenom súbore. Ukazovateľ môžete nastaviť absolútnym alebo relatívnym posunom, pre absolútny posun musíte do funkcie zadať číslo
pf_lseek(5000);
pre relatívnu, odovzdajte hodnotu ukazovateľa na aktuálnu pozíciu fs.fptr a množstvo výtlaku
pf_lseek(fs.fptr + 3000);
Aby funkcia fungovala, je potrebné zapísať do súboru pffconf.h
#define_USE_LSEEK 1

Možnosti:
Offset DWORD- počet bajtov, o ktoré je potrebné posunúť ukazovateľ.

Návratové hodnoty:
FR_OK (0)- vráti, ak je funkcia úspešná
FR_DISK_ERR- chyba disku
FR_NOT_OPENED- súbor nebol otvorený

Údaje do súboru môžete zapisovať nasledovne.
FATFS fs;//deklaruje objekt typu FATFS BYTE buff;//vyrovnávacia pamäť pre čítanie súboru WORD br; //počítadlo prečítaných bajtov //pripojenie disku if (pf_mount(&fs) == FR_OK) ( //otvorte súbor umiestnený v koreňovom adresári if(pf_open("hello.txt") == FR_OK) ( //nastaviť ukazovateľ na prvý sektor pf_lseek(0) //zapis pf_write(buff, 10, &br //dokončenie záznamu pf_write(0, 0, &br));

Nechávam tu tiež časť skutočne fungujúceho kódu, ktorý využíva všetky funkcie opísané vyššie.
#define F_CPU 8000000UL #define buff_size 10 #include #include #include "diskio.h" #include "pff.h" #include "spi.h" FATFS fs;//deklaruje objekt typu FATFS BYTE read_buff;//buffer na čítanie súboru BYTE write_buff = "ahoj slovo"; /// /buffer pre zápis do súboru UINT br; //počítadlo bajtov read int main(void) ( //pripojenie disku if (pf_mount(&fs) == FR_OK) ( //otvorte súbor umiestnený v novom priečinku if(pf_open("new/hello.txt")) == FR_OK) ( //nastavenie ukazovateľa zápisu pf_lseek(0); //zápis pf_write(zápis_buff, veľkosť_buffu, &br); //dokončenie zápisu pf_write(0, 0, &br); //nastavenie ukazovateľa čítania pf_lseek( 0 //prečítaj si, čo bolo napísané pf_read(read_buff, buff_size, &br); if(br != veľkosť_buff) ( //ak sa br nerovná veľkosti_buff //to znamená, že sme dosiahli koniec súboru) ) //odpojenie disku pf_mount(NULL ) while(1) ( ) );

FRESULT pf_opendir(DIR* dp, const char * cesta)- funkcia otvorí existujúci adresár a vytvorí smerník na objekt typu DIR, ktorý sa použije na získanie zoznamu súborov v otvorenom adresári.
Aby funkcia fungovala, je potrebné zapísať do súboru pffconf.h
#define_USE_DIR 1

Možnosti:
DIR *dp- ukazovateľ na premennú typu DIR.

const char * cesta- ukazovateľ na reťazec, ktorý obsahuje cestu k adresáru, adresáre sú oddelené lomkou

Návratové hodnoty:
FR_OK (0)- vráti, ak je funkcia úspešná
FR_NO_PATH- nemohol nájsť cestu
FR_NOT_READY- nepodarilo sa inicializovať disk
FR_DISK_ERR- chyba disku
FR_NOT_ENABLED- disk nebol namontovaný

//deklarácia premenných FATFS fs; DIR dir; //pripojenie disku pf_mount(&fs); //otvorte adresár pf_opendir(&dir, "MY_FOLDER");

FRESULT pf_readdir(DIR* dp, FILINFO* fno)- funkcia umožňuje čítať obsah adresára. Ak to chcete urobiť, musíte otvoriť adresár pomocou funkcie pf_opendir() a zavolať pf_readdir(). Pri každom volaní funkcie vráti názov objektu (priečinok/súbor), ktorý sa nachádza v zadanom adresári. Keď iteruje cez všetky objekty, vráti nulový reťazec v prvku poľa fno.fname.
Aby funkcia fungovala, je potrebné zapísať do súboru pffconf.h
#define_USE_DIR 1

Možnosti:
DIR *dp- ukazovateľ na premennú typu DIR, ktorá musí byť predtým deklarovaná

FILINFO *fno- ukazovateľ na premennú typu FILINFO, ktorá musí byť predtým deklarovaná.

Návratové hodnoty:
FR_OK- úspešné ukončenie funkcie
FR_DISK_ERR- chyba disku
FR_NOT_OPENED- adresár nie je otvorený

FATFS fs; FRESULT res; FILINFO fno; DIR dir; //pripojenie disku pf_mount(&fs); //otvorenie adresára res = pf_opendir(&dir, MY_FOLDER); //prečíta si obsah adresára pre(;;)( res = pf_readdir(&dir, &fno); //skontroluje, či sa pri čítaní nevyskytli nejaké chyby //a či sa v zadanom adresári nenachádzajú ďalšie súbory if ((res ! = FR_OK) ||. ( fno.fname == 0))( break; ) //vypíšeme pohodlným spôsobom fno.fname usart_sendStr(fno.name usart_sendStr(/r);

A nakoniec tu nechám pracovný návrh

  • Andreas hovorí:

    Zostavenie adaptéra Memory Stick vlastnými rukami nie je ťažké, ak poznáte účel funkčných kolíkov konkrétnej pamäťovej karty. Zvyčajne sa nazýva pinout pamäťovej karty alebo napríklad mikroobvod, čip atď. Vo všeobecnosti je technológia jednoduchá. Rozloženie pamäťovej karty MMC (MultiMedia Card) je vyrezané z PCB. Na doske je vyrezaných 7 stôp (MMC má 7 kolíkov). Potom, v súlade s pinoutom znázorneným na obrázku nižšie, sú stopy prispájkované na kolíky pamäťovej karty SD (má 9 kolíkov, z ktorých 2 sa nepoužívajú), microSD (má 8 kolíkov, z ktorých 2 tiež nie sú pamätajte, že pamäť microSD karty nemá výstup Vcc) alebo microM2 (vývod microM2 v súvisiacej téme Adaptér Memory Stick Micro M2). To je všetko. Adaptér Memory Stick je pripravený.

    P.S. Na sklade máme pamäťové karty MMC 1 a 2 GB. Náklady sú 285 a 360 rubľov. Doprava je zahrnutá v uvedenej cene.

    Lacno si môžete kúpiť aj nasledujúce veľkosti pamäťových kariet:
    - Memory Stick a Memory Stick M2;
    - Secure Digital (SD);
    - mini SD;
    - Micro SD (TF);
    - kompaktný blesk;
    -XD;
    - USB flash disky rôznych dizajnov a kapacít.
    Napríklad tieto:

  • slava hovorí:

    Mimochodom, nemám v týchto spisoch veľmi jasno. Na tejto stránke nemôžete získať skladby z MicroCD do MMC, budem vám veľmi vďačný.

  • Andreas hovorí:

    Takto bude vyzerať adaptér microSD na MMC:

  • slava hovorí:
  • Novinka na stránke

    >

    Najpopulárnejší