Masz 2 opcje:
1) użyj poradnika gdzie krok po kroku opisano komunikację i napisz własny program
2) skopiuj gotowca w asm i jakoś połącz ze swoim programem. Gotowiec nie obsługuje kart SDHC i umożliwia tylko najprostszy zapis i odczyt danych na karty SD i MMC (zapis/odczyt 1 bloku). Gotowiec jest w pełni samodzielny, nic więcej nie potrzeba
--------
1) na podstawie poradnika lub gotowca możesz stworzyć własną bibliotekę, nic więcej nie trzeba. Tyle że to nie obsługuje kart SDHC i systemów plików. To tylko najprostszy init karty i obsługa zapisu/odczytu 1 bloku 512 bajtów. Ten program jeszcze bardziej dałoby się uprościć ale już nie chciałem kombinować.
2) bit 1 w SPIF oznacza że bajt został już nadany i możesz nadawać następny. To jest najzwyklejsza transmisja SPI. Uważaj tylko który "mode" wybierasz.
3) możesz, ale zapisany blok musi mieć zawsze 512 bajtów. Więc albo zapisujesz np 10 bajtów + 502 zera albo wczytujesz blok, dopisujesz dane i zapisujesz. Gdy blok się zapełni to skaczesz dalej. Ale to już dużo dłubaniny jest.
Najlepiej zapisz 1 blok na jeden pomiar ale to strata miejsca.
Lub jeśli 1 wpis GPS zajmie np 32 bajty to zrób 16 pomiarów, zapisz je do RAM, i gdy uzbiera się 16 bloków dających 512 bajtów wpisz je na kartę. W ram znów zapisuj dane od 1 bloku, a na karcie zwiększ blok na następny. Tu masz dużą oszczędność. Zrób sobie też system który wykryje który blok był ostatnio zapisany, nawet jeśli nie w pełni i zapisuj od następnego. Będzie mała przerwa w danych ale ich nie nadpiszesz
4) zapis "surowy" po blokach jest najprostszy. Pełna obsługa FAT to już mordownia, a zapis do FAT to jeszcze większa.
Ja robiłem taki myk:
a) formatowałem kartę na FAT16 2GB i za pomocą DMDE robiłem podgląd pierwszych bloków gdzie były wpisy FAT które powodowały że karta była widoczna na kompie.
b) przed użyciem karty moje urządzenie formatowało ją po swojemu, robiąc zapis obrazu wpisów FAT zaraz po formacie karty. W ten sposób miałem 100% gwarancji że dane są zawsze w tym samym miejscu i cały opis FAT jest zawsze taki sam. To gigantycznie ułatwi ci odczyt/zapis karty w urzadzeniu bo na sztywno możesz czytać/pisać bloki bo wiesz gdzie co jest.
c) wpisywałem w FAT w typie sytemu który zrobił format swoją nazwę np "moje". Dla PC nie było różnicy, ale moje urządzenie wiedziało że ta karta jest sformatowana przez niego, a jeśli tam nie było tego napisu, to wymuszało format. Więc znów miałem 100% pewności że dane są zawsze w tym samym miejscu.
d) zakładałem na karcie plik tekstowy przez PC, np dane.txt
e) przez DMDE robiłem zrzut do procesora tablicy plików oraz jej położenie, a także położenie pliku. Zaraz po formacie procesor wgrywał na kartę obraz położenia pliku. Dzieki temu znów na 100% zawsze wiedziałem gdzie jest ten plik i tablica z jego wpisem i długością pliku. W ten sposób pojawiał mi się na karcie plik dane.txt który dla PC był widoczny normalnie ale dla urzadzenia był on zawsze w tych samych blokach, to znów gigantycznie ułatwiało zapis do pliku
f) ostatnią rzeczą po zapisie każdego 512 bloku do tego pliku jest aktualizacja jego długości i wpisanie kolejnego położenia bloku tego pliku. Poniewaz zawsze zaczyna się w tym samym miejscu to wiem gdzie szukać początek, a potem gdzie dopisac kolejny wpis. Ale to już wiedza z systemu FAT.
Na początek zrób to co powyżej, utwórz plik tekstowy na PC o pojemności np 10kb wypełniając go pustymi spacjami. Zrób zrzut obrazu karty do procka. Teraz możesz śmiało wpisywać dane do pliku blok po bloku, bez aktualizacji jego rozmiaru w FAT, ponieważ jeśli nie przekroczysz 10kb jego objętości to PC poprawnie go odczyta. Najpierw próbuj tak żeby opanować działanie, dopiero potem baw się w FAT
g) robiąc zrzuty obrazu karty, potrzebujesz jakieś max 1kb flasha procesora. Bo system plików zabiera tylko kilka bloków, z czego chyba 3 to w większości same zera (więc już programowo dopełniasz go zerami do 512 bajtów). Oczywiście bloki nie są po kolei, ale robiac własny format zawsze wiesz gdzie je umiescić bo zawsze będą w tym samym miejscu.
Więc taki to najprostszy myk żeby na karcie założyć 1 plik do odczytu/zapisu przez PC i urządzenie i gigantycznie uprościć sobie program. Bo każdy komputer może inaczej sformatować kartę, więc procesor musi sam przeliczać sektory, położenia itp, a tu urządzenie na sztywno formatuje zawsze po swojemu, z zawsze tym samym położeniem danych. Więc w programie na sztywno wpisujesz położenie bloków.