Pamięć EEPROM w systemie plików FAT

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
Tranzystor
Użytkownik
Posty: 889
Rejestracja: 28 sie 2005, 19:19
Lokalizacja: Świętochłowice
Kontakt:

Pamięć EEPROM w systemie plików FAT

Post autor: Tranzystor » 25 mar 2007, 7:28

Witam,
chciałbym napisać program, który zrobiłby mi z pamięci EEPROM AT24C1024 dysk. Czyli potrzebuje system plików. Próbowałem wymyślić własny, ale za dużo zużywa to pamięci procesora. Pojawia się tu pytanie czy można skorzystać w moim przypadku z biblioteki AVR-DOS :?: Jeśli tak to jak z niej się korzysta :?: Wiem, że ta biblioteka ma mnóstwo zmiennych, ale nie wiem do czego one wszystkie służą. Jeżeli mógłby mi ktoś pomóc byłbym bardzo wdzięczny.

Pozdrawiam

ZbeeGin

Post autor: ZbeeGin » 25 mar 2007, 10:25

Tranzystor pisze:Chciałbym napisać program, który zrobiłby mi z pamięci EEPROM AT24C1024 dysk. (...) Pojawia się tu pytanie czy można skorzystać w moim przypadku z biblioteki AVR-DOS
Pamiętaj, że to tylko 128KB - a więc 256 sektorów (każdy po 512bajtów)!! Owszem można, tylko że sam system FAT zabierze kilka sektorów. Zatem pozostanie Ci ok. 250 sektorów - 125KB. Czy taka pojemność jest zadowalająca?
Pamięaj także o tym, że sektor jest traktowany jako całość. Wobec czego zapisując 10 bajtów czy 1 bajt danych zajmujesz całe 512.

Sam system AVR-DOS także zużywa dość sporo:
Wymagania:
· Pamięć kodu: około 4KB.
· Pamięć SRAM: 561 bajtów na informacje o systemie plików oraz bufor katalogu plików. 517 bajtów gdy FAT jest obsługiwany przez własny bufor (dla zwiększenia szybkości), inaczej FAT jest obsługiwany przez bufor katalogu plików.
· 534 bajtów dla każdego uchwytu pliku.
Czy warto? Musisz sobie odpowiedzieć sam...
Tranzystor pisze:Jeśli tak to jak z niej się korzysta Wiem, że ta biblioteka ma mnóstwo zmiennych, ale nie wiem do czego one wszystkie służą.
To niezupełnie tak. Biblioteka AVR-DOS jako taka jest niezmienna i niezależna od sprzętu i rzeczywiście posiada własne obszary działania (zmienne, bufory FAT). W twoim przypadku potrzebujesz tylko sterownika do własnego urządzenia magazynującego. Sterownik to nic innego jak specjalnie napisana biblioteka.

Przyjrzyj się biliotece "FLASHCARDDRIVE.LIB". Są tam tylko wszystkie potrzebne procedury i funkcje komunikujące się ze sprzętem na niskim poziomie. Twoja własna bibliteka powinna posiadać ten sam zestaw procedur:

_DRIVECHECK - sprawdza czy pamięć masowa jest dostępna - możesz tym sprawdzać czy EEPROM jest dostępny sprawdzając odczyta i zapis jedej z komórek pamięci;
_DRIVERESET - reset urządzenia - w Twoim przypadku nie istotne;
_DRIVEINIT - ustawia dane startowe interfejsu - w Twoim przypadku wykonujesz reset magistrali I2C (np. przez I2CINIT);
_DRIVEGETIDENTITY - odczytuje MBR pamięci masowej - stąd AVR-DOS wie jaka pamięć jest dostępna, czy jest to FAT16 czy nie, ile jest sektorów, klastrów, itp.;
_DRIVEWRITESECTOR - zapisuje jeden wybrany sektor z bufora w pamięci RAM;
_DRIVEREADSECTOR - odczytuje jeden wybrany sektor do bufora w pamięci RAM.

Oczywiście wszystkie funkcje muszą pobierać dane lub je zwracać w ściśle określony sposób. A to akurat opisałem w helpie.

Awatar użytkownika
Tranzystor
Użytkownik
Posty: 889
Rejestracja: 28 sie 2005, 19:19
Lokalizacja: Świętochłowice
Kontakt:

Post autor: Tranzystor » 25 mar 2007, 11:01

No tak, nie opłaca się to :sad: To jak byś rozwiązał mój problem :?: Może zapisac pliki jako stos :?: Pliki zaczynałby się od bajtu początku, potem nazwa 8 literowa + rozszerzenie, następnie bajt kończący nazwę, a zaczynający dane pliku, dane pliku i bajt kończący plik.
Wydaje mi się, że w moim wypadku nie opłaca się nawet robić procedury tworzącej foldery idt.
A może masz jakiś lepszy pomysł :?:

Pozdrawiam i dzięki za fachową rade ;-)

ZbeeGin

Post autor: ZbeeGin » 25 mar 2007, 13:09

Tranzystor pisze:A może masz jakiś lepszy pomysł
Nie wiem czy przydadzą się Moje wypociny z okolic 1996 roku kiedy projektowaliśmy taki dość sympatyczny zegar (bajerancki) z wyświetlaczem punktowym LED. Niestety projekt został po paru miesiącach porzucony.

Przemyślenia zmieniłem w "artykuł", który znajdziesz w załączniku. Kody źródłowe też chyba powstały - dla Z80 - ale nie potrafię ich znaleźć w archiwum. Zapraszam do lektury.
Ostatnio zmieniony 27 sie 2008, 17:57 przez ZbeeGin, łącznie zmieniany 1 raz.

Awatar użytkownika
Tranzystor
Użytkownik
Posty: 889
Rejestracja: 28 sie 2005, 19:19
Lokalizacja: Świętochłowice
Kontakt:

Post autor: Tranzystor » 25 mar 2007, 17:21

Wielkie dzięki ZbeeGin ;-) Niestety nie skorzystam z tego twojego systemu, ale za to Twój system pomógł mi wpaść na wspaniały pomysł ;-)

ODPOWIEDZ