yo estoy usando lo mismo pero con el dspic33FJ256GP710, el que te viene con el explorer 16 y este es el codigo que estoy utilizando que funciono pero tuve que agregar las definiciones para el dspic en el Hardwareprofile.h que son estas ya que solo habia definiciones para el 18F el 32 y el 24
#elif defined __dsPIC33F__
// Description: SD-SPI Chip Select Output bit
#define SD_CS PORTBbits.RB1
// Description: SD-SPI Chip Select TRIS bit
#define SD_CS_TRIS TRISBbits.TRISB1
// Description: SD-SPI Card Detect Input bit
#define SD_CD PORTFbits.RF0
// Description: SD-SPI Card Detect TRIS bit
#define SD_CD_TRIS TRISFbits.TRISF0
// Description: SD-SPI Write Protect Check Input bit
#define SD_WE PORTFbits.RF1
// Description: SD-SPI Write Protect Check TRIS bit
#define SD_WE_TRIS TRISFbits.TRISF1
// Registers for the SPI module you want to use
// Description: The main SPI control register
#define SPICON1 SPI1CON1
// Description: The SPI status register
#define SPISTAT SPI1STAT
// Description: The SPI Buffer
#define SPIBUF SPI1BUF
// Description: The receive buffer full bit in the SPI status register
#define SPISTAT_RBF SPI1STATbits.SPIRBF
// Description: The bitwise define for the SPI control register (i.e. _____bits)
#define SPICON1bits SPI1CON1bits
// Description: The bitwise define for the SPI status register (i.e. _____bits)
#define SPISTATbits SPI1STATbits
// Description: The enable bit for the SPI module
#define SPIENABLE SPISTATbits.SPIEN
// Tris pins for SCK/SDI/SDO lines
// Description: The TRIS bit for the SCK pin
#define SPICLOCK TRISFbits.TRISF6
// Description: The TRIS bit for the SDI pin
#define SPIIN TRISFbits.TRISF7
// Description: The TRIS bit for the SDO pin
#define SPIOUT TRISFbits.TRISF8
// Will generate an error if the clock speed is too low to interface to the card
#if (GetSystemClock() < 100000)
#error Clock speed must exceed 100 kHz
#endif
y luego tube que quitarle la opcion de que usara el reloj de tiempo real que se realiza agregando comillas al FSconfig.h y ponerle comillas a //#define USEREALTIMECLOCK y a //#define USERDEFINEDCLOCK y le qite las comillas a #define INCREMENTTIMESTAMP
y este es el codigo de prueba, tengo una sandisk de 2 gb microSD pero la use en un adaptador que me vino con la tarjeta y sobre los jumpers que vienen en el modulo todos los tengo en 2-3, espero que funcione
#include "FSIO.h"
#define FCY 36850000UL
#include <libpic30.h>
#define delay_250ms 9212500
_FOSCSEL(FNOSC_FRCPLL);
_FOSC(FCKSM_CSDCMD & OSCIOFNC_ON & POSCMD_NONE);
_FWDT(FWDTEN_OFF);
FSFILE * pointer;
void InitClock() {
OSCTUN = 0;
PLLFBD = 38; // M = 40
CLKDIVbits.PLLPOST = 0; // N1 = 2
CLKDIVbits.PLLPRE = 0; // N2 = 2
while(OSCCONbits.LOCK != 1) {};
}
int main(void){
char sd_text[] = "JACUINDE";
InitClock();
__delay32(delay_250ms);
while (!MDD_MediaDetect());
// Initialize the library
while (!FSInit());
// Create a file
pointer = FSfopen ("PRUEBA.txt", "w");
if (pointer == NULL){
while(1);
}
FSfwrite (sd_text, 8, 1, pointer);
FSfclose (pointer);
while(1){
}
}