RTV forum PL | NewsGroups PL

Nieznana karta SD zakłóca komunikację na SPI w projekcie STM32F107 z FreeRTOS i lwIP

Niezainicjowana karta SD miesza na magistrali SPI

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Nieznana karta SD zakłóca komunikację na SPI w projekcie STM32F107 z FreeRTOS i lwIP

Atlantis
Guest

Thu Nov 03, 2022 12:36 pm   



Taka ciekawostka, zauważona podczas wczorajszego uruchamiania
(opisywanej nieco wcześniej) konstrukcji odtwarzacza/radia internetowego
na STM32F107. Po uruchomieniu FreeRTOS-a oraz lwIP zabrałem się za
testowanie pozostałych peryferiów. Sprawdziłem m.in. czy nadal działa
karta SD podłączone do magistrali SPI. Na tej samej magistrali pracuje
także pamięć RAM, używana w roli bufora.

Karta zgodnie z oczekiwaniami działa zupełnie prawidłowo - inicjuje się,
jest widziana przez FatFS, mogę czytać jej zawartość oraz płynnie
odtwarzać przechowywane na niej pliki MP3.

Wszystko działało całkowicie poprawnie do momentu, gdy w ramach
kolejnego testu zamiast karty zamontowałem pendrive'a (a więc nie była
już wywoływana jej inicjacja). Wszystko zaczęło się psuć - odtwarzanie
przerywało, zupełnie jakby był jakoś problem w komunikacji pomiędzy USB,
pamięcią SPI RAM oraz VS1003 (ten ostatni układ na osobnej magistrali
SPI). Na początku pomyślałem, że gdzieś zmniejszana jest prędkość
transmisji na SPI, ale okazało się, że wszystko jest skonfigurowane
poprawnie.

Aż w końcu znalazłem winowajcę - sama karta SD pozostawiona w gniazdku
miesza w komunikacji na magistrali, o ile nie zostanie zainicjowana.
Jeśli jej nie ma - wszystko jest w porządku. Jeśli jest i przejdzie
inicjację - też. Za to jeśli pozostawię ją niezainicjowaną, urządzenie
zaczyna szwankować.

Nigdy jeszcze nie spotkałem się z taką sytuacją, a kart SD na SPI
używałem w wielu swoich projektach, jeszcze z czasów AVR-ów. Linia MISO
miała ustawionego wewnętrznego pull-upa. Poza zauważeniu problemu
dodałem jeszcze zewnętrznego 10k, ale to nie pomogło. Linia CS rzecz
jasna jest podciągnięta do linii zasilania 3,3V rezystorem 10k, podobnie
jak linia SD_PRESENT.

Niby nie stanowi to dla mnie wielkiego problemu, bo docelowo karta nie
będzie hot-swapowalna i mogę ją po prostu inicjować przy każdym starcie
urządzenia. Zastanawia mnie po prostu potencjalna przyczyna takiego
zachowania.

Dawid Rutkowski
Guest

Thu Nov 03, 2022 1:40 pm   



A jak się "inicjuje" kartę SD?
ZTCP to SD ma minimum dwa (a chyba nawet 3, ale może te 2 to dwa "podtryby") tryby pracy - emulacja
MMC, czyli "zwykłe" SPI, oraz SD.
Ale nie wiem, który z tych trybów jest aktywny po włączeniu zasilania.
"Logicznie" byłoby, gdyby SPI - bo po coś jest ta emulacja MMC - ale może jednak SD?

Atlantis
Guest

Thu Nov 03, 2022 6:38 pm   



On 3.11.2022 12:40, Dawid Rutkowski wrote:

Quote:
Ale nie wiem, który z tych trybów jest aktywny po włączeniu zasilania.
"Logicznie" byłoby, gdyby SPI - bo po coś jest ta emulacja MMC - ale może jednak SD?

Właśnie też o tym pomyślałem w pierwszym momencie, ale:
1. Kart SD na SPI używam w swoich projektach od lat, a dopiero teraz
udało mi się zaobserwować takie zachowanie.
2. Coś mi trudno uwierzyć, że w wiodącym standardzie nośników pamięci
takie nieprzewidywalne zachowanie mogłoby przejść w specyfikacji. Nie
mówię, że karta musi startować w trynie SPI, jednak niech przynajmniej
zostanie ten podstawowy punkt wspólny - trzymanie magistrali w stanie
wysokiej impedancji tak długo, jak linia CS jest w stanie wysokim.

