Karta microSD na SDHOST

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.

Reply to
Marek
Loading thread data ...

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.