radek04 Grudzień 10, 2022 Autor tematu Udostępnij Grudzień 10, 2022 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ć. Cytuj Link do komentarza Share on other sites More sharing options...
radek04 Grudzień 10, 2022 Autor tematu Udostępnij Grudzień 10, 2022 (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 Grudzień 10, 2022 przez radek04 Cytuj Link do komentarza Share on other sites More sharing options...
matsobdev Grudzień 10, 2022 Udostępnij Grudzień 10, 2022 Ale jakieś dane KB(MB)/s, czy tam ile bajtów w ile czasu zapisano. To też najlepiej sprawdzić, kolejny stopień. Zapisywać dane w jakimś czasie i podbijać licznik po udanym odczycie z czujnika. Cytuj Link do komentarza Share on other sites More sharing options...
radek04 Grudzień 10, 2022 Autor tematu Udostępnij Grudzień 10, 2022 No OK. Ale wiem, że zapisuje w czasie większym niż 1/500 sekundy. A co 1/500 sekundy muszę robić nowe odczyty. Czy bez wielowątkowości jestem w stanie to zrobić? Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
matsobdev Grudzień 10, 2022 Udostępnij Grudzień 10, 2022 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ł. Cytuj Link do komentarza Share on other sites More sharing options...
radek04 Grudzień 12, 2022 Autor tematu Udostępnij Grudzień 12, 2022 (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 Grudzień 12, 2022 przez radek04 Cytuj Link do komentarza Share on other sites More sharing options...
matsobdev Grudzień 12, 2022 Udostępnij Grudzień 12, 2022 (edytowany) 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 Grudzień 12, 2022 przez matsobdev Cytuj Link do komentarza Share on other sites More sharing options...
radek04 Grudzień 12, 2022 Autor tematu Udostępnij Grudzień 12, 2022 Jeśli będę w stanie jakos odczytać takie surowe dane, to powinno być ok. Tylko jak moge zacząc w ogóle to sprawdzać? Jak podać ten adres na karcie? Cytuj Link do komentarza Share on other sites More sharing options...
matsobdev Grudzień 12, 2022 Udostępnij Grudzień 12, 2022 5 godzin temu, radek04 napisał: Czasami zapisuje sprawnie, a czasami się "zacina" bez wyraźnej przyczyny. Wszystkie testy po formacie? Cytuj Link do komentarza Share on other sites More sharing options...
radek04 Grudzień 12, 2022 Autor tematu Udostępnij Grudzień 12, 2022 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ę. Cytuj Link do komentarza Share on other sites More sharing options...
matsobdev Grudzień 12, 2022 Udostępnij Grudzień 12, 2022 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. Cytuj Link do komentarza Share on other sites More sharing options...
radek04 Grudzień 12, 2022 Autor tematu Udostępnij Grudzień 12, 2022 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. Cytuj Link do komentarza Share on other sites More sharing options...
pmochocki Grudzień 12, 2022 Udostępnij Grudzień 12, 2022 Może się zainspirujesz tym: https://community.st.com/s/question/0D50X00009XkWceSAF/stm32f411re-stm32cube-fatfs-sdio-sdcard-always-returns-frdiskerr 1 Cytuj Link do komentarza Share on other sites More sharing options...
matsobdev Grudzień 12, 2022 Udostępnij Grudzień 12, 2022 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ę. Cytuj Link do komentarza Share on other sites More sharing options...
radek04 Grudzień 12, 2022 Autor tematu Udostępnij Grudzień 12, 2022 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. Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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!