Hola, estoy probando los drivers mmc_spi.c de ccs para conectar una MMC a un pic. Utilizo un divisor de tensión de 1.8k y 3.3k para adaptar los 5V del pic a los 3.3V de las MMCs tal y como se muestra en
http://www.cc5x.de/MMC/Una vez que la tarjeta está iniciada en modo spi(tras resetearla), todo va de maravilla, puedo escribir en ella y leer sin problemas. PERO el problema es iniciarla
, me explico:
Cuando enciendo la fuente de alimentación del sistema y pic (5V) y la de 3.3V para la MMC, el programa en el pic empieza a ejecutarse, pero no me inicia la tarjeta, da la misma respuesta que da cuando enciendo el sistema sin tener conectada la tarjeta. La cosa es que tras encender el equipo, si saco la tarjeta del zócalo, la vuelvo a insertar y hago un reset al pic(iniciar el programa desde el principio) entonces si me reconoce la mmc.
También he probado a desconectar la fuente de 5V y dejar la tarjeta alimentada, cuando vuelvo a encender el pic, entonces si me reconoce la tarjeta.
Resumiendo, si quiero utilizar la tarjeta, tengo que encender el sistema, luego intorducirla y despues hacer un reset.(o llamar la funcion mmc_init despues de insertarla mediante un boton o algo). Y así siempre que encienda el sistema
. Alguna idea, alguien a utilizado estos drivers????
tambien me gustaría fijar este post como lugar donde aclarar la utilizacion de tarjetas mmc con pics, ya que la cosa no esta muy clara. Cualquier información sobre PICs y MMCs será de utilidad. dejo mi código como ejemplo
Codigo:
#include <18F4550.h>
#fuses HS
#fuses CPUDIV1
#fuses NOWDT
#fuses NOPROTECT
#fuses NOLVP
#fuses NODEBUG
#use delay(clock = 20000000)
#define Led_on PIN_E1
#define Led_USB_ready PIN_E2
#define Led_Red PIN_C6
#define Led_Yellow PIN_C7
#define MMC_CLK PIN_A1//PIN_B1
#define MMC_DI PIN_A0//PIN_B0
#define MMC_DO PIN_A3//PIN_B3
#define MMC_CS PIN_A2//PIN_B2
#include "files/mmc_spi.c"
#include "files/LCD420.c"
void main(void)
{
int mmc_status=35;
int mmc_hex[512];
int16 i;
SETUP_ADC_PORTS(NO_ANALOGS);
mmc_status=mmc_init();
for(i=0;i<512;i++)
{
if (i<301)
mmc_hex=204;//0xCC
else
mmc_hex=175;//0xAF
}
lcd_init();
output_high(Led_Yellow);
lcd_gotoxy(1,1);
printf(lcd_putc, "System Init"
printf(lcd_putc, "
MMC status: %u", mmc_status);
delay_ms(1000);
output_low(Led_Yellow);
lcd_putc("f"
lcd_gotoxy(1,2);
printf(lcd_putc, "MMC status: %u", mmc_status);
output_high(Led_Yellow);
delay_ms(2000);
/*output_low(Led_Yellow);
mmc_status=mmc_write_block(0, 512, mmc_hex);
lcd_gotoxy(1,2);
printf(lcd_putc, "MMC status: %u", mmc_status);
delay_ms(2000);*/
for(i=0;i<512;i++)
{
mmc_hex=0;
}
mmc_status=mmc_read_block(0, 512, mmc_hex);
lcd_putc("f"
lcd_gotoxy(1,1);
printf(lcd_putc, "MMC status: %u", mmc_status);
lcd_gotoxy(1,2);
printf(lcd_putc, "MMC byte 0: %X", mmc_hex[0]);
lcd_gotoxy(1,3);
printf(lcd_putc, "MMC byte 256: %X", mmc_hex[255]);
lcd_gotoxy(1,4);
printf(lcd_putc, "MMC byte 512: %X", mmc_hex[511]);
while (TRUE)
{
}
}