Witam!
Zbudowałem układ na Atmega 16 do rejestracju temperatury, podłączyłem do niego kartę RS-MMC i procedury z EP 2004. Karta podłączona jest przez dzielniki napięcia oprócz styku DO, który jest podłączony bezpośrednio. Problem polega na tym iż mogę zapisać do karty jak i odczytać dane z niej, jednak gdy próbuję odczytać jeden sektor po drugium program zapętla się przy wykonywaniu polecenia:
a dokładniej w linijce
gdy zapiszę jeden sektor a następnie odczytam sektor zapisamy bądź jakiś inny, program idzie bez problemu. I jeszcze dziwne jest to że po inicjacji karty i po upływie dłuższej czwili od tego momentu oraz próbie odczytu z karty sektora bądź CID w ogóle nie daje się nic odczytać. jedynie bezpośrednio po inicjacji można odczytać i zapisać kartę. Sprawdzałem kartę w czytniku wszystko jest ok. Ten sam problem dzieje się na innej karcie. Co może być przyczyną
Zbudowałem układ na Atmega 16 do rejestracju temperatury, podłączyłem do niego kartę RS-MMC i procedury z EP 2004. Karta podłączona jest przez dzielniki napięcia oprócz styku DO, który jest podłączony bezpośrednio. Problem polega na tym iż mogę zapisać do karty jak i odczytać dane z niej, jednak gdy próbuję odczytać jeden sektor po drugium program zapętla się przy wykonywaniu polecenia:
// ***********************************************************
// Wysłanie komendy do karty i odbiór potwierdzenia R1
// ***********************************************************
u08 mmc_cmd(u08 cmd, u32 param, u08 state)
{
u08 i,tmp;
cbi(MMC_PORT, MMC_CS); // aktywuj CS
spi_tx_rx(cmd | 0x40); // wyślij komendę
spi_tx_rx(param >> 24); //przy tym poleceniu się zapętla
spi_tx_rx(param >> 16);
spi_tx_rx(param >> 8);
spi_tx_rx((u08)param); // LSB
spi_tx_rx(0x95); // wyślij poprawna sumę CRC
// dla komendy CMD64
for(i=0 ; i<10 ; i++) // czekaj na odpowiedź
{
tmp = spi_tx_rx(0xff); // odbierz odpowiedź
if((tmp & R1_BUSY) == 0) // jeśli BUSY == 0
{
if(state == Finish)
mmc_finish();
return tmp; // komenda wykonana
}
}
mmc_finish();
return 3; // błąd braku odpowiedzi z karty}
}
u08 spi_tx_rx(u08 byte) // wysłanie i odbiór bajtu przez SPI
{
SPDR = byte;
loop_until_bit_is_set(SPSR, SPIF);
return (SPDR);
}
a dokładniej w linijce
loop_until_bit_is_set(SPSR, SPIF);
gdy zapiszę jeden sektor a następnie odczytam sektor zapisamy bądź jakiś inny, program idzie bez problemu. I jeszcze dziwne jest to że po inicjacji karty i po upływie dłuższej czwili od tego momentu oraz próbie odczytu z karty sektora bądź CID w ogóle nie daje się nic odczytać. jedynie bezpośrednio po inicjacji można odczytać i zapisać kartę. Sprawdzałem kartę w czytniku wszystko jest ok. Ten sam problem dzieje się na innej karcie. Co może być przyczyną