Diktafon pres USB

MK info@mcu.cz
Pondělí Červen 7 19:41:39 CEST 2004


Fakt me nebavi se hadat, proste jsem si to zvazil a poupravil si vlastni nazor na simulaci FATu, tot vse.

Tak jeste jednou a pomalu :-)
Mam medium, ktere je prostrednictvim USB MassStorage lehce formatovatelne z kazdeho PC.
Jaky FAT tam bude determinuje vlastni velikost datoveho media - na zaklade velikosti PC rozhodne 
jakym FATem medium naformatuje.

Ve vlastnim diktafonu si jednoduse zjistim:
- jaky FAT je pouzit
- kde mam FAT tabulky
- kde mi zacina root
- kde mam prvni volny sektor pro ukladani vlastnich dat
Jedna se o precteni a ulozeni par promennych z konkretnich lokaci v bootsektoru.

Do pracovnich promennych si ulozim
- adresu sektoru(clustru) s rootem
- pocet platnych zaznamu "direntry" - tedy pocet ulozenych souboru
- prvni volny sektor(cluster)
- adresu sektoru(clustru) se zacatkem FAT tabulky
- pocet obsazenych polozek v FATu
- adresu prvniho volneho sektoru(clustru) pro vlastni data
Toto opet zjistim z bootsektoru, pripadne projdu root a FAT tabulku - nic komplikovaneho - 
pouze cyklicke cteni, porovnani a inkrementovani :-))


Pri vlastnim zaznamu zvuku
- zacnu snimat data z AD a ukladat je na medium "za sebou" pocinaje adresou v promenne "adresa prvniho volneho sektoru pro data" 
- zaroven inkrementuji s kazdym zapisem pocitadlo ulozenych dat pro tento zaznam
-zaroven pri prekroceni velikosti sektoru(clustru) inkrementuji pocitadlo pouzitych sektoru(clustru) tohoto zaznamu
- to vse az do ukonceni zaznamu

Veskera matematika je jen pouhe INKREMENTOVANI promennych :-) na medium pouze zapisuji hlasovy zaznam, nic vic :-))

Po ukonceni zaznamu provedu:
- vytvorim a zapisi polozku direntry do rootu
- zaktualizuji zaznam ve FATtabulce
- zaktualizuji pracovni promenne

Veskera matematika je opet zoufale jednoducha a predstavuje opet jen inkrementovani pripadne scitani, maximalne nasobeni/deleni pomoci rotace
Vytvoreni direntry predstavuje nacteni sektoru a jeho zapis
Aktualizace FAT tabulky opet predstavuje mozne macteni JEDNOHO sektoru a zapis jednoho (vice) aktualizovanych sektoru

Nezlobte se, ale fakt mi to pripada jednodussi, nez pri kazdem pozadavku z USB zjistovat, kde co a jak mam vlastne odeslat :-))
A uz vubec to neni UPLNA IMPLEMENTACE FATu - to jste ponekud mimo obraz, co ta uplna implementace obnasi.
Az se potkame nekde na pivu, tak si to muzeme celkem dlouho a intenzivne objasnovat (ale radeji u vina) :-)))

Obdobnou zalezitost jsem resil v pripade prenosneho holteru - zaznam byl na CF, prenos dat do PC pres MassStorage
Zaznam byl kontinualni - po zapisu kazdeho sektoru dat se aktualizoval jak zaznam v direntry (velikost souboru),
tak i FATtabulka - o to to bylo komplikovanejsi - zaznam jednoho datoveho sektoru znamenal 2-3 zapisy sektoru na CF 
a 1-2 cteni sektoru z CF (Vse s ATmegou a urcite jsem si nemohl dovolit "na chvilku vytuhnout"  :-))) )
To je v pripade diktafonu zbytecne

Jo a jen tak mimochodem - vubec neni treba prilis RAM :-))) I na CF se necha zapisovat "on the flay" :-)))
V pripade CF jsem potreboval dva bufery o velikosti jednoho sektoru (2x512B)

Ta simulace FATu me sice napadla pre vikend, ale pak jsem si promyslel vsechny dusledky a proste mi prijde komplikovanejsi.
A o mne je jiz snad znamo, jak hrozne jsem liny :-))

S pozdravem
MK




Další informace o konferenci Hw-list