Jak w C na AVR sformatować pamięć FLASH do FAT 16??

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
kayron
Użytkownik
Posty: 2086
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Jak w C na AVR sformatować pamięć FLASH do FAT 16??

Post autor: kayron » 28 mar 2009, 15:20

Witam szukam rozwiązania następującego problemu. Jak sformatować układ pamięci FLASH ATMEL 45DB161B (16MB na SPI) za pomocą procesora AVR. Chodzi mi o procedurę w C która by to potrafiła zrobić. Odpada pomysł klasy, przylutować układ do płytki, podłączyć do komputera, sformatować i włożyć do układu docelowego. Mi chodzi właśnie o to aby potrafił to robić procesor AVR w układzie w którym ta kość zostanie zamontowana. ATMEGA 168, lub ATmega 32.
Jestem otwarty na ciekawe linki do tematów poświęconych formatowaniu dysków w FAT 16 w języku C, Pascal.

K_o_n_r_a_d
Użytkownik
Posty: 123
Rejestracja: 29 lip 2005, 10:21
Lokalizacja: Lublin

Post autor: K_o_n_r_a_d » 30 mar 2009, 12:43

A czy w ogóle znasz system plików FAT, każdy bajt w każdym sektorze co oznacza itd.? Skoro zadajesz takie pytanie to myślę, że nie... Dlatego najpierw poznaj system FAT - nie jest to trudne (pojęcie względne...), w internecie znajdziesz wszystko co jest potrzebne do tego a wtedy odpowiedz sama się nasunie.
Nie da się tego zapisać w jednej krótkiej procedurze tak aby bez znajomości systemu plików można było szybko zastosować.

Awatar użytkownika
kayron
Użytkownik
Posty: 2086
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 30 mar 2009, 16:50

Akurat podstawowe informacje o FAT znam. Nawet co oznaczają kolejne bajty, w danych sektorach. Lecz opisy które znalazłem w internecie (po polsku) nie są do końca kompletne, stanowią tylko ogólny zarys działania i idei systemu FAT. Natomiast nie udało mi się znaleźć projektu w którym, sam układ byłby w stanie przeprowadzić, operacje formatowania nośnika danych. Zawsze korzysta się z zewnętrznego nośnika, najczęściej w postaci karty MMC/SD sformatowanego w zwykłym komputerze. Ja natomiast posiadam kość pamięci FLASH która, jest przeznaczona do budowy takowych nośników, i posiada już architekturę podobną do MMC, lecz uproszczoną. Mógłbym niby wziąźć kartę MMC 16MB sformatować w komputerze, i na tej podstawie skopiować sobie tylko strukturę, do mojego FLASHa, ale oferowanych jest wiele tych kości w pojemnościach od 1 do 64MB, więc wolałbym bardziej się wysilić i stworzyć oprogramowanie które, będzie umiało ocenić rozmiar dołączonego FLASH i na tej podstawie go odpowiednio sformatować do FAT16.
Także nie musi to być koniecznie pojedyńcza funkcja. Właściwie to szukam linków do ciekawych, artykułów z EP, czy innych źródeł na temat systemu FAT 16, na podstawie których można by stworzyć takowe funkcje, czy nawet bibliotekę do formatowania nośników na układach scalonych pamięci FLASH na SPI, które są stosunkowo tanie, i stanowią bardzo ciekawą alternatywę dla kart MMC/SD, zważywszy, że rezygnuje się z złącz, co obniża koszty. Ja zapłaciłem za scalak 16MB w okolicy 6 zł, co na pewno stanowi atrakcyjną ofertę dla systemów przechowywania danych z AVR na pokładzie.

zyraf
Użytkownik
Posty: 145
Rejestracja: 23 sie 2005, 11:34
Lokalizacja: Nowy Dwor Mazowiecki
Kontakt:

Post autor: zyraf » 20 kwie 2009, 7:21

Witaj
Fat16 chyba poza poczatkiem dysku ma specjalnych danych, jesli pamietam dobrze to tak dziala tez szybkie formatowanie - dane sa wywalane tylko z tablicy fat, fizycznie jednak sa w dalszych czesciach dysku. Mozesz zrobic funkcje zerujaca calkowicie caly flash (ale to nie konieczne) i robiąca nowa tablice fat. Do tego reszta juz przy obsludze plików.
Jakies podstawy sa opisane w ksiazce 'Jak pisac wirusy' A. Dudka
pozdrawiam

Awatar użytkownika
DarkJarek
-
Posty: 44
Rejestracja: 21 mar 2006, 15:48
Lokalizacja: ...
Kontakt:

Post autor: DarkJarek » 20 kwie 2009, 23:07

Pamięci pewnie mają standardowe rozmiary to jest: 1MB, 2MB, 4MB, 8MB, 16MB itd. Więc możesz spróbować zapisywać coś po adresy trochę większe niż te powyżej s później spróbować to odczytać i porównać. Skoro pamięć ma być formatowana to pewnie nie zależy Ci na danych które się tam znajdują. A znając już rozmiar pamięci bez problemu można skonstruować system plików. I polecił bym system FAT32 wbrew pozorom jest prostszy(jest to odczucie subiektywne).

