eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaKarta SD - dziwne zachowanie zasilania
Ilość wypowiedzi w tym wątku: 6

  • 1. Data: 2016-01-01 13:21:39
    Temat: Karta SD - dziwne zachowanie zasilania
    Od: Atlantis <m...@w...pl>

    Wczoraj pisałem, że próbuję walczyć z uruchomieniem karty SD na PIC32.
    Kod niby sprawdzony i przetestowany (FatFS) a u mnie pojawiały się
    jakieś dziwne problemy z inicjacją pracy karty. Chwilę zajęło mi dojście
    do tego, że błąd najpewniej nie jest programowy, a sprzętowy.
    Na chwilę obecną w przypadku braku karty w slocie funkcja f_open zwraca
    błąd 3 (). Gdy karta jest w slocie pojawia się błąd 13 ().

    Początkowo szukałem winy po stronie karty albo konfiguracji biblioteki.
    Okazuje się jednak, że od czasu do czasu (raz na kilkadziesiąt przełożeń
    karty/restartów całego układu) układ zaczyna pracować prawidłowo,
    zapisując dane na karcie bez zgłaszania jakichkolwiek błędów.

    Pomyślałem, że winę może ponosić brak kluczowana zasilaniem karty, w
    związku z czym nie jest wykonywany pełen cykl jej resetu przy inicjacji.
    Podłączyłem więc kartę do zasilania przez tranzystor PNP i filtr LC
    (10uH, 1uF) - identyczny układ stosowałem w moich projektach na AVR-ach,
    z którymi nie miałem żadnych problemów.
    Gdy tranzystor był w stanie przewodzenia wszystko wyglądało dobrze - na
    pienie VCC było około 3,2V. Jednak po wyłączeniu tranzystora okazało
    się, że napięcie nie spada do zera, ale utrzymuje się na stałym poziomie
    około 2,5V.

    Rezystory podciągające linie CS i CD były podpięte do plusa zasilania ZA
    tranzystorem, a pomimo tego napięcie się tam pojawiało. Żadne wewnętrzne
    pull-upy w mikrokontrolerze nie były aktywne.
    Efekt pojawia się także po fizycznym usunięciu tranzystora. Nie
    występuje, gdy kartę wyjmę ze slota - wówczas napięcie spada do zera.

    Jakiś pomysł skąd się berze taki efekt?


  • 2. Data: 2016-01-01 16:47:06
    Temat: Re: Karta SD - dziwne zachowanie zasilania
    Od: Marek <f...@f...com>

    On Fri, 1 Jan 2016 13:21:39 +0100, Atlantis <m...@w...pl>
    wrote:
    > Jakiś pomysł skąd się berze taki efekt?

    Napięcie z linii io pojawi się na odłączonym Vcc poprzez diody
    zabezpieczające linie io w układzie. Czasami stosuje się takie
    zasilanie z linii io a nie Vcc w układach z zasilaniem pasożytniczym.

    --
    Marek


  • 3. Data: 2016-01-01 16:53:25
    Temat: Re: Karta SD - dziwne zachowanie zasilania
    Od: Atlantis <m...@w...pl>

    W dniu 2016-01-01 o 16:47, Marek pisze:

    > Napięcie z linii io pojawi się na odłączonym Vcc poprzez diody
    > zabezpieczające linie io w układzie. Czasami stosuje się takie zasilanie
    > z linii io a nie Vcc w układach z zasilaniem pasożytniczym.

    Jak w takim razie powinien wyglądać układ, aby to zjawisko nie
    występowało, pozwalając na przeprowadzenie resetu karty? Czyby PIC32
    miał inaczej zbudowane piny GPIO? Bo o ile mnie pamięć nie myli, to tam
    taki efekt nie występował.


  • 4. Data: 2016-01-01 19:01:40
    Temat: Re: Karta SD - dziwne zachowanie zasilania
    Od: Marek <f...@f...com>

    On Fri, 1 Jan 2016 16:53:25 +0100, Atlantis <m...@w...pl>
    wrote:
    > Jak w takim razie powinien wyglądać układ, aby to zjawisko nie
    > występowało, pozwalając na przeprowadzenie resetu karty? Czyby PIC32
    > miał inaczej zbudowane piny GPIO? Bo o ile mnie pamięć nie myli, to
    tam
    > taki efekt nie występował.

    Nie bardzo rozumiem, każdy mcu możesz zasilać z io a nie z Vcc (pod
    pewnymi warunkami), tutaj masz to omówione:

    http://www.youtube.com/watch?v=2yFh7Vv0Paw

    Podciągi karty powinny być do Vcc karty a nie Vcc całego układu.
    Wtedy kluczując Vcc karty masz pewność, na pewno odcinasz jej Vcc.
    Ale tak na marginesie.nie stosowałem kluczowania Vcc kart sd i nie
    kojarzę abym napotkał przy kartach sd opisywany przez Ciebie problem.
    Podejrzewam, ze być może jednak driver spi jaki używasz nieprawidłowo
    inicjuje kartę np. brak spi lowbitrate przy inicjalizacji
    (przyspieszyć spi można dopiero po inicjalizacji).

    --
    Marek


  • 5. Data: 2016-01-01 21:40:22
    Temat: Re: Karta SD - dziwne zachowanie zasilania
    Od: Atlantis <m...@w...pl>

    W dniu 2016-01-01 o 19:01, Marek pisze:

    > Ale tak na marginesie.nie stosowałem kluczowania Vcc kart sd i nie
    > kojarzę abym napotkał przy kartach sd opisywany przez Ciebie problem.
    > Podejrzewam, ze być może jednak driver spi jaki używasz nieprawidłowo
    > inicjuje kartę np. brak spi lowbitrate przy inicjalizacji (przyspieszyć
    > spi można dopiero po inicjalizacji).

    Hmm... Masz może działającą wersję mmc.c?
    Bo siedzę na tym już kolejną godzinę i za nic nie mogę zmusić ukłdu do
    stabilnej pracy. W kółko wywala albo bład 3, albo 13. Jeśli już ruszy,
    to od wielkiego święta i nie ma żadnej pewności, że stan taki utrzyma
    się po kolejnym resecie.

    Obecna konfiguracja wygląda następująco:
    1) Osoba linia zasilania dla karty, kluczowana tranzystorem i filtrowana LC.
    2) Wszystkie linie karty podciągnięte do tej linii rezystorami 4,7k. To
    znaczy wszystkie z wyjątkiem DC - ta jest podłączona do ogólnego VCC.
    3) w funkcji power_on() konfiguruję wyjścia i ustawiam PPS. W
    power_off() wyłączam funkcję PPS dla MOSI i z powrotem przestawiam
    wszystkie wyjścia na wejścia.

    Generalnie wygląda to następująco:

    static
    void power_on (void)
    {
    PWR_SETOUT();
    PWR_ON();
    for (Timer1 = 150; Timer1; ); /* Wait for 150ms */

    /* Setup SPI2 */
    // Setup CS as output
    CS_SETOUT();
    MISO_SETIN();
    MISO_SETPPS();
    MOSI_SETOUT();
    MOSI_SETPPS();
    // configured for ~400 kHz operation - reset later to 20 MHz
    SpiChnOpen(SPI_CHANNEL2,SPI_OPEN_MSTEN|SPI_OPEN_CKP_
    HIGH|SPI_OPEN_SMP_END|SPI_OPEN_MODE8,64);
    SPI2CONbits.ON = 1;
    }

    static
    void power_off (void)
    {
    select(); /* Wait for card ready */
    deselect();

    SPI2CONbits.ON = 0; /* Disable SPI2 */

    Stat |= STA_NOINIT; /* Set STA_NOINIT */

    PWR_OFF();
    CS_SETIN();
    MOSI_RESTOREPPS();
    MOSI_SETIN();
    for (Timer1 = 150; Timer1; ); /* Wait for 40ms */

    }

    Jak widzisz SPI startuje na małej prędkości.

    Zresztą w disk_initialize są wywoływane jeszcze dwie makrodefinicje:
    #define FCLK_SLOW() SPI2BRG = 64 /* Set slow clock (100k-400k) */
    #define FCLK_FAST() SPI2BRG = 2 /* Set fast clock (depends on the CSD) */


  • 6. Data: 2016-01-01 22:57:06
    Temat: Re: Karta SD - dziwne zachowanie zasilania
    Od: Marek <f...@f...com>

    On Fri, 1 Jan 2016 21:40:22 +0100, Atlantis <m...@w...pl>
    wrote:
    > Hmm... Masz może działającą wersję mmc.c?

    Mam własny, sprawdzony driver, wyślę Ci na maila.

    --
    Marek

strony : [ 1 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: