Niezainicjowana karta SD miesza na magistrali SPI

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.

Reply to
Atlantis
Loading thread data ...

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?

Reply to
Dawid Rutkowski

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.
Reply to
Atlantis

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.

Reply to
heby

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

Reply to
Marek

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.

Reply to
Dawid Rutkowski

W dniu 2022-11-03 o 12:36, Atlantis pisze:

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

Reply to
MKi

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.