logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ATMEGA16 - Jak zmusic windows do utworzenia pliku w danym sektorze

wind_energy 02 Sie 2012 21:14 1380 11
REKLAMA
  • #1 11169903
    wind_energy
    Poziom 14  
    Witam,
    Procesor ATMEGA16 obsługuje kartę SD i zapisuje do niej wyniki swojej pracy.

    Aby nie korzystać z bibliotek FAT, wymyśliłem sobie, że utworze plik tekstowy i do niego będę zapisywał dane, a dokładniej do wybranego sektora na karcie SD pod którym akurat znajduje się plik.txt. Takie rozwiązanie działa i spełnia moje wymagania w pełni, ale jest pewien mały niuans.
    Mam kilka kart 512MB, każdą formatuję na FAT oraz na każdej tworze nowy plik.txt.
    Na kilku kartach początek pliku zaczyna się na sektorze 512 a na kilku 520. Muszę mieć pewność, że każdy plik zaczyna się na tym samym sektorze. Jak tego dokonać?

    Za wszelkie wskazówki uprzejmie dziękuję.
  • REKLAMA
  • Pomocny post
    #2 11169954
    tmf
    VIP Zasłużony dla elektroda
    Dziwne. Ale można to obejść formatując kartę i tworząc odpowiedni plik. Jeśli utworzy to tak jak chcesz to na kolejne karty wystarczy zgrać obraz pierwszej. Będziesz miał klony. Swoją drogą dodanie obsługi FAT w zakresie ustalenia pozycji danych należących do pliku to kilkanaście linii kodu w C, więc może to by było bezpieczniejsze rozwiązanie? Bo skąd będziesz wiedział, że włożona jest właściwa karta?
  • Pomocny post
    #3 11169957
    LordBlick
    VIP Zasłużony dla elektroda
    Jeśli wszystkie karty mają identyczny rozmiar, to utwórz obraz tej przydatnie sformatowanej i sklonuj na pozostałe karty, a nawet trzymaj ten obraz gdzieś na dysku spakowany.
    Na wymuszenia Windows może zareagować BSoD-em... ;)
    tmf napisał:
    kilkanaście linii kodu w C
    Ja mam podstawy podejrzewać, że rozchodzi się o Bascom, a tam biblioteka FAT powoduje pryszcze i opuchliznę w kodzie wynikowym... :P
  • #4 11169986
    wind_energy
    Poziom 14  
    :) Dzięki Panowie:) To się uda:)
    tmf napisał:
    Bo skąd będziesz wiedział, że włożona jest właściwa karta?
    - to ma swoją zaletę, nieautoryzowany osobnik niewiele zdziała.
    tmf napisał:
    Swoją drogą dodanie obsługi FAT w zakresie ustalenia pozycji danych należących do pliku to kilkanaście linii kodu w C
    - masz na mysli biblioteki petitfat? czy mówisz o czymś innym? Jeśli masz napisane jakoś prosto lokalizacje plików, może byłbyś tak miły i mógłbyś podesłać na prv maźnięty algorytm?
  • REKLAMA
  • Pomocny post
    #5 11170080
    tmf
    VIP Zasłużony dla elektroda
    Mam napisaną ale w C++ na AVR. Przerobienie tego pewnie byłoby kłopotliwe, bo to z projektu, w którym wykorzystywałem FAT do przechowywania danych na różnych nośnikach, w tym FLASH MCU. Ale jak weźmiesz opis FAT to napiszesz coś takiego w godzinkę. Odczytujesz tylko pozycję katalogu głównego, możesz nawet założyć, że pierwsza pozycja to twój plik, czytasz z niego nr bloku FAT i dalej z górki.
  • Pomocny post
    #6 11170114
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #7 11170210
    LordBlick
    VIP Zasłużony dla elektroda
    wind_energy napisał:
    to ma swoją zaletę, nieautoryzowany osobnik niewiele zdziała.
    Security by obscurity.... Klonując kartę zdziała wiele.
    albertb napisał:
    dd if=plik of=dysk bs=rozmiar_sektora seek=numer_sektora_od_0
    Lepiej tego nie pokazywać, bo niezorientowani mogą sobie tym Windowsa wykasować wybierając za "plik" /dev/windows :P
    Linuks to system dla ludzi dociekliwych, innym nie proponuję...
  • REKLAMA
  • #8 11170279
    Konto nie istnieje
    Konto nie istnieje  
  • #9 11170445
    wind_energy
    Poziom 14  
    Dziękuję Wam za mądre porady. Natchnąłem się jednak na jeden problem. Do oglądania zawartości kart używam WINHEX, w którym to mogę sobie pojść do wybranego sectora i obejrzeć jego zawartość. Nie wiem od czego może zależeć taki problem, jak zapisuje pod np sector 520, na jednej karcie widzę w WINHEX, że wszystko jest ok, zapisał pod 520. Kiedy wkładam kartę bliźniaczą, zapisuje mi pod 273 sector. Niektóre karty zapisuje pod 520 a niektore pod 273, to jest dla mnie mały szok. Macie może pomysł z czego może się to generować?
  • Pomocny post
    #10 11171774
    lelekx
    Poziom 30  
    A co stoi na przeszkodzie minimalnej implementacji systemu plików?
    Potrzebujesz:
    1) odczytać zawartość MBR - 1 sektor
    2) odczytać 1 sektor katalogu głównego, wyszukać wpis z nazwą pliku i położeniem 1 klastra z danymi - zbratać z danymi pobranymi z MBR obliczyć adres sektora
    3) odczytać właściwy sektor
    Nawet nie musisz odczytywać tablicy FAT, jeżeli rozmiar pliku nie przekracza rozmiaru klastra.

    Z kilku linijek zrobi się kilkanaście, ale za to unikniesz wyszukanej ekwilibrystyki pod Windows.
  • #11 11171986
    wind_energy
    Poziom 14  
    lelekx napisał:
    1) odczytać zawartość MBR - 1 sektor
    2) odczytać 1 sektor katalogu głównego, wyszukać wpis z nazwą pliku i położeniem 1 klastra z danymi - zbratać z danymi pobranymi z MBR obliczyć adres sektora
    3) odczytać właściwy sektor
    Nawet nie musisz odczytywać tablicy FAT, jeżeli rozmiar pliku nie przekracza rozmiaru klastra.
    dzięki lelex - o taki opis mi właśnie chodziło, na pewno przyda się to na przyszłość, w tym projekcie tego w zasadzie nie potrzebuje i nawet już nie mam czasu zmieniać bo muszę to już oddać.

    Dodano po 2 [minuty]:

    wind_energy napisał:
    Nie wiem od czego może zależeć taki problem, jak zapisuje pod np sector 520, na jednej karcie widzę w WINHEX, że wszystko jest ok, zapisał pod 520. Kiedy wkładam kartę bliźniaczą, zapisuje mi pod 273 sector. Niektóre karty zapisuje pod 520 a niektore pod 273, to jest dla mnie mały szok.
    ktoś ma jakiś pomysł? Sprawdzałem czy np. nie ma przekłamania w adresie ale:
    1000001000 - to adres 520
    100010001 - to adres 273
    Jak widać omyłkowe przesunięcie bitu nie wchodzi w grę.
    Próbowałem też inne adresy i zawsze to około polowa zamierzonego adresu :/
  • #12 11173560
    wind_energy
    Poziom 14  
    Problem tematu rozwiązałem. Problematykę źle zapisujących się danych do wybranych sektorów rozpocznę w nowym temacie. Dziękuję i pozdrawiam.
REKLAMA