Skocz do zawartości

STM32 SPI zakłóca odczyt ADC? + pytanie o FATFS


arasu

Pomocna odpowiedź

Czesc,

udalo mi sie ostatnio napisac na blue pillu prosty voice recorder, ale przy odtwarzaniu nagrania slyszalem mase stukow (mimo to glos jest calkiem rozpoznawalny). Myslalem ze to moze byc problem z zasilaniem czy cos, ale zrzucilem sobie nagranie na program ala audacity i podejrzenie o stuki padlo na SPI. Jezeli chodzi o kod to uzywam ADC z czestotliwoscia 16kHz i wypelniam bufor o rozmiarze 512. Jak bufor jest pelny robie zapis do karty SD za pomoca biblioteki FATFS( ktorej nie jestem pewien czy uzywam poprawnie), wszystko wygenerowane w CUBEMX i zbudowane na plytce stykowej.

image.thumb.png.1275065a6ce62cfd28b7259e4e31747a.png

x = ~32ms ; y = ~64ms                  | 512/16kHz = 0.032 s = 32 ms

Nagrałem dzwiek fali sinus z glosnikow i zauwazylem ze te zaklocenia troche oddaja to co sie dzieje u mnie w kodzie, tam gdzie jest 1 na SS wyglada na to ze to jest moment gdy robie f_write do SD, a tam gdzie jest 2, dzieje sie znow f_write z kolejnym pelnym buforem + f_sync, ktory jak rozumiem robi flush danych (danych zapisanych wczesniej za pomoca f_write() ) do karty.

I teraz pytanko o FATFS.

Z tego co probowalem wyczytac z dokumentacji (http://elm-chan.org/fsw/ff/doc/write.html), for i wydebugowac, ta biblioteka tworzy w RAM mcu takie wirtualne odzwierciedlenie tego co jest w pliku na karcie SD w postaci  struktury FILE, i teraz jak robie f_write(bufor), to to sie nie przeklada na fizyczny zapis danych do karty za pomoca SPI, tylko na przeniesienie mojego bufora do bufora struktury FILE (czyli kopia z RAM do RAM), a fizyczny zapis do SD nastepuje dopiero po wywolaniu funkcji f_sync(). Wtedy to co jest w FILE.data[] leci po SPI do karty. Dobrze to rozumiem? Czy moze f_sync() uzywac co 10 albo 100 zapis zamiast co 2?

Z analizy obrazka z drugiej strony by wynikalo ze jezeli to zeczywiscie SPI tam tak miesza, to f_write() jednak dokonuje zapisu  po SPI do karty SD, tylko wtedy nie rozumiem czemu w 2 dzieje sie taki meksyk, f_sync() nie powinno miec nic do wypchniecia i zaklocenia nie powinny tam trwac dwa razy to co sie dzieje w 1.

 

Ostatecznie pytanko, czy da sie te zaklocenia ogolnie jakos wyeliminowac sprzetowo?

 

Piąteczka

Edytowano przez arasu
Link do komentarza
Share on other sites

5 godzin temu, arasu napisał:

udalo mi sie ostatnio napisac na blue pillu prosty voice recorder, ale przy odtwarzaniu nagrania slyszalem mase stukow (mimo to glos jest calkiem rozpoznawalny). Myslalem ze to moze byc problem z zasilaniem czy cos, ale zrzucilem sobie nagranie na program ala audacity i podejrzenie o stuki padlo na SPI.

@arasu czy masz możliwość przetestowania tego programu na innej płytce? Jakość i oryginalność mikrokontrolerów na płytkach typu blue pill nie jest zbyt wysoka. Taki problem może wynikać m.in. z problem z samym mikrokontrolerem. Dla pewności warto byłoby to wykluczyć. Tak samo sprawdź czy to nie kwestia z samym zasilaniem płytki - może pojawia się jakiś chwilowy większy pobór prądu, który wprowadza takie zakłócenia?

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

Może po prostu, gdy dokonuje się zapis to procesor i karta SD pobierają więcej prądu i zakłócają tor analogowy?
Ja bym dolutował kondensatory ceramiczne 100nF-1uF na liniach zasilania i zobaczył co wtedy.

  • Lubię! 2
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.