Elektroda.pl
Elektroda.pl
X
Szafy Rack
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

STM32F4 - FatFS + SPI + DMA - Losowe zerwania transmisji z kartą SD

20 Maj 2016 13:04 1077 8
  • Poziom 28  
    Cześć,
    Mam dziwny problem z obsługą karty SD w trybie SPI przy użyciu DMA (bez DMA problem był identyczny). Mam sterownik swojej konstrukcji, który co kilka minut odtwarza przy pomocy FatFS komunikaty audio z plików WAV nagranych na karte SD. Losowo co jakiś czas komunikacja z kartą urywa się i ponieważ nie mam jeszcze obsługi timeotów, program zawiesza się czekając w nieskończoność na zakończenie transmisji. Po zadziałaniu watchdoga i resecie sterownika wszystko wraca do normy i komunikaty są dalej odtwarzane. Dodam, że nie mam sterowania zasilaniem i karta tak czy inaczej cały czas dostaje Vcc.

    Najdziwniejsze jest to, że czasami sterownik działa dwa tygodnie non stop bez problemu a czasami resetuje się co kilkadziesiąt komunikatów. Czy ktoś może podpowiedzieć gdzie szukać rozwiązania tego problemu? Kod wrzucę wieczorem ale na chwilę obecną mam kilka tropów

    1. Zegar SPI jest skonfigurowane z preskalerem /8. Może to jest za dużo i powinienem zwolnic nieco zegar?

    2. Sterownik pracuję na obiekcie telekomunikacyjnym, w wentylowanej szafie rack. Zauważyłem pewną małą zależność od warunków pogodowych i zastanawiam się, czy to po prostu karcie SD nie jest za zimno / za gorąco / za wilgotno

    3... Coś jeszcze?
  • Szafy Rack
  • Szafy Rack
  • Poziom 28  
    Hm..... Sterownik jest podłączony do radiotelefonu, który pcha wprawdzie w antenę kilka watów ale mam od niego pełną separację (trafko + optotranzystor). Zresztą w domu też takie rzeczy się dzieją a antenę mam po drugiej stronie mieszkania na balkonie. Koncentryk raczej dobry i nic z niego nie sieje

    Twoim zdaniem jeżeli jest to EMC, to bardziej robi krzywdę karcie, czy mikrokontrolerowi? Zastanawia mnie, że gdy nastąpi taki przypadek, to można sekundę potem wcisnąć reset i wszystko rusza bez najmniejszego problemu. Pojemność 100nF na zasilaniu karty mam, zastanawiałem się czy nie dać czegoś na linię danych (kilka piko). Nie wiem tylko jaką wartość użyć, żeby to coś pomogło a nie zniekształciło przebiegów

    Wrzucił bym zdjęcia płytki ale pewnie moderator zaraz by wywalił linki do mojej Picasa.
  • Specjalista - Mikrokontrolery
    100n na kartę, która może pociągnąć sporo prądu, to zbyt mało. EMC to nie tylko zakłócenia wyindukowane, to też różne dziwne spadki napięć przy impulsowych obciążeniach czy interferencje między ścieżkami. Jeśli problemem jest EMC, to ono może powodować np. całkowite zawieszenie mikrokontrolera, ale oczywiście całkowite zawieszenie karty też.
  • Poziom 33  
    @EBC41
    Cytat:

    Losowo co jakiś czas komunikacja z kartą urywa się i ponieważ nie mam jeszcze obsługi timeotów, program zawiesza się czekając w nieskończoność na zakończenie transmisji.


    Jeżeli to wina karty to obsługa timeoutów powinna pomóc. Kiedyś miałem przypadek, że po ESD karty nie dało się ożywić w żaden sposób poza powtórną sekwencją inicjalizacji.
  • Poziom 28  
    Freddie Chopin napisał:
    100n na kartę, która może pociągnąć sporo prądu, to zbyt mało.

    Ile powinno wystarczyć? 10uF + bocznik 100nF? A na MISO i MOSI dawać te kilka pF czy nie?

    Freddie Chopin napisał:
    EMC to nie tylko zakłócenia wyindukowane, to też różne dziwne spadki napięć przy impulsowych obciążeniach czy interferencje między ścieżkami. Jeśli problemem jest EMC, to ono może powodować np. całkowite zawieszenie mikrokontrolera, ale oczywiście całkowite zawieszenie karty też.


    Jak próbuję sobie przypomnieć samo testowanie tego sterownika, to pamiętam taką sytuację gdy pod debuggerem komunikacja z kartą ustałą a sam procek działał poprawnie, dlatego to raczej siedzi w karcie. Wieczorem wrzuce zdjęcia i schematy ale fakt faktem, że slot karty SD jest w rogu płytki drukowanej. Ścięzki idą dolną wartwą w okolice procesora i krzyżują się np. z liniamii do PHY Ethernet. Nie sądził bym jednak, że problem leży w zakłóceniach indukowanych od tego Ethernetu. Starałem się oblewać masą jak najbardziej się dało.
  • Specjalista - Mikrokontrolery
    EBC41 napisał:
    Ile powinno wystarczyć? 10uF + bocznik 100nF? A na MISO i MOSI dawać te kilka pF czy nie?

    Do zasilania karty możesz dorzucić dowolnie dużą pojemność - nadmiar na pewno nie zaszkodzi <: 10uF to jest już coś sensownego, więc będzie ok. Co do kondensatorów na ścieżkach, to spróbować możesz zawsze, choć podobny efekt pewnie osiągniesz testowo zmniejszając zegar SPI.
  • Poziom 28  
    Hm.. Będziemy testować :) Zegara SPI nie chcę zbytnio obniżać, żeby sterownik nadążał z odczytem plików WAV. Są one zakodowane jako mono 8bit 32kHz i przy /256 nie za bardzo to chciało dzialać, tj. program nie zdążal wypełniać buforu przed jego opróżnieniem.

    Tutaj jest jakaś nota aplikacyjna motoroli: http://www.nxp.com/files/timing_interconnect_access/doc/inactive/EB393.pdf i tu jest mowa o pojemności 1nF ale ten układ pracuję z zegarem do 3MHz. Ja spróbuje wykopać u siebie coś nie więcej jak 220pF
  • Poziom 28  
    Uff.. W końcu wykroiłem co potrzeba ze schematu. Poniżej są dwa screeny obrazujące to jak idą linię danych z karty. Na pierwszym z nich jest CS a na drugim MOSI. MISO i SCK idzie w pobliżu MOSI. Zasilanie jest podbierane prosto ze stabilizatora a masa idzie na poligon, który tu jest niewidoczny aby nie zaciemniać.

    STM32F4 - FatFS + SPI + DMA - Losowe zerwania transmisji z kartą SD STM32F4 - FatFS + SPI + DMA - Losowe zerwania transmisji z kartą SD

    Obstawiam, że problemem jest tutaj CS, który idzie osobno i co gorsza koło gorącej części w.cz. :/ Stety-niestety slot karty SD opinałem na samym końcu projektowania tej płytki i nie miałem zbytnio innego wyjścia niż coś takiego :/ Transformator liniowy, który jest nad ścieżką, separuje sygnał biegnący do radiotelefonu ustawionego nawet na 15W mocy wyjściowej w.cz. Niestety na stacji uziemienie anten i nadajnika nie jest idealne, do tego może być problem z powrotnym prądem w.cz. pełzającym po ekranie koncentryków. Przerabiałem to na innej stacji, gdzie przy dużej wilgotności wieszało mi to cały sterownik do zera. Tutaj radia są zasilane osobnym zasilaczem transformatorowym (a raczej sterownik ma swój zasilacz) a sama płytka niby ma zapewniać 100% separację. Może jednak w.cz. pełzające po masie w.cz. przenika na masę cyfrową przez pojemności pomiędzy ścieżkami i z tąd ten problem.

    Spróbuje pododawać te pojemności i zobaczymy co to będzie. Bez bicia przyznaje się, że za stabilizatorem jest tylko 10uF + drugie 10uF zaraz przy procku. Przy karcie nie ma nic :oops: