-
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