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.