heby
Guest

Thu Nov 03, 2022 6:41 pm   



On 03/11/2022 18:38, Atlantis wrote:
Quote:
1. Kart SD na SPI używam w swoich projektach od lat, a dopiero teraz
udało mi się zaobserwować takie zachowanie.

Czy sprawdzałeś aby kartę w nowym standardzie, jak XD czy HC? Mimo
róznych zapewnień, te karty zachowuja się bardzo niestabilnie w starych
urządzeniach. I to raczej nie z powodu pojemności.

Marek
Guest

Thu Nov 03, 2022 9:17 pm   



On Thu, 3 Nov 2022 18:38:22 +0100, Atlantis <marekw1986NOSPAM@wp.pl>
wrote:
Quote:
2. Coś mi trudno uwierzyć, że w wiodącym standardzie nośników
pamięci
takie nieprzewidywalne zachowanie mogłoby przejść w specyfikacji.
Nie
mówię, że karta musi startować w trynie SPI, jednak niech
przynajmniej
zostanie ten podstawowy punkt wspólny - trzymanie magistrali w
stanie
wysokiej impedancji tak długo, jak linia CS jest w stanie wysokim.

Jeśli dobrze pamiętam to zgodnie ze specyfikacją linia CS jest
aktywna dopiero po zainicjowaniu trybu SPI. A inicjalizacja trybu SPI
(który nie jest domyślny) wymaga CS=1 i pewnej sekwencji SCK.
Zatem jeśli kartę nie zainicjujesz a host z innym urządzeniem na tym
samym SPI zacznie generować SCK to karta może się wtrącić na linii
MISO z CS=1

--
Marek

Dawid Rutkowski
Guest

Fri Nov 04, 2022 10:11 am   



czwartek, 3 listopada 2022 o 18:38:38 UTC+1 Atlantis napisał(a):
Quote:
On 3.11.2022 12:40, Dawid Rutkowski wrote:

Ale nie wiem, który z tych trybów jest aktywny po włączeniu zasilania.
"Logicznie" byłoby, gdyby SPI - bo po coś jest ta emulacja MMC - ale może jednak SD?
Właśnie też o tym pomyślałem w pierwszym momencie, ale:
1. Kart SD na SPI używam w swoich projektach od lat, a dopiero teraz
udało mi się zaobserwować takie zachowanie.
2. Coś mi trudno uwierzyć, że w wiodącym standardzie nośników pamięci
takie nieprzewidywalne zachowanie mogłoby przejść w specyfikacji. Nie
mówię, że karta musi startować w trynie SPI, jednak niech przynajmniej
zostanie ten podstawowy punkt wspólny - trzymanie magistrali w stanie
wysokiej impedancji tak długo, jak linia CS jest w stanie wysokim.

Hehe, wiodącym, przecież wiadomo, czemu jest "wiodący" - bo najtańszy - a to ma swoją cenę ;>
Może do tej pory używałeś kart MMC?
Tak czy siak - własnie po to pytałem, "jak się inicjalizuje" - może być na poziomie kodu.
Kto wie, co tam jest za pomysł - a może być pokrętny, tak jak napisal Marek.
Bo SD to nie jest SPI.
Że ew. może emulować, to oznacza tylko tyle, ze będzie SPI, ale dopiero po wlączeniu tego trybu.

MKi
Guest

Fri Nov 04, 2022 10:22 am   



W dniu 2022-11-03 o 12:36, Atlantis pisze:
Quote:
...
karta SD podłączone do magistrali SPI. Na tej samej magistrali pracuje
także pamięć RAM, używana w roli bufora.

Jeśli karta SD ma być wyjmowana to jest według mnie kiepski pomysł.
Wypadałby założyć, że do gniazda karty włożysz cokolwiek,
w szczególności zepsutą kartę (np. ze zwartymi wyprowadzeniami).

To natychmiast kładzie komunikację z pamięcią RAM i całe urządzenie
nie działa.

Pozdrowienia,
MKi

elektroda NewsGroups Forum Index - Elektronika Polska - Nieznana karta SD zakłóca komunikację na SPI w projekcie STM32F107 z FreeRTOS i lwIP

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map