-
1. Data: 2024-03-30 07:29:46
Temat: Karta microSD na SDHOST
Od: Marek <f...@f...com>
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.
--
Marek