Skocz do zawartości

Nucleo-H7 - odłączone piny SDMMC


radek04

Pomocna odpowiedź

27 minut temu, pmochocki napisał:

Nie zostało też oszacowane ile średnio zajmuje odczyt jednej paczki z 4 czujników.

Fakt, nie mierzyłem tego. Jeśli będzie trzeba, to zmierzę. Tak na oko (po jasności świecenia diody), to odczyt jest chyba najszybszą operacją w moim programie, o ile nie jest w trybie blokującym. Choć nawet w trybie blokującym daje radę odczytać i przetworzyć wszystkie dane 500 razy na sekundę. Na pewno najwięcej do roboty będzie z samą kartą. Postaram się stopniowo (acz szybko, gdyż czas mocno mnie goni) sprawdzać to, co umiem sprawdzić. 

Link do komentarza
Share on other sites

(edytowany)

Tak na szybko na razie  - faktycznie zapis dużych ilości danych nie zajmuje zauważalnie więcej czasu niż zapis niewielkiej ilości danych.

Ale...
Skoro zapis zajmuje więcej niż 1/500 sekundy, jak to zrobić, by podczas zapisu były wykonywane inne operacje - przynajmniej odczyty z I2C? Jeśli odczyt będzie w trybie DMA, to nie zaburzy on toczącego się procesu zapisu? Jeśli odczyt zainicjuję w przerwaniu timera, to owo przerwanie - nomen omen - przerwie operację o niższym priorytecie, czyli właśnie zapis. A jeśli w pętli głównej programu, to program nie dojdzie do tego momentu zanim zapis się nie skończy.
Dobrze myślę???

Czy też po inicjalizacji zapisu on będzie się spokojnie wykonywał, a w tym samym czasie mogę odczytywać dane z czujników?

Edytowano przez radek04
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

No nie wiadomo albo ja nie wiem trzeba sprawdzić, bufory w interfejsie SDMMC od czegoś są. Jeśli zapis dużej ilości będzie działać, np. te rzeczone 500 kompletów (500 x 48 B) jak się odbiera z I2C, to nie ma co myśleć o wielowątkowości, ja bym najpierw to sprawdził.

Link do komentarza
Share on other sites

(edytowany)

Przetestowałem różne warianty, z różnymi wielkościami danych i konkluzja jest następująca:
problem stanowi zapis na kartę z użyciem funkcji f_write(). Czasami zapisuje sprawnie, a czasami się "zacina" bez wyraźnej przyczyny.

Znalazłem funkcję do zapisu z użyciem DMA, ale mam kłopot z jej prawidłowym użyciem.

HAL_StatusTypeDef HAL_SD_WriteBlocks_IT 	( 	
  		SD_HandleTypeDef *  	hsd,
		uint8_t *  	pData,
		uint32_t  	BlockAdd,
		uint32_t  	NumberOfBlocks 
	) 		
Writes block(s) to a specified address in a card.
The Data transfer is managed in interrupt mode.

Note:
    This API should be followed by a check on the card state through HAL_SD_GetCardState().
    You could also check the IT transfer process through the SD Tx interrupt event.

Parameters:
    hsd    Pointer to SD handle
    pData    Pointer to the buffer that will contain the data to transmit
    BlockAdd    Block Address where data will be written
    NumberOfBlocks    Number of blocks to write

Return values:
    HAL    status

Przede wszystkim nie wiem, jak użyć parametrów BlockAdd oraz NumberOfBlocks.

Jak podać adres bloku na karcie? I czy można to zapisać do jakiegoś pliku? Jeśli nie, to jak to później odczytać?

Edytowano przez radek04
Link do komentarza
Share on other sites

Jak nazwa wskazuje, nic więcej nie mogę powiedzieć, będzie zapisywane surowych danych pod adresy w pamięci. Pusta karta, ale pusta bez niczego, partycji nawet, zaczynając od zera, od początku, to będą po kolei dane. Wtedy odczyt jako obraz karty. Taki HxD, hexedytor może otwierać dyski i możesz zgrać zawartość. Albo jest opcja, spreparować "pusty" plik na całą kartę, podglądasz kiedy się zaczyna, np zapisując i szukając potem ciąg znaków 0xDEADBEEF i od tego adresu zapisujesz sobie dane i będą potem dostępne w pliku. Tylko taka oparacja może wymagać większego uszanowania systemu plików - nie znam struktury FATów, choć podejrzewam, może to być na bloki podzielony. No i to będzie wymagało kasowania bloków karty i ich ponownego programowania zawartością, więc czkawka może być. na surowo najlepiej, jeśli już i potem odczyt.

