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

Najlepszy nośnik danych do ATMEGA dla plików binarnych poniżej 128KB?

prokopcio 14 Gru 2006 00:28 2423 20
REKLAMA
  • #1 3329076
    prokopcio
    Poziom 29  
    Posty: 2027
    Pomógł: 39
    Ocena: 143
    witam.

    Coraz częściej wykonuję urządzenia współpracujące z PC - część z nich chciałbym przerobić - te, które pobierają jedynie dane z pliku binarnego, żeby działały bez podpiętego komputera. Podpowiedzcie proszę na jakim nośniku (standardowe karty, pendrive itp...) jest najłatwiej przenieść dane do atmeg?
    chodzi o plik binarny lub tekstowy o wielkości poniżej 1MB a nawet przeważnie poniżej 128kb. Do tej pory wysyłam przez rs232/485/usb.

    z góry dzięki za podpowiedzi.
  • REKLAMA
  • #2 3329412
    Father
    Poziom 26  
    Posty: 681
    Pomógł: 88
    Ocena: 13
    Myślę, że najszybciej będzie to chyba zrobić na katach SD lub CF...
  • REKLAMA
  • #3 3329680
    prokopcio
    Poziom 29  
    Posty: 2027
    Pomógł: 39
    Ocena: 143
    jeszcze nie czytałem (nie używałem szukajki) bo właśnie nie wiem jak było by najłatwiej i czego szukać. prosiłbym dlatego o umieszczanie tutaj propozycji wraz z argumentami za i przeciw. chodzi o prostotę obsługi od strony pc i od strony mikrokontrolera.

    czy są jakieś gotowe procedury/przykłady odczytu SD/CF za pomocą mikrokontrolera czy raczej muszę dogrzebać się do dokumentacji i napisać swoje procedury? Programuję w asm.
  • REKLAMA
  • Pomocny post
    #4 3329690
    Father
    Poziom 26  
    Posty: 681
    Pomógł: 88
    Ocena: 13
    Na elektrodzie przewijają się tematy obsługi CF/SD przez mikrokontrolery, swego czasu w EP był kurs z przykładami, znalezienie bibliotek w internecie to też nie problem, ale większość będzie raczej w c niż w assemblerze. Od strony PC nie ma problemu, bo PC widzi CF jako zwykły dysk...
  • #5 3329876
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    Karty z interfejsem szeregowym (SD, MMC...) są prostsze w okablowaniu. W przypadku kart z interfejsem równoległym musisz do jej obsługi wydzielić sporo linii interfejsu.

    prokopcio napisał:
    Programuję w asm.
    Ale na jaki procesor?
  • Pomocny post
    #6 3330136
    migod
    Poziom 21  
    Posty: 462
    Pomógł: 29
    Ocena: 8
    Zdecydowanie SD w trybie SPI. Argumenty:
    - czytniki po stronie komputera to wydatek ~20,- PLN
    - gniazdo SD do druku ~2,- PLN
    - prostota oprogramowania samej komunikacji z SD + masę kodu na sieci z implementacją FAT16/32 gotową do zastosowania

    Minusy:
    - część miejsca w uP trzeba poświęcić na implementację FAT, która dla trybu read-only zabiera ~6kb (implementacja w C)

    http://www.roland-riegel.de/sd-reader/doc/
  • #7 3331318
    prokopcio
    Poziom 29  
    Posty: 2027
    Pomógł: 39
    Ocena: 143
    marek_Łódź napisał:

    prokopcio napisał:
    Programuję w asm.
    Ale na jaki procesor?


    tu akurat o Atmegę8/16/itd...

    Dodano po 2 [godziny] 13 [minuty]:

    właśnie przeglądam i czytam na temat kart i mam pytanko - czy dało by się ominąć ogromną ilość oprogramowania fat16/32 przy założeniu, że na karcie byłby nagrany tylko jeden plik binarny/tekstowy na początku pamięci (zaraz po sformatowaniu/skasowaniu katry). chodzi o to, żeby pominąć nazwy plików,partycje itp. oczywiście zakładam, że format danych byłby zawsze identyczny (nagrywanie pliku na kartę przez odpowiednie oprogramowanie PC).
  • REKLAMA
  • Pomocny post
    #8 3332003
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    prokopcio napisał:
    czy dało by się ominąć ogromną ilość oprogramowania fat16/32 przy założeniu, że na karcie byłby nagrany tylko jeden plik binarny/tekstowy na początku pamięci (zaraz po sformatowaniu/skasowaniu katry). chodzi o to, żeby pominąć nazwy plików,partycje itp. oczywiście zakładam, że format danych byłby zawsze identyczny (nagrywanie pliku na kartę przez odpowiednie oprogramowanie PC).
    Sposób obsługi karty zależy od Ciebie. Można sformatować kartę na PC i wgrać na nią jeden duży plik, który następnie byłby modyfikowany w Twoim mikrokontrolerze, oczywiście pilnując żeby nie wejść w obszar systemowy (FAT).
  • Pomocny post
    #9 3332140
    eco123
    Poziom 14  
    Posty: 99
    Pomógł: 3
    Ocena: 1
    Troche bardziej zawansowany układ na procesorze AT91SAM7S645 jest opisnany w Elektorze 11/2006

    Najlepszy nośnik danych do ATMEGA dla plików binarnych poniżej 128KB?

    oraz w pacy dyplomowej napisanej po czesku

    http://rayer.ic.cz/elektro/diplomka/diplomka.pdf

    z opisem softwaru. Oba układy można wykorzystać jako datalogger, czyli
    zdalnie sterowaną, dostępną pamięć, przez interfejs sio lub usb.
  • Pomocny post
    #10 3332310
    migod
    Poziom 21  
    Posty: 462
    Pomógł: 29
    Ocena: 8
    Pewnie skrócić linka, http://www.roland-riegel.de/sd-reader/ ;)

    Możesz zrobić swój własny filesystem na tej karcie, zapisywać blok po bloku, ale wtedy konieczne będzie extra oprogramowanie na PC-ta (pewnie własny/cudzy driver). Poszukaj po prostu większej kości na serce układu, albo optymalizuj kod. Na pewno jest z czego i co urwać :)
  • #11 3332624
    prokopcio
    Poziom 29  
    Posty: 2027
    Pomógł: 39
    Ocena: 143
    dziękuję chłopaki za pomoc - dość dużo już wiem ale więcej niewiem ;-).

    skupiłbym się właśnie na propozycji formatowania i zapisu pliku (niedużego) tak, żeby można było go jak najprościej odczytać bajt po bajcie przez mikrokontroler. Oprogramowanie na PC robiło by standardowy format a potem tylko kopiowanie pliku na wirtualny "dysk". proszę tylko po polskiemu napisać mniej-więcej jak by musiało to wyglądać (ogólnie) ponieważ dopiero zagłębiam sie w ten temat i jeśli jest to mocno skomplikowane to sobie odpuszczę... chciałbym bardzo pominąć wszystkie skomplikowane obsługo fat'ów itp. ponieważ na karcie chcę przenosić "malutkie" pliki (pojedyńczo).

    Dodano po 4 [minuty]:

    marek_Łódź napisał:
    Sposób obsługi karty zależy od Ciebie. Można sformatować kartę na PC i wgrać na nią jeden duży plik, który następnie byłby modyfikowany w Twoim mikrokontrolerze, oczywiście pilnując żeby nie wejść w obszar systemowy (FAT).


    nie do końca rozumię o czym piszesz - jak wejść/niewejść w obszar fat skoro PC chyba i tak zapisze w systemie fat (przy standardowych sterownikach)...
  • Pomocny post
    #12 3332994
    migod
    Poziom 21  
    Posty: 462
    Pomógł: 29
    Ocena: 8
    prokopcio napisał:

    nie do końca rozumię o czym piszesz - jak wejść/niewejść w obszar fat skoro PC chyba i tak zapisze w systemie fat (przy standardowych sterownikach)...


    Koledze chodziło zapewne o to, aby z poziomu PC przygotować "kontener" na dane w postaci jednego duużego pliku umieszczonego w katalogu głównym systemu FAT16/32. Wtedy zapis/odczyt jest o wiele prostszy - skrótowa analiza tabl. partycji i tablicy FAT. W ten sposób plik powinien (przynajmniej w teorii) zająć kolejne bloki na karcie, przez co uzyskasz efekt opisany przeze mnie, a jednocześnie nie będzie trzeba specjalnych driver-ów do obsługi tak spreparowanej karty przy odczycie/zapisie na PC.
  • Pomocny post
    #13 3333115
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    migod napisał:
    prokopcio napisał:

    nie do końca rozumię o czym piszesz - jak wejść/niewejść w obszar fat skoro PC chyba i tak zapisze w systemie fat (przy standardowych sterownikach)...
    Koledze chodziło zapewne o to, aby z poziomu PC przygotować "kontener" na dane w postaci jednego duużego pliku umieszczonego w katalogu głównym systemu FAT16/32. Wtedy zapis/odczyt jest o wiele prostszy - skrótowa analiza tabl. partycji i tablicy FAT. W ten sposób plik powinien (przynajmniej w teorii) zająć kolejne bloki na karcie, przez co uzyskasz efekt opisany przeze mnie, a jednocześnie nie będzie trzeba specjalnych driver-ów do obsługi tak spreparowanej karty przy odczycie/zapisie na PC.

    Dokładnie tak, jak napisał kolega migod. W tym momencie po zlokalizowaniu poszczególnych bloków pliku, który po zaalokowaniu teoretycznie na karcie tego samego typu/rozmiaru powinien zawsze mieć kolejne bloki w tych samych kolejnych obszarach karty, zdecydowanie upraszcza się obsługa od strony Twojego urządzenia przy zachowaniu pełnej możliwości manipulowania danymi (ale nie plikiem) od strony PC. W tak zbudowanym pliku można sobie nabudować jakiś wewnętrzny, prosty system obsługi danych/plików.

    Inna możliwość to rezygnacja z obsługi karty przez PC i pozostawienie komunikacji na poziomie łącze PC - łącze urządzenia. W takiej sytuacji cała organizacja danych pozostaje po stronie mikrokontrolera. Niestety w tym układzie karta nie da się odczytać na standardowym czytniku.

    Reasumując
    1. Formatujesz kartę na PC z FATem i jednym lub wieloma plikami i po stronie uK musisz odpracować obsługę takiej struktury na poziomie FATa lub przez bezpośredni, dostęp do wnętrza pliku pecetowskiego

    2. Wprowadzasz własny format danych na karcie i wtedy musisz albo napisać driver (program) do obsługi tej karty i komunikacji z nią (na standardowym lub dedykowanym czytniku), albo sam program komunikacyjny (po RS, LPT czy USB), tyle że wtedy czytnikiem karty musi być Twoje urządzenie lub coś w podobie.
  • #14 3333137
    prokopcio
    Poziom 29  
    Posty: 2027
    Pomógł: 39
    Ocena: 143
    tyle to wymyśliłem... ;-) chodzi mi bardziej o to czy można pominąć tablice partycji itd... żeby dostać się do pliku (zawsze o takim samym rozmiarze itp...) i odczytać kolejne bajty z pliku.

    nie mogę coś się dogrzebać do przykładu umieszczenia danych na karcie w przypadku nagrania pliku po sformatowaniu karty..... czy macie może jakiś przykład - może rzeczywiście łatwo byłoby odzczytać te dane bez zagłębiania się w fat itd... czy byłby taki plik zawsze umieszczony w tym samym miejscu?
  • Pomocny post
    #15 3333201
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    Nie sądzę, żeby można było zagwarantować identyczne alokowanie plików na karcie (chociażby dlatego, że driver czytnika może np. umiescić na karcie jakieś pliki organizacyjne). Jedynym pewnikiem jest to, że raz alokowany plik, jeśli go nie ruszysz, będzie pozostawał w tym samym miejscu. Przy takim uproszczeniu zlokalizowanie tego jednego pliku w FAT i na nośniku jest znacznie prostsze od napisania obsługi całego FATa.
  • #16 3334539
    prokopcio
    Poziom 29  
    Posty: 2027
    Pomógł: 39
    Ocena: 143
    marek_Łódź napisał:
    raz alokowany plik, jeśli go nie ruszysz, będzie pozostawał w tym samym miejscu.
    w to ja akurat nie wątpię ;-) ale bardziej mnie interesuje odpowiedź na pytanie:

    Czy po skasowaniu pliku (bez ponownego formatowania karty) i zapisaniu go znów (na PC) będzie on znajdował się w tym samym miejscu a jeśli tak, to czy na wszystkich ststemach operacyjnych możnaby właśnie skasować i nagrać plik (tan sam) żeby pozostał w tym samym miejscu.

    Zakładam, że karta była by tylko raz formatowana na samym początku przed użyciem (karty identyczne formatowane zawsze na tym samym systemie operacyjnym, na tym zamym driverze i na tym samym komputerze ;-))

    Dodano po 4 [minuty]:

    acha - pliki będą ruszane... ale na PC - w miejsce kasowanego pliku będzie wstawiany plik o identycznym rozmiarze i nazwie a tylko o innej zawartości.
  • Pomocny post
    #17 3336164
    espedeif
    Poziom 12  
    Posty: 12
    Pomógł: 3
    Jak się istaluje linuxa z dyskietek zgrywa się image na dyskietki przy pomocy programu rawwrite. Sądzę że program zapisuje dyskietkę od sektora 0 do odpowiedniej długości pliku. Nie wiem czy rawwrite będzie umiało zapisać na SD.
    Z linuxa do SD prawdopodobnie dostaniesz się przez 'dd'
    Stąd jako image dyskietki zapisujesz swój plik na SD
    dd if=/dir/file.txt of=/dev/SD

    (gdzie /dev/SD dyskiem który reprezentuje kartę SD)
    Zapisując pod rawwrite lub dd można powiedzieć że na SD masz tylko swój plik od sektora 0 (od komórki pamięci o adresie 0)
    Ewentualnie pozostaje Ci tylko zapisać np. w pierwszych 4 bajtach swojego pliku jego rozmiar.
  • #18 3336174
    prokopcio
    Poziom 29  
    Posty: 2027
    Pomógł: 39
    Ocena: 143
    gdzie jest jakiś opis formatu jak są przechowywane dane na karcie? nie mogę się dogrzebać.

    wpadłem jeszcze na inny pomysł ale nie wiem czy to ma szanse wypalić... Zapisać na początku pliku jakąś sekwencję bajtów i odczytywać po kolei kartę bajt po bajcie aż do napotkania takiej sekwencji - dalej by były moje dane.... jeśli to jest tak jak myślę (pewnie nie jest) to było by supperr!!! rozwiejcie proszę moje wątpliwości...
  • #19 3337396
    espedeif
    Poziom 12  
    Posty: 12
    Pomógł: 3
    w googlach szukaj na frazę "sd card specification".
    Nie znam się na małych kartkach, ale wydaje mi się że karty MC (Multimedia Card) są nieco prostsze. W każdym razie SD to rozwinięcie koncepcji MC
  • Pomocny post
    #20 3338704
    matgaw
    Poziom 15  
    Posty: 198
    Pomógł: 4
    Ocena: 3
    prokopcio: tak, pod warunkiem, że ten plik nie został dograny na kartę po jakichś wcześniejszych bojach z innymi plikami, bo wtedy może ulec sfragmentowaniu i nici :/ Ale zapisując od razu po formacie taki plik na karcie możesz być spokojny - będzie w całym kawałku :)
    Potem wystarczy, że tego pliku nie będziesz usuwał ani zmieniał jego rozmiaru na kompie.
  • #21 3341284
    prokopcio
    Poziom 29  
    Posty: 2027
    Pomógł: 39
    Ocena: 143
    czyli jak zrobię wg powyższych ustaleń to mogę odczytywać kartę od początku bajt po bajcie (no może nie od początku) i jak rozpoznam, że napotkałem na początkowe bajty mojego pliku (dodana do pliku konkretna kombinacja bajtów) to mogę być pewny, że odczytując dalej kartę bajt po bajcie to będzie mój plik.... ???

    Dodano po 11 [minuty]:

    nie mogę coś znaleźć na elektrodzie (chyba słabo szukam a chodzi mi o polski opis) jak odczytać bajt po bajcie kartę sd - nie konkretny program tylko ideę...

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy wyboru optymalnego nośnika danych do mikrokontrolerów ATMEGA do przechowywania plików binarnych lub tekstowych o rozmiarze poniżej 128 KB, z możliwością pracy bez podłączenia do komputera. Najczęściej rekomendowane są karty SD lub CF, przy czym karty SD w trybie SPI są preferowane ze względu na prostotę interfejsu, dostępność czytników oraz gotowe implementacje systemu plików FAT16/32. Wskazano, że implementacja FAT w mikrokontrolerze wymaga około 6 KB pamięci i zwykle jest realizowana w języku C, co może być wyzwaniem przy programowaniu w assemblerze. Poruszono możliwość pominięcia pełnej obsługi FAT poprzez zapisanie na karcie pojedynczego pliku o stałym rozmiarze i lokalizacji, co upraszcza odczyt bajt po bajcie bez konieczności parsowania tablicy alokacji plików. Jednakże nie ma gwarancji, że plik po skasowaniu i ponownym zapisaniu zawsze będzie zajmował te same sektory, choć przy stałym formacie, systemie plików i sterowniku na tym samym komputerze jest to prawdopodobne. Zaproponowano także alternatywne metody, takie jak zapis obrazu pliku bezpośrednio na nośnik (np. za pomocą narzędzi rawwrite lub dd w systemach Linux), co pozwala na pominięcie systemu plików i odczyt danych od sektora 0. Dyskutowano również o prostocie okablowania kart SD (interfejs SPI) w porównaniu do kart z interfejsem równoległym oraz o dostępności przykładów i bibliotek do obsługi kart pamięci, głównie w języku C. Wskazano, że na PC karty SD są widziane jako standardowe dyski z systemem FAT, co ułatwia zarządzanie plikami, ale wymaga od mikrokontrolera implementacji odpowiednich procedur odczytu. Poruszono także pomysł umieszczenia w pliku unikalnej sekwencji bajtów jako znacznika początku danych, co ułatwiłoby ich lokalizację podczas odczytu. Podsumowując, najprostsze rozwiązanie to użycie karty SD w trybie SPI z pojedynczym plikiem o stałym rozmiarze, przygotowanym na PC, co pozwala na prosty odczyt danych przez mikrokontroler bez pełnej obsługi systemu plików FAT.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA