Skocz do zawartości

Karta SD odczyt z pic16


qbaj

Pomocna odpowiedź

hey

mam pic16 ktory zapisuje/odczytuje dane z karty sd, jak te dane zapisac/odczytac w pc ??

chodzi o odczyt/zapis sektorow, bez systemu FAT/FAT32/NTFS

z odczytem sobie poradzilem (Matlab)

SD = fopen('\\.\G:','r')   % tworzenie uchwytu "pliku" do odczytu, uchwytu do fizycznego dysku
dane=fread(SD, 16);        % odczyt 16 bajtow
fclose(SD);                % zamkniecie "pliku"

natomiast jak zapisac cos w sektorach ??

SD = fopen('\\.\G:','w')         % nie dziala, zwraca blad:Invalid argument 
fwrite(SD,dane)                                           
fclose(SD);

SD = fopen('\\.\G:','r+')        % nie dziala, brak bledu ale nie ma efektow na karcie sd
fwrite(SD,dane)
fclose(SD);

prosze o wskazowki 🙂

z gory dziekuje

Link do komentarza
Share on other sites

spróbuj open i write i close zamist fopen fclose i fwrite. Na linuksie mogloby wygladac to tak:

int sd = open("/dev/sdb", O_APPEND);

write(sd, buff, sizeof(buff));

close(sd);

poszukaj odpowiednich wywołań systemowych pod windowsem.

p.s. literka A... literka G...

Link do komentarza
Share on other sites

probowalem uzyc plikow tymczasowych, konsoli i komendy dd

D:\acclog\reader>dd if=\\.\G: of=temp.txt count=1
1+0 records in
1+0 records out

D:\acclog\reader>dd if=temp.txt of=\\.\G:
dd: \\.\G:: Invalid argument

i tez lipa :| 1 komenda prawidlowo dziala !! w pliku jest odczytany 1 sektor, natomiast zapis nie dziala 🙁

jakis pomysl ??

p.s. literka H ... jak AGH 😃

Link do komentarza
Share on other sites

Pomysł jest taki, że musisz zapisywać jednocześnie ilości danych będące wielokrotnością rozmiaru sektora.

Obczaj tutaj: http://support.microsoft.com/kb/100027 i daj znać czy coś pomogło.

Spróbuj napisać jakiś mały program w C, który wywoła CreateFile() z tymi flagami o których piszą w powyższym artykule i koniecznie zapisuj całe sektory danych.

[ Dodano: 03-01-2011, 21:55 ]

Tutaj gość ma podobny problem:

http://www.eggheadcafe.com/software/aspnet/31520519/direct-disk-access-write-to-system-areas.aspx

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

rozwiazanie w Matlabie:

dane(512)           % DANE MUSZA BYC WIELOKROTNOSCIA SEKTORA, MIN. 512b
SD = fopen('\\.\G:','r+')  
fwrite(SD,dane);
fclose(SD);

inne rozwiazania w C za pomoca CreateFile tez dzialaja

Link do komentarza
Share on other sites

Ciesze się, że udało mi się pomóc, ale przyznać muszę, że sam nie miałem pojęcia w czym problem, natomiast rozwiązanie wydaje się całkiem sensowne. Dziwne tylko że odczyt nie failuje tylko dociąga do pełnego sektora.

Nie polegałbym raczej na tym, że sektor ma zawsze 512b. zmienisz kartę na inną i się okaże że sektory są po 1024k i będzie kicha. Lepiej programowo sprawdzić jaki duży jest sektor:

Call DeviceIoControl() using IOCTL_DISK_GET_DRIVE_GEOMETRY to get the bytes per sector, number of sectors, sectors per track, and so forth, so that you can compute the size of the buffer that you will need.

Kto jest boski?! Samogłoski! 🙂 Ach te "stare czasy"

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.