Teraz to już nic nie rozumiem.
Mamy :
int writemmc(int adr1) { // write RAM sector to MMC
int i;
uint8_t c;
// 512 byte-write-mode
if (Command(0x58,0,adr1,0xFF) !=0) {
uart_puts("MMC: write error 1 ");
return 1;
}
SPI(0xFF);
SPI(0xFF);
SPI(0xFE);
// write ram sectors to MMC
for (i=0;i<512;i++) {
SPI(sector[i]);
}
// at the end, send 2 dummy bytes
SPI(0xFF);
SPI(0xFF);
c = SPI(0xFF);
c &= 0x1F; // 0x1F = 0b.0001.1111;
if (c != 0x05) { // 0x05 = 0b.0000.0101
uart_puts("MMC: write error 2 ");
return 1;
}
// wait until MMC is not busy anymore
while(SPI(0xFF) != (char)0xFF);
return 0;
}
Podczas zapisu przy adresie (adr1) równym >2 już zwraca mi MMC: write error 1. Czemu tak jest? Co znowu jest źle?!
No chyba wreszcie doszedłem do tego...
Adresy sektorów idą tak (i tak też są zapisane na karcie bo znalazłem te sektory w winhex):
według offsetu dziesiętnego:
sektor 1 : 0-512
sektor 1 : 513-1024
sektor 1 : 1025-1563 itd...
według offsetu szesnastkowego :
sektor 1 : 200
sektor 1 : 400
sektor 1 : 600 itd...
// -----------------------------------------------------------------
Hm... Chyba mamy problem... Wgrałem obraz a właściwie ciąg znaków 01 i znaków nowa linia rozpoczynając od 200 sektora
wszytko spoko, procesor odczytuje mi sektory i przesyła mi z powrotem te sektory z zapisanym obrazem na kompa.
Ale teraz nie mogę uzyskać dostępu do karty z kompa :/
// -----------------------------------------------------------------
Nie dało się jej w niczym otworzyć w końcu sformatowałem ją w aparacie cyfrowym. Teraz działa tak jak powinna. Ale nadal mnie zastanawia dlaczego się zablokowała.
Mam takie pytanko. Czy jest jakoś możliwość dostania się do dalekich sektorów powiedzmy np w sektorze 001004544(dec) ?
Istnieje taka możliwość, żeby zapisywało pliki jakoś w miarę w początkowych sektorach zapisując pliki normalnie w windowsie na dysku wymiennym?
Dzięki temu, że wrzucam pliki bezpośrednio, nie muszę korzystać, z edytorów hexametryczny tylko od razu mam dane na SD.
Chciałem zrobić tak, że procek przeszukuje mi całą kartę w poszukiwaniu danego stringa (znajdujacego się w pliku, tak aby automatyznie znaleźć plik).
Dziwne. Pierwsze sektory karty są na pewno puste bo sprawdzałem w edytorze 16tkowym i wsyztko jest puste a jednak kiedy odczytuje np 10 pierwszych sektorów otrzymuję zawartość pliku.txt). Najciekawsze jest to, że zwraca mi starą zawartość pliku bo teraz jest zmieniona o dodatkową linijkę na początku pliku tak aby było go łatwo znaleźć na karcie. Co jest?!