Tak na szybko, FAT, FAT32, czy exFAT wygląda całkiem obiecująco pod względem takich manipulacji na plikach, ale lepiej na surowo.

Edytowano przez matsobdev
Link do komentarza
Share on other sites

2 minuty temu, matsobdev napisał:

Wszystkie testy po formacie?

Nie. Ale też docelowo nie chciałbym formatować karty po każdym zapisie. Myślisz, że to ma znaczenie?

Przez chwilę myślałem, że przy zapisie do nowego pliku działa lepiej, ale ta teoria szybko upadła. 

Wszystko wskazuje na to, że ów projekt mnie pokona. 

Dziś wylutowałem podejrzane zworki, wróciłem do interfejsu SDMMC1, ale trybu 4-bit nie udało mi się w żaden sposób uruchomić. 

Zapis na kartę (każdej ilości danych) zajmuje wiecej niż 1/500 s, a w trybie nieblokujacym nie udało mi się zapisać.

Jutro sprawdzę, czy sam zapis z akcelerometrów przy 400 Hz da radę. To takie absolutne minimum, które jestem w stanie zaakceptować. Jeśli nie, to porzucam zapis na SD na rzecz bezprzewodowego transferu. 

Do końca tygodnia muszę zaprojektować PCB, by od początku stycznia zbierać dane. Jeśli WiFi (BT raczej się nie sprawdzi) nie zadziała, to pozostanie mi wywiesić białą flagę. 

Link do komentarza
Share on other sites

2 minuty temu, radek04 napisał:

Przez chwilę myślałem, że przy zapisie do nowego pliku działa lepiej, ale ta teoria szybko upadła. 

W sensie plik_1.txt pierwsza próba, plik_2.txt druga? Bez usuwania? Też bym uważał, że tak lepiej, bo wtedy widać, że pliki nie są pofragmentowane.

Link do komentarza
Share on other sites

Tak probowałem. Ale to nie miało znaczenia. Gdy działało, to działało zarówno na nowym pliku, jak i przez dopisywanie do starego. A gdy nie działało, nie działało nic. Przyczyna nieznana. Ten sam program. Czasem zapis z zapasem czasowym (widac po mrugajacej diodzie), czasem jakby się "zawieszał" i nie nadążało. Testy na "zegarze" dużo wolniejszym niż 500 Hz.

Link do komentarza
Share on other sites

39 minut temu, radek04 napisał:

Testy na "zegarze" dużo wolniejszym niż 500 Hz.

Nie chodzi chyba o zegar karty, czyż nie?

52 minuty temu, radek04 napisał:

Do końca tygodnia muszę zaprojektować PCB

Pod H7? To pewnie by rozwiązało problem 4 bitów.

52 minuty temu, radek04 napisał:

Jeśli WiFi (BT raczej się nie sprawdzi) nie zadziała, to pozostanie mi wywiesić białą flagę.

BT SPP pewnie by dało radę. Tylko moduł z wysokim baudem na UART. Ale zawsze jest opcja serial po kablu i na telefon, to wtedy może być na obiekcie badań gdzieś, w końcu STM też będzie. No i bateria już nie potrzebna. Tak to pewnie wszystko blokowane by działało, odczyt 48 bajtów po I2C i zaraz wysyłka serialem. Opcja szybka w sprawdzeniu domyślam się.

Link do komentarza
Share on other sites

3 godziny temu, matsobdev napisał:

Nie chodzi chyba o zegar karty, czyż nie?

Nie, nie. Mam na myśli wolniejsze przerwania, po których wykonywane sa wszystkie operacje. Aczkolwiek zegary procesora i karty tez testowałem bardzo różne.

 

3 godziny temu, matsobdev napisał:

Pod H7? To pewnie by rozwiązało problem 4 bitów.

Tak, pod ten sam, co w Nucleo, tylko w wersji 176-pinowej. Dlaczego uważasz, ze to rozwiąże problem? Przez podłaczone peryferia do Nucleo? Dziś większość odłączyłem. Zostały tylko piny, które działaja w wersji 1-bitowej, więc one racxej nie są przyczyną błędów. 

 

3 godziny temu, matsobdev napisał:

Ale zawsze jest opcja serial po kablu i na telefon

Niestety nie. Układ musi być jak najlżejszy. Bateria będzie najcięższa.

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.