Skocz do zawartości

GPS zapisujący pozycje na karcie SD


Sadr

Pomocna odpowiedź

Witam, nie wiem czy wybrałem dobry temat bo z robotyką mało to ma wspólnego ale może komuś się przyda. Otóż mam taki projekcik do zrobienia żeby na karcie SD zapisywało się wszystko co wyrzuci po UART modulik GPS a konkretnie Gms-u5LP firmy GlobalTop, taki rejestrator trasy. Na forum znalazłem temat w którym coś poruszone było o FatFS ale chyba umarł śmiercią naturalną. I tu pojawia się problem, otóż w żaden sposób nie jestem w stanie uruchomić kartę poprzez FatFS, już mi się pomysły kończą co robię źle i nikt za bardzo nie jest mi wstanie podpowiedzieć gdzie może leżeć problem. Używam ATmegi 32 (na kwarcu 14.7456MHz), GPS ten co wyżej, karta microSD z adapterem na SD. Na innym forum w jakimś temacie ktoś napisał, że długość ścieżek może mieć znaczenie i faktem jest, że na płytce od nóżek MOSI, SS, SCK i tak dalej do karty jest około 14cm to może mieć AŻ takie znaczenie? Biblioteke FatFs (najnowsza jaka jest) przerabiam według pewniej książki, jota w jotę, potem usuwając tylko UART który był potrzebny do komunikacji z komputerem, i nadal funkcja inicjalizująca dysk zwraca STA_NOINIT. Jeśli ktokolwiek używał w swoich projektach FatFS i mógłby popatrzeć co ja mogę źle robić to byłbym ogromnie wdzięczny bo ja bladego pojęcia już nie mam co jest nie tak... Załączam schemat (jedna zmiana to diody LED są na pinach PC0, 1, 2):

Całość zasilana z baterii (razem 6V) wtedy na uC idzie 4.5V (spadki?), zasilanie karty to 3.29V a stan wysoki na pinach MOSI, MISO i tak dalej to 2.8v (nie za mało, żeby karta uznała to za stan wysoki?).

Zmiany w kodzie:

/* Port Controls  (Platform dependent) */
#define CS_LOW()	PORTB &= ~(1<<PB4)			/* MMC CS = L */
#define	CS_HIGH()	PORTB |= (1<<PB4)			/* MMC CS = H */

#define	FCLK_SLOW()	(SPCR |= (1<<SPR1)|(1<<SPR0)) 		/* Set slow clock (100k-400k) */
#define	FCLK_FAST()	(SPCR |= (1<<SPR1))//(SPCR &= (~((1<<SPR0)|(1<<SPR1)))) 		/* Set fast clock (depends on the CSD) */

static
int power_status(void)		/* Socket power state: 0=off, 1=on */
{
//return (PORTE & 0x80) ? 0 : 1;
return 1;
}


static
void power_on (void)
{
//PORTE &= ~0x80;				/* Socket power on */
for (Timer1 = 2; Timer1; );	/* Wait for 20ms */

DDRB  |= (1<<PB4)|(1<<PB5)|(1<<PB7);/* Enable drivers */
DDRD |= (1<<PD4)|(1<<PD5);
PORTB  |= (1<<PB4)|(1<<PB5);

SPCR |= (1<<SPE)|(1<<MSTR);
}


static
void power_off (void)
{
SPCR = 0;				/* Disable SPI function */
DDRB  = 0b00000000;		/* Disable drivers */
PORTB = 0b00000000;

//PORTE |=  0x80;			/* Socket power off */
Stat |= STA_NOINIT;
}

Całkowicie usunąłem sprawdzanie czy karta jest w slocie i czy nie jest zabezpieczona przed zapisem (bo nie mam tych linii):

void disk_timerproc (void)
{
BYTE n, s;


n = Timer1;				/* 100Hz decrement timer */
if (n) Timer1 = --n;
n = Timer2;
if (n) Timer2 = --n;

s = Stat;

	/* Write enabled */
	s &= ~STA_PROTECT;

	/* Card inserted */
	s &= ~STA_NODISK;


Stat = s;				/* Update MMC status */
}

I w main.c ustawienia przerwań(co 10ms):

static
void IoInit ()
{
TCCR2 = (1<<WGM21);
TCCR2 = (1<<CS22)|(1<<CS20);
OCR2 = 144;
TIMSK = (1<<OCIE2);

sei();
}

a disk_initialize(0); zwraca STA_NOINIT...

Link do komentarza
Share on other sites

Znam link niestety te biblioteki są jeszcze bardziej pokręcone niż FatFS... przynajmniej ja nie znalazłem dokumentacji jak w przypadku FatFs bo tak strzelać z czyjegoś kodu co jest do czego i czym to uruchomić to... Uruchamiałeś tą bibliotekę z linku na swoich projektach? Doprosić się nie mogę żeby ktoś kto miał już FatFs w rękach spojrzał i powiedział mniej więcej że tu może Ci coś psocić, bo z tego wychodzi, że schemat ok, kod ok a nadal nie działa no to czary? Ja nie rozumiem...

Link do komentarza
Share on other sites

Wgrywałem bibliotekę z linku i bez problemu zapisywała na karcie, tylko karte musiałem zmienić bo mojego kingstona 2gb wykrywała raz na 10 albo wcale. Uruchamiałem też drugą bibliotekę z tej strony (właściwie przerobiona, dataloger się nazywa chyba) wystarczy w niej wywołać funkcję do zapisu i jako argument podać jakiegoś stringa. Obie są chyba przeróbką FatFs.

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

Oo rozumiem, że mówisz o tym: http://www.dharmanitech.com/2009/01/sd-card-interfacing-with-atmega8-fat32.html i tym: http://www.dharmanitech.com/search/label/microSD%20%2F%20SDHC to mam pytanie zapis na karcie jest oparty o jakiś system plików czy wszystko raw, i trzeba jakimś hexeditorem odczytywać sektory? Pytam bo widziałem w bibliotekach z pierwszego linku funkcje które miały w nazwie to złowrogie RAW. Mógłbyś podesłać te przerobione kody swoje (jaki mikrokontroler) od razu zaznaczając które kawałki przerobiłeś?

Link do komentarza
Share on other sites

taaak o tym mowie. Autor napisał(albo przerobił FatFS) bibliotekę wspierającą w pełni FAT32. Formatujesz kartę w tym systemie, w programie podajesz nazwę pliku i poprzez wywołanie odpowiedniej funkcji wysyłasz do niego dane, potem plik można odczytać za pomocą notatnika czy innego edytora tekstu. Uruchamiałem wszystko na Atmedze32 na płytce testowej EVB(w internecie można znaleźć do niej instrukcje gdzie jest min. pokazane jak jest podłączone gniazdo na kartę).

W datalogerze edytujesz wlasciwie tylko plik main (ewentualnie FAT32 jesli np nie masz podłączonego zegara RTC). Do tablicy fileName podajesz nazwę pliku, a do dataString wysyłasz ciąg znaków do zapisania. Na koniec dajesz writeFile(fileName) i to wszystko..🙂

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.