Ads_700x200

piątek, 13 kwietnia 2012

microSD - adapter dla AVR i nie tylko

Witam, 

W związku z tym, że w chwilach wolnych wciąż pracuję nad Playerkiem WAV z użyciem procesora AVR, jak w tym temacie Link postanowiłem sobie przygotować uniwersalny adapter do kart pamięci microSD. Podstawowym celem było to aby konstrukcja umożliwiała zasilanie napięciem +5V albo +3,3V, a także jak najmniejsze wymiary adapterka - tak aby można było go wszędzie zamontować z powodzeniem. 


W tym celu użyłem jakiegoś gniazda do kart pamięci micro SD, które miałem pod ręką, umiejscowiłem je na PCB tak aby troszkę wystawała karta pamięci. Po to aby łatwo było ją wkładać i wyjmować. Układ pracuje z buforem 74LVC125 i to on zapewnia możliwość stosowania różnych napięć zasilania do kart. Buforowane są tylko linie wejściowe do karty czyli: SCK, MOSI oraz CS. Natomiast linia MISO w kierunku do procesora nie jest buforowana. Całość była testowana na dwóch prezentowanych napięciach i działa z powodzeniem nawet na bardzo dużych prędkościach SPI. 

Zastosowałem także (co dla mnie było bardzo istotne) programową możliwość włączania/wyłączania zasilania do samej karty w celu jej ew zupełnego zresetowania gdyby coś podczas komunikacji się zawiesiło. Opcja ta sprawuje się rewelacyjne. Dodatkowo wyprowadzony jest sygnał CD (Card Detect), który potrafi być bardzo użyteczny Wink Poniżej schemat: 



Sama płytka PCB posiada bardzo małe wymiary 29x35mm, umożliwia z przodu montaż na dystansach 3mm. Z tyłu można sobie goldpiny skierować w dół albo w bok. (tutaj w prototypie zainstalowałem pionowo do góry). Jeśli są skierowane w dół to można jeszcze o kilka mm skrócić PCB - po prostu obciąć. W tej części nie biegną żadne ścieżki (za goldpinami) 



w szeregu goldpinów, tuż za pinem PWR do sterowania zasilaniem, umieszczony został jeszcze jeden pin GND, po to aby można było zapiąć jumperkiem sygnał PWR do GND, wtedy zasilanie karty będzie włączone na stałe - jeśli akurat nie potrzebuję sterować nim z procesora. Poniżej kilka fotek adaptera. Niestety trafił mi się maleńki błąd stąd ta jedna krosóweczka, ale jak widać dało się ładnie naprawić i niewiele pracy to kosztowało - centymetr kynaru Wink(projektu PCB nie będę udostępniał, tym bardziej, że to płytka dwustronna z metalizacją otworów i wieloma przelotkami, co znacznie i tak utrudniłoby jej wykonanie metodą żelazkową) 










Adapter oczywiście obsługuje dowolne karty microSD, i jak do tej pory testowałem go już z użyciem PetitFS.... Jeszcze przyjdzie czas na FatFS. Muzyczki już ślicznie się odtwarzają. A no i oczywiście ładnie się także zapisują dane na kartę z użyciem petitka.

