Jak w C na AVR sformatować pamięć FLASH do FAT 16??
Jak w C na AVR sformatować pamięć FLASH do FAT 16??
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.
Jestem otwarty na ciekawe linki do tematów poświęconych formatowaniu dysków w FAT 16 w języku C, Pascal.
-
- Użytkownik
- Posty: 123
- Rejestracja: 29 lip 2005, 10:21
- Lokalizacja: Lublin
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ć.
Nie da się tego zapisać w jednej krótkiej procedurze tak aby bez znajomości systemu plików można było szybko zastosować.
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.
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.
-
- Użytkownik
- Posty: 145
- Rejestracja: 23 sie 2005, 11:34
- Lokalizacja: Nowy Dwor Mazowiecki
- Kontakt:
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
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
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).
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.
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.

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