Ik ben bezig met een groot projekt in MikroE Basic Pro waarin met een PIC24 een flinke hoeveelheid gelogde data (ca. 1 MB) uit een SPI-flash chip overgezet moet worden op een FAT32-geformatteerd opslagmedium. In eerste instantie had ik daarvoor USB-OTG in gedachten, maar daar zaten nogal wat haken en ogen aan, en na advies van Arco besloten om voor een SD-kaart te gaan.
Ik werk met een oude Transcend micro SD-kaart van 128 MB geformatteerd in FAT32, maar een 8 GB Lexar en een 32 GB Samsung zij ook getest.
Ik ben nu zover dat de SD-kaart geinitialiseerd wordt op 250 kHz, dan na een paar CMDs aangeeft dat hij niet mee "idle" is en op 512 byte blok-grootte wordt ingesteld voor FAT32. De FAT32_Init routine geeft OK als resultaat bij alle 3 de kaartjes. Zie onderstaande Logic Analyser screenshot.
Hierna is het stil. Wat ik ook doe, FAT32_Dir, FAT32_GetFreeSpace(), FAT32_MakeDir(), geen reactie, zelfs de SD_CS lijn wordt niet meer laag gemaakt (!). Maar als ik een bv. FAT32_Exists() aanroep om te zien of een filenaam al bestaat, dat volgt er een CMD18 (read multiple block), waarna de zaak hangt en de PIC miljoenen 255-bytes uit de sd-kaart blijft lezen (MISO blijft gewoon hoog en er blijven klokpulsen komen uit de PIC)
De FAT32 library van MikroE is heel simpel opgezet, en in de voorbeelden wordt echt alleen maar CS gedefinieerd, SPI_Init en FAT32_Init() gegeven en dan is de boel klaar voor gebruik.
Wat zie ik over het hoofd? Waarom slaat de boel vast na de gelukte initialisatie? Is de initialisatie niet compleet?