24 komentarze:

  1. Mam pytanie, czy ten tranzystor włączający napięcie na kartę jest jakiś krytyczny czy użyłeś BC807 bo taki akurat miałeś pod ręką?

    Mirek

    OdpowiedzUsuń
    Odpowiedzi
    1. Użyłem akurat tego tranzystora ponieważ (spójrz do jego noty PDF) jego maksymalny prąd kolektora to 500mA! a nie 100mA jak w większości tego typu typowych tranzystorków. Tak więc celowo dobrałem tutaj tranzystor. 100mA może nie wystarczyć albo nawet wtedy tranzystorek może odejść do krainy wiecznych łowów ;)

      Usuń
  2. Tak wiem Mirku, sprawdzałem jaki ma parametry ;-) Tylko nie sprawdziłem jaki apetyt ma karta :-)
    A z tego co napisałeś wynika, że całkiem spory

    Mirek

    OdpowiedzUsuń
    Odpowiedzi
    1. Ja bym powiedział nawet, że są różne karty i być może także ten tranzystor 100mA też by się wyrobił przy ich sporej części, jednak na pewno są mniej i bardziej prądożerne. Szczególnie sporo prądu łykają w trakcie rozruchu .... zatem tak w rzeczywistości , to po prostu tak na zapas i dla świętego spokoju dałem taki który potrafi znieść sporo więcej niż 100mA i nie zejść śmiertelnie ;)

      Usuń
  3. Rozumiem. Dzięki za wyjaśnienie sytuacji!

    Ps.
    jak to jest, że niektórzy mają nazwę użytkownika, a ja muszę jako "Gal anonim"?

    OdpowiedzUsuń
    Odpowiedzi
    1. Chyba trzeba założyć swój profil na google - czyli też konto na google - gmail czy jakoś tak - no i wtedy nadać swój nick i skończy się "Anonimowy" ;)

      Usuń
  4. Płytke robiłeś w firmie czy istnieją jaieś domowe sposoby na zrobienie metalizacji otworów itp.?

    OdpowiedzUsuń
    Odpowiedzi
    1. Zdecydowanie wszystkie płytki, które robię z metalizacją otworów to zamawiam w jakiejś firmie. Są jakieś sposoby na domowe robienie metalizacji ale jeszcze nikt kto ich spróbował później już do tego nie wraca, bo zbyt dużo zachodu a efekty hmmm gorzej niż mizerne. W efekcie końcowym to i tak sprawdza się później tylko przekładanie druta i lutowanie ręczne po dwóch stronach. A to z kolei pociąga za sobą konsekwencje w tej postaci, że ciężko takie przeloyki używać np pod elementami SMD :( no i przez to nie można już tak miniaturyzować płytki jak by się chciało.

      Usuń
  5. Pytanie jeszcze co do adaptera, właśnie dotarł do mnie bo sobie go zamówiłem:) ... opisane ma piny MOSI , MISO itd, ale czy to są nazwy pinów pod które trzeba podłączyć adapter pod mikrokontroler? (MISO <-> MISO itd) bo ostatnio kupiłem sobie konwerter USB-TTL i akurat na płytce miał opisane w taki sposób połączenie że RX do RX i TX do TX ... kombinowałem ponad 3 godziny jak doszedłem do tego.

    OdpowiedzUsuń
    Odpowiedzi
    1. Wiesz przy magistrali RS232 zawsze trzeba skrosować piny Tx i Rx pomiędzy przejściówką a mikrokontrolerem.

      W przypadku SPI absolutnie się tego nie robi. Czyli wszystko podłączasz tak jak jest pięknie opisane do procka ;) MOSI do MOSI, MISO do MISO itd żadnych tam jakichś sztuczek nie ma. To ma być SUPER wygodny adapterek i taki jest. Ja go muszę wręcz na ślepo zakładać do różnych swoich urządzeń, więc potrzebowałem szybkozłączki że tak powiem ;)

      Tylko jeśli nie będziesz używał sterowania zasilaniem to pamiętaj aby zewrzeć zworką dwa ostatnie piny GND i PWR

      Usuń
  6. No i pierwsza sztopa:) próbuje podłączyć ten adapterek SD do uC Atmega128 i coś chyba jest nie tak, bo nie wiem czy połączenia czy oprogramowanie coś haczy. Zapytam się jeszcze raz co gdzie podłączyć, czyli tak (SD)MOSI<->MOSI(m128 PB2) , (SD)MISO<->MISO(m128 PB3) , (SD)SCK<->SCK(m128 PB1) a (SD)CS<->SS(m128 PB0) ?? tu właśnie pytanie czy CS z SS? bo Atmega128 jest zintegrowana z mikrokontrolerem wiznetW5300 i właśnie na tych pinach SPI ma Dataflash, czy to ma jakiś wpływ na działanie? zauważyłem też że pin CS Dataflash nie jest podłączony do SS tylko do innego ogólnego przeznaczenia pinu (PB5). Czy pin CS adaptera SD też mam podłączyć do wybranego wolnego ogólnego przeznaczenia pinu m128?? no i czy czasem MOSI i MISO nie podłączać do PDO i PDI w m128?? no i na koniec co muszę skonfigurować w bibliotekach petitFS żeby się zainicjowało wszystko poprawnie w takiej konfiguracji?

    OdpowiedzUsuń
  7. MOSI, MISO i SCK już sobie wyjaśniliśmy więc może nie powtarzajmy tego.

    Natomiast pin CS na adapterze - dlaczego ma akurat odpowiadać pinowi SS w ATmega ??? Tzn można go podłączyć do SS ale można do dowolnego innego. Przecież sterowanie pinem CS(SS) podczas komunikacji nawet sprzętowej SPI jest realizowane WYŁĄCZNIE podkreślam WYŁĄCZNIE programowo przez programistę czyli przez ciebie panie kolego. Możesz więc użyć dowolnego pinu procka.

    Poza tym dziwne pytanie bo ani nie wiem co ty połączyłeś i w jaki sposób do swojego procka a pytasz mnie czy dobrze ? czy źle ? albo piszesz że wtopa czy sztopa.

    Poza tym nie PDO i PDI a PD0 i PD1 - ale ty mieszasz na maxa, to są piny do programowania ISP a nie do sprzętowego SPI w procku ATmega128.

    I na dodatek pytasz - ot tak - co musisz skonfigurować w PetitFS żeby to zadziałało ???? No sorki ale uważasz, że np napiszę teraz coś takiego że wystarczy np wstawić dwie linijki jak niżej:

    xxxx = bbbb - cccc;
    zzzz = gggg + aaaa;

    ??? sorki ale żartujesz jeśli uważasz że coś takiego można wyjaśnić w kilku słowach i to jeszcze w takich odpowiedziach na blogu ? JAK ? Jak to wytłumaczyć ? ;)

    Jeśli potrafisz to wytłumacz w ten sposób ja nie potrafię. Opisałem to na przestrzeni CAŁEGO ROZDZIAŁU w swojej książce pt: "Mikrokontrolery AVR Język C Podstawy programowania" .... masz ją może ??? Tam masz podstawy i jak konfigurować PetitFS natomiast w drugiej części tej książki masz już dziesiątki praktycznych i super przykładów jak to używać czy to do czytania plików dźwiękowych, czy też obrazów graficznych na LCD, czy do zapisywania danych do loggera itp itd itp

    http://www.sklep.atnel.pl/pl/p/KSIAZKA-II-DVD/36

    polecam

    OdpowiedzUsuń
  8. Zbliżają się moje imieniny :) więc może dostanę na prezent tą książkę. Sorki że trochę namieszałem, nerwy puszczają trochę. Od lutego tego roku zainteresuję się elektroniką i programowaniem uC, widocznie brakuje mi może cierpliwości. Pamiętam czasy kiedy to pisałem (15 lat temu) w assemblerze na C64 różne edytory czy gry ,teraz nie miałbym tyle chęci żeby w assemblerze coś naskrobać, a dlatego wspominam o asseblemrze, bo teraz mamy na tyle wygodne czasy że nasze układziki programujemy w języku C co uprościło maksymalnie robienie pisanie czegokolwiek. stąd moje pytanie gdzie i jak można szybko bez zbędnego błądzenia po kodzie zmienić konfiguracje petitFS... ale jak się okazuje te proste zmiany pinologii nie są tak proste pomimo tylu uproszczeń :) ale nie poddaje się i pokombinuje... problem polega na tym u mnie że program zatrzymuje się na inicjowaniu karty - zapętla się ... ale to nie miejsce na rozgrzebywanie takich spraw:)

    OdpowiedzUsuń
    Odpowiedzi
    1. No właśnie fajnie, że grzebałeś kiedyś w asemblerach bo teraz tym bardziej doceniasz możliwości języka C a z drugiej strony wiadomo, że gdy zajdzie potrzeba to będziesz w stanie zrobić sobie wstawkę w asemblerze i o to chodzi ;)

      Odnośnie PetitFS to wcale nie chodzi tylko o pinologię tzn jej ustawienia. Przecież PetitFS to że tak powiem warstwa oprogramowania odizolowana od warstwy sprzętowej i SUPER. Ale niestety trzeba mieć plik, który to scala - a w przykładach do PetitFS są przecież użyte interfejsy SPI ale oparte na USI w prockach ATtiny a nie na TWI w prockach ATmega. Zatem przeróbka przykładów PetitFS'a nie sprowadza się do zmiany kilku linijek na potrzeby definicji pinów, i przeważnie człowiek początkujący z PetitFS'em zwykle na tym się wykłada - bo wydaje mu się że tylko piny poustawia i chulaj dusza - a tu ZONK ;) ... dlatego trzeba nieco więcej zrobić ale na szczęście TYLKO JEDEN RAZ i już masz gotową przerobioną bibliotekę na procki ATmega z TWI. I to właśnie opisuję w pierwszej książce - jak po kolei, krok po kroku to przejść, jak radzić sobie z błędami kompilacji, nie bać się ich, jak to analizować aż w końcu jak uruchomić to na ATmega32 ;) ... a jak raz odpalisz to potem już tylko powielasz jeden plik i jedziesz...

      rozumiesz teraz ?

      Usuń
    2. Tak Tak rozumie się. Ale chyba zanim zacznę coś pisać zrobię sobie i wytrawie płytkę z gniazdem do tego mojego cuda z firmy propox, bo teraz mam jedną wielką pajęczynę kabli:) Użyję gniazda na przetwornicę firmy Atnel i pare innych standardów jak multiplekser do ISP oraz zegarek, lcd, buzerek.

      Usuń
  9. Mam takie pytanie- skąd mozna wziąć bibliotekę do karty micro sd ? Szukałem na eagle cadsoft ale nic takiego tam nie ma :(

    OdpowiedzUsuń
    Odpowiedzi
    1. Ja sobie sam tworzę takie elementy biblioteczne, których nie można znaleźć.

      Usuń
  10. Ok dziękuję bardzo
    PS. pierwszy tom ksiażki jest po prostu super!!!

    OdpowiedzUsuń
  11. Witam. Ostatnio planuję wykonać układ który będzie zapisywał dane na kartę SD. Będzie zasilany z baterii, a wartość napięcia to 5V ( w przyszłości 3.3V żeby zmniejszyć pobór prądu). Karta SD jak i bufory muszą być zasilane z 3.3V i tutaj będzie moje pytanie: czy mogę zasilić bufory i samą kartę poprzez diodę zenera 3.3V. Nie chcę stosować dodatkowego stabilizatora LDO. Czy po zastosowaniu diody jako "stabilizator" odczyt/zapis danych jak i praca buforów będzie poprawna? W niedalekiej przyszłości będzie zasilanie układu 3.3V, ale w chwili obecnej zależy mi na zasilaniu 5V. Dzięki za odpowiedź.

    OdpowiedzUsuń
  12. Daniel - niestety ja nie potrafię precyzyjnie na to odpowiedzieć czy będzie to prawidłowo pracować przy wykorzystaniu diody zenera zamiast stabilizatora. Ale w wyniku długotrwałych prób z zasilaniem kart i próbą wyciskania maksymalnych z nich parametrów - ja na pewno takiego rozwiązania bym nie zastosował. Jak już to stabilizator LDO typu LM1117-3.3 i to byłoby poprawne albo jakąś przetworniczkę .... Na pewno nie diodę zenera

    OdpowiedzUsuń
    Odpowiedzi
    1. Dzięki za odpowiedź. Jednak zrobię zasilanie całego układu z 3.3V. Dioda zenera może by spełniła swoje zadanie, ale na krótki odstęp czasu, ale nie na pracę 'długoterminową'. Zasilenie całego układ 3.3V zniszczy mój zamysł, ale i tak w przyszłości chciałem zastosować 3.3V. Prędzej czy później ... - okazało się że jednak prędzej niż sądziłem.

      Usuń
  13. Witaj Mirku ;) mam pytanie Card Detect to jest coś w stylu "przełącznika" którego blaszka po wsadzeniu karty łączy się z masą ? i wtedy np. jak nie jest zwarte to na wyśw. pokazuje nam że brak karty ? :D

    OdpowiedzUsuń
    Odpowiedzi
    1. Tak, dokładnie tak to bywa w gniazdkach zorganizowane, tak szamo np WriteProtect. Czyli blaszki normalnie rozwarte a w przeciwnym wypadku zwierane są do GND

      Usuń
  14. Bardzo ciekawie napisane. Jestem pod wielkim wrażaniem.

    OdpowiedzUsuń