Karta microSD na SDHOST

Mar 30, 2024 0 Replies

Mam problem dość niszowy, w niepopularnej tutaj architekturze (pic32mz) ale może ktoś mądry skojarzy z opisu problemu coś z własnego doświadczenia z SDHOST na innym mcu bo SDHOST jest pewnym standardem sprzętowym i jego rejestry (oraz inicjalizacja) są analogiczne bez względu na architekturę.



W jednym projekcie potrzebuję napisać driver do SDHOST, posiłkuję się sterownikiem z Harmony 2.06 ale niestety on ma jakiś problem z działaniem. Sterownik napisany na jego podstawie inicjuje kartę prawidłowo ale tylko do momentu przełączenia jej na szynę 4-bit. Od tego momentu DMA przestaje zwracać dane z dalszego procesu inicjalizacji karty (timeoutuje). Jak się wyłączy przełączanie i zostawi kartę w trybie 1-bit to inicjacja przebiega do końca prawidłowo ale za to próba odczytu bloku 0 nie działa, tzn. DMA nie wypełnia wskazanego bufora zawartością sektora 0. Nie zwraca też żadnych błędów, wywoływane jest przerwanie DMA sygnalizujące koniec transferu (oczywiście kwestie d-cache i DMA są ogarnięte).



Cały proces inicjalizacji wygląda prawidłowo od strony kodu, jest z godny z tym co zaleca SD Association w swojej dokumentacji do SDHOST.



Przyjrzałem się też kodu z Harmony 3 ale (pomijając zaciemnianie tego kodu przez wstawki do konfiguratora) jest on podobny do tego z Harmony 2.x choć ma już rozszerzenia dla protokołu MMC a  kod dot. SD jest analogiczny do tego z Harmony 2.x. Jaka może być przyczyna, że przełączanie karty w tryb 4-bit psuje DMA? Karta zwraca zgodność w trybie 4-bit. U-boot prawidłowo czyta tą kartę na tej konkretnej płytce uruchomieniowej , więc to nie problem sprzętowy... Kod U-Boota jest też analogiczny (co do sekwencji inicjalizacji) ale akurat na tej platformie nie korzysta z DMA tylko z pio.


Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required