Witam,
Próbuję odczytać z karty micro SD 512MB (Kingston) sektor #0 (addr=0x00000000) ale karta zwraca mi kompletnie inny sektor,a raczej blok zaczynający się od 0x087DD2A6 (wyszukałem na karcie Hex-edytorem dane ze zwróconego bloku). Dane wysyłane po SPI się zgadzają z tymi co podaję w parametrach funkcji...
Funkcje komunikacyjne (wysyłanie bajtu do spi, przesyłanie poleceń):
I funkcja odczytu:
CRC16 odczytanych danych i przesłanych się zgadza, ale nie zgada się "zakres danych" zupełnie jak by karta ignorowała pole adresu albo "wciskało się" tam "coś".
Jeżeli byłby problem z cmd/cmd2 to inicjacja by nie działała, a ta działa wzorowo (tylko jedna karta - GoodRAMu nie chciała w ogóle gadać, przy ACMD41 daje time-out) -czyli inicjacja przebiega bez najmniejszych problemów. Aha inicjuje kartę: CMD0, CMD8, CMD58, CMD55+ACMD41, CMD58, CMD10, CMD9, CMD55+ACMD13 .
Sprzęt: Adapter Propox'u ADPmicroSD, płytka z ATMega8 moja własna zasilana z płytki propoxu, używam HW spi, spi_clk=fcpu/128=125kHz, jedynie trochę mnie niepokoi brak rezystora Pull-up po stronie karty z pinu DO (przed buforem 74LVX125).
Próbowałem w hex edytorze (kartę włożyłem do czytnika i otwarłem ją w HxD) znaleźć zwrócony blok danych - a przynajmniej pierwsze 16 bajtów dla różnych kart, dla każdego bloku generuje CRC16 aby nie porównywać byte-by-byte
:
* Kingston 512MB - zwrócone dane znalazłem pod 0x087DD2A6 (crc16=0xB244)
* Sandisk 2GB - zwrócone dane znalazłem pod 0x1FB4A024 (crc16=0x6158)
* Sandisk 1GB - Nie znalazłem bloku danych w hex edytorze ale początek bloku wygląda identycznie jak dla Kingston 512M (crc16=0xA410)
* Kingston 2GB - Nie znalazłem bloku danych w hex edytorze :/ (crc16=0x70F3)
Mam jeszcze 2 karty SDHC 8GB (Kingston - crc16: 0x9619 i 0x33E7) i z nimi taki sam wynik losowy blok danych ale zawsze ten sam dla danej karty.
Jedyna wspólna część bloku dla kart to jego koniec zawsze taki sam 55AA .
Może ktoś ma jakieś idee? Może coś źle robię?
Już od południa nad tym siedzę i skończyły mi się już pomysły....
W wolnym czasie w tygodniu zrobię sobie płytkę-adapter z samym gniazdkiem microsd (+rezystory zabezpieczające ~22R linie i pullup na wszystkich liniach ~100k) i spróbuję takie coś. Może faktycznie coś nie tak z adapterem...
Próbuję odczytać z karty micro SD 512MB (Kingston) sektor #0 (addr=0x00000000) ale karta zwraca mi kompletnie inny sektor,a raczej blok zaczynający się od 0x087DD2A6 (wyszukałem na karcie Hex-edytorem dane ze zwróconego bloku). Dane wysyłane po SPI się zgadzają z tymi co podaję w parametrach funkcji...
Funkcje komunikacyjne (wysyłanie bajtu do spi, przesyłanie poleceń):
Kod: C / C++
I funkcja odczytu:
Kod: C / C++
CRC16 odczytanych danych i przesłanych się zgadza, ale nie zgada się "zakres danych" zupełnie jak by karta ignorowała pole adresu albo "wciskało się" tam "coś".
Jeżeli byłby problem z cmd/cmd2 to inicjacja by nie działała, a ta działa wzorowo (tylko jedna karta - GoodRAMu nie chciała w ogóle gadać, przy ACMD41 daje time-out) -czyli inicjacja przebiega bez najmniejszych problemów. Aha inicjuje kartę: CMD0, CMD8, CMD58, CMD55+ACMD41, CMD58, CMD10, CMD9, CMD55+ACMD13 .
Sprzęt: Adapter Propox'u ADPmicroSD, płytka z ATMega8 moja własna zasilana z płytki propoxu, używam HW spi, spi_clk=fcpu/128=125kHz, jedynie trochę mnie niepokoi brak rezystora Pull-up po stronie karty z pinu DO (przed buforem 74LVX125).
Próbowałem w hex edytorze (kartę włożyłem do czytnika i otwarłem ją w HxD) znaleźć zwrócony blok danych - a przynajmniej pierwsze 16 bajtów dla różnych kart, dla każdego bloku generuje CRC16 aby nie porównywać byte-by-byte
* Kingston 512MB - zwrócone dane znalazłem pod 0x087DD2A6 (crc16=0xB244)
* Sandisk 2GB - zwrócone dane znalazłem pod 0x1FB4A024 (crc16=0x6158)
* Sandisk 1GB - Nie znalazłem bloku danych w hex edytorze ale początek bloku wygląda identycznie jak dla Kingston 512M (crc16=0xA410)
* Kingston 2GB - Nie znalazłem bloku danych w hex edytorze :/ (crc16=0x70F3)
Mam jeszcze 2 karty SDHC 8GB (Kingston - crc16: 0x9619 i 0x33E7) i z nimi taki sam wynik losowy blok danych ale zawsze ten sam dla danej karty.
Jedyna wspólna część bloku dla kart to jego koniec zawsze taki sam 55AA .
Może ktoś ma jakieś idee? Może coś źle robię?
Już od południa nad tym siedzę i skończyły mi się już pomysły....
W wolnym czasie w tygodniu zrobię sobie płytkę-adapter z samym gniazdkiem microsd (+rezystory zabezpieczające ~22R linie i pullup na wszystkich liniach ~100k) i spróbuję takie coś. Może faktycznie coś nie tak z adapterem...