Awatar użytkownika
kayron
Użytkownik
Posty: 2086
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 21 kwie 2009, 20:18

Widzę temat wreszcie zaczyna się rozwijać to dobrze. Dziękuję kolegom za wypowiedzi.
Co do FAT 32 no to przy pojemnościach do 16MB nie jest on zbyt opłacalny. Natomiast z tego co już sam wyszperałem to faktycznie FAT 32 nie różni się zbytnio od FAT 16, to po prostu jego linia rozwojowa. Natomiast tak szukając informacji o FAT znalazłem bardzo ciekawe informacje o jego przodku niejako w prostej linii mianowicie, systemie plików z CP/M. Jest on co prawda bardzo prymitywny, i plik jest ograniczony w nim do 16KB (choć w wer 2.2 i wzwyż istnieje możliwość zapisu większych plików), ale w małych systemach na AVR czy nawet 51, może być ciekawą alternatywą, zważywszy że rekord danych w nim ma 128B a nie 512.
Natomiast z FATem nadal nie udalo mi się znaleść dobrego opisu, szczególnie struktury katalogów. :?:

Awatar użytkownika
DarkJarek
-
Posty: 44
Rejestracja: 21 mar 2006, 15:48
Lokalizacja: ...
Kontakt:

Post autor: DarkJarek » 21 kwie 2009, 21:08

Mój wpis na wiki w osdev.pl http://osdev.pl/wiki/index.php/FAT . Część rzeczy na pewno wyjaśni a poleciłem Ci FAT32 gdyż tam właśnie obsługa katalogów wygląda odrobinkę inaczej. Nie dalej jak w weekend pisałem obsługę kart sd na atmege używając właśnie systemu FAT32. Jeżeli chcesz to bez problemu mogę Ci wyjaśnić co i jak.

---------------
Poprawiłem link (kropka na końcu).
-c4r0
Ostatnio zmieniony 21 kwie 2009, 21:15 przez DarkJarek, łącznie zmieniany 1 raz.

slawek55
Użytkownik
Posty: 484
Rejestracja: 16 sie 2005, 11:47
Lokalizacja: Szczecin

Post autor: slawek55 » 22 kwie 2009, 5:23

A mógłbyś opisać zastosowanie FAT na katrach SD?
Zapewne oprócz mnie jeszcze wiele osób by na tym zyskało.
Ja starałem się dojść o co w tym chodzi i powiem szczerze, że potrzebuję pomocy.

Awatar użytkownika
DarkJarek
-
Posty: 44
Rejestracja: 21 mar 2006, 15:48
Lokalizacja: ...
Kontakt:

Post autor: DarkJarek » 22 kwie 2009, 8:49

A co dokładnie masz na myśli pisząc "zastosowanie"?

slawek55
Użytkownik
Posty: 484
Rejestracja: 16 sie 2005, 11:47
Lokalizacja: Szczecin

Post autor: slawek55 » 22 kwie 2009, 11:31

WItaj. Chciałbym móc odczytać pliki z karty. Np. plik tekstowy .txt oraz zapisać taki na kartę.
Przy okazji mam do Ciebie pytanie, ponieważ nie mogę doszukac się wyjaśnienia.
W opisie kart jest napisane, że wielkośc sektora danych podczas odczytu moze mieć długośc od 1 bajta do 512. Tylko przy zapisie musi być 512 ponieważ karta zgłasza błąd.
Dlaczego przy odczycie tez każą ustawić na 512.

Awatar użytkownika
c4r0
Moderator
Posty: 2152
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 22 kwie 2009, 12:44

To może się przydać:
Obsługa kart SD/MMC: http://elm-chan.org/docs/mmc/mmc_e.html
Obsługa FAT na mikrokontrolerach: http://elm-chan.org/fsw/ff/00index_e.html

Awatar użytkownika
DarkJarek
-
Posty: 44
Rejestracja: 21 mar 2006, 15:48
Lokalizacja: ...
Kontakt:

Post autor: DarkJarek » 22 kwie 2009, 13:57

Odczyt danych jest zdecydowanie prostszy od zapisu. Zapewne już wiesz jak wygląda struktura samego systemu FAT. Dane podzielone są na klastry składające się z sektorów. Powiedzmy, że np: jeden klaster składa się z 2 sektorów po 512 bajtów. Każdy plik składa się z jednego lub wielu klastrów, ich numery można pozyskać z tablicy alokacji plików (patrz wiki). Kolejną rzeczą są katalogi. Każdy katalog jest opisany tak samo jak zwykły plik czyli składa się z kilku klastrów. W naszym przypadku w jednym klastrze może pomieścić się (2*512)/32 = 32 wpisów. Każdy wpis zajmuje 32 bajty i opisuje jeden plik lub podkatalog (patrz wiki). Przeszukiwanie systemu plików należy zacząć od katalogu głównego a numer jego pierwszego klastra znajduje się w w nagłówku systemu plików.

Mam nadzieję, że nie zamotałem :) .

ps: stworzenie nowego pliku sprowadzało by się do odnalezienia jakiegoś wolnego klastra, wpisaniu tam danych, zaznaczeniu tego w tablicy alokacji oraz dodaniu opisu pliku do katalogu.

ODPOWIEDZ