hallo versuche auf einem PIC 32 mittels mikroC eine MMC auszulesen. den Inhalt möchte ich auf verschiede Variablen zu laden. das config-file auf der MMC ist in ASCII erstellt worden. die ersten ca 3 Variablen werden korrekt ausgelesen. bei den weiteren gibt es ein ducheinander. mehrere variablen werden in die selbe geschrieben etc. Sieht jemand was im code falsch ist? CODE: void sd_card_init() { // Initialisiere SPI für MMC Zugriff SPI2_Init_Advanced(_SPI_MASTER, _SPI_8_BIT, 64, _SPI_SS_DISABLE, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_HIGH, _SPI_ACTIVE_2_IDLE); Delay_ms(10); // Initialize MMC if (!Mmc_Fat_Init()) { // Falls MMC Init nicht i.O. ist SPI schneller initialisieren. SPI2_Init_Advanced(_SPI_MASTER, _SPI_8_BIT, 4, _SPI_SS_DISABLE, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_HIGH, _SPI_ACTIVE_2_IDLE); } } void sd_card_read() { int zi = 0, zb = 0, zc = 0 ,zd = 0; // Schlaufenzähler Mmc_Fat_Assign("config.txt", 0); //File config.txt öffnen Mmc_Fat_Reset(&size); //grösse des Files auslesen und in size speichern //File Auslesen und in buffer schreiben for (zi = 1; zi <= size; zi++) { Mmc_Fat_Read(&buffer[0]); //Wenn ein "-" (ASCII Code 45) if (buffer[0] == 45) { zb = 0; //Hier wird eine Zeile eingelesen (bis zum nächsten CR ASCII 13) //oder 200 Zeichen eingelesen wurden while (buffer [zb] != 13) { zb++; Mmc_Fat_Read(&buffer[zb]); if (zb == 200) break; } //Die ersten 4 Bytes des buffer werden in das Kommandobyte kopiert zc = 0; //Schlaufenzähler auf 0 setzen while (zc != 4) //Schlaufe um 4 bytes zu lesen { buffer_kdo[zc] = buffer[zc+1]; zc++; } //Byte 6 bis Byte 26 werden in buffer_ebene gespeichert zd = 0; //Schlaufenzähler auf 0 setzen while (zd != 20) //Schlaufe um 20 bytes zu lesen { buffer_ebene[zd] = buffer[zd+6]; zd++; } fill_vars(); } } } void fill_vars() { //In dieser Funktion wird ein gefülltes Kommandobyte und Ebenenbyte //vom Puffer in die entsprechende Variable ebenen_bez abgefüllt // //Funktionsinterne Variablendeklaration int ebene_einer = 0 , ebene_zehner=0, ebene_total =0; //Ebenen Vraiablen int ia = 0, i=0; //Schlaufen Variablen //oder Ebenen Text if (buffer_kdo[0] != 'E') return; if (buffer_kdo[1] == 'B') { ebene_einer = buffer_kdo[3]-48; ebene_zehner = buffer_kdo[2]-48; ebene_total = (ebene_zehner * 10) + ebene_einer; //4 Bytes Ebenentext in entsprechendes Array abfüllen while (ia != 5) { ebenen_bez [ebene_total] [ia] = buffer[ia+6]; ia++; } } //Ebenen Text in Array kopieren ia = 0; if (buffer_kdo[1] == 'T') { ebene_einer = buffer_kdo[3]-48; ebene_zehner = buffer_kdo[2]-48; ebene_total = (ebene_zehner * 10) + ebene_einer; //Bytes Ebenentext in entsprechendes Array abfüllen while (ia != 28) { ebenen_text [ebene_total] [ia] = buffer[ia+6]; ia++; } } for (i = 0; i <= 128; i++) { buffer[i] = 0; } } Danke schon mal
Benutzt du die File System Library von Microchip? Sieht so anders aus bei dir.
ja die müsste vorhanden sein. du meinst ich müsste es komplet neu aufbauen?
es wird die MMC und MMC_FAT16 library von mikroelektonika verwendet.
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.