Hallo! Bin gerade dabei, über die SPI eines ATmega32 eine SD-Karte anzusteuern. Dabei verwende ich teilweise den Programmcode von Ulrich Radig. Die Routine für das Auslesen eines Sektors versteh ich jedoch nicht ganz: unsigned char mmc_read_sector (unsigned long addr,unsigned char* Buffer) { ... addr = addr << 9; //addr = addr * 512 CMD[1] = ((addr & 0xFF000000) >>24 ); CMD[2] = ((addr & 0x00FF0000) >>16 ); CMD[3] = ((addr & 0x0000FF00) >>8 ); ... } Warum wird denn die Adresse um 9 nach links geshiftet (bzw. mit 512 multipliziert) und was ist mit dem niederwertigstem, also dem 4.Byte (CMD[4]) der Adresse? Wieso wird das nicht beachtet? Wäre sehr dankbar für jede hilfreiche Antwort! Gruß Danyo
Hallo, ich vermute mal, daß es sich um die Sektorgröße von 512 Byte handelt. Weil CMD die einzelnen Bytes der Adresse enthält und CMD[4] das niederwertigste Byte enthält und nicht mehr verschoben werden braucht. Gruß Manfred
Hi, das ist ganz einfach, im SPI-Mode kannst du jeweils Sektorweise die Karte lesen oder beschreiben, d.h. deine Adresse vom Sektor ist immer das Vielfache von 512(Sektor 0 beginnt bei 0, Sektor 1 an 512 usw.) Und damit erklärt sich auch deine zweiten Frage. Andy
Achso & vielen Dank erstmal! Ich hab nämlich ohne die Zeile (addr = addr << 9;) immer nur den MBR jedoch nicht den 1.Partition Entry lesen können, weil ich dachte, dass der Abstand an 0x1C6 in Bytes anstatt Sektoren angegeben wird. Naja, wer lesen kann ist klar im Vorteil! ;-)
also, ich muss auch sagen, dass die Doku an dieser Stelle aber auch an vielen anderen, nicht ganz klar ist. Sind zwar knapp 100 Seiten, aber viel nutzloses Gelaber. Andy
@Andy: Ja, das ist richtig. Ohne Hilfe ist es sehr sehr schwer, eine SD/MMC anzusteuern. Vor allem auch, weil viele Abläufe zu wenig beschrieben werden. Aber zum Glück gibts ja Ulrich Radig, von dem man sich as ein oder andere abschauen kann...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.