Autor Tema: MMC Card : Hardware & Firmware  (Leído 85425 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: MMC Card : Hardware & Firmware
« Respuesta #105 en: 22 de Abril de 2008, 02:33:19 »
Hola:

Facundo, tómate un poco de tiempo y revisa todos los posts.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: MMC Card : Hardware & Firmware
« Respuesta #106 en: 22 de Abril de 2008, 10:21:42 »
Si, en este mismo hilo, en el cuarto o quinto post tienes el circuito que he utilizado.

http://www.todopic.com.ar/foros/index.php?topic=15553.msg99543#msg99543
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado facundo_10

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 179
    • DAVINCIPIC
Re: MMC Card : Hardware & Firmware
« Respuesta #107 en: 22 de Abril de 2008, 15:46:05 »
Gracias por la rapida respuesta, me referia a que si tenias el archivo de eagle para poder pasarmelo. A eso me refiero!
PICMANIACO!

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: MMC Card : Hardware & Firmware
« Respuesta #108 en: 23 de Abril de 2008, 13:37:13 »
Hola a todos,

Estoy pensando en una aplicación en la que sería genial introducir el almacenamiento de datos en una memoria MMC, pero me gustaría antes hacer algunas simulaciones.
Alguien ha probado a simular en PROTEUS?
...

si que funciona.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Re: MMC Card : Hardware & Firmware
« Respuesta #109 en: 03 de Mayo de 2008, 13:12:07 »
Saludos:

Tendré a disposición una laptop que viene con un conector especial para memorias SD, saben si hay algún software que me permita leer la SD? me refiero a datos internos como el ID, número de serie, etc?

Javicho.

Desconectado ema

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1078
Re: MMC Card : Hardware & Firmware
« Respuesta #110 en: 03 de Mayo de 2008, 14:46:39 »
"Winhex"

Saludos

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Re: MMC Card : Hardware & Firmware
« Respuesta #111 en: 03 de Mayo de 2008, 18:24:05 »
Gracias, lo probaré.

Javicho.

Desconectado facundo_10

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 179
    • DAVINCIPIC
Re: MMC Card : Hardware & Firmware
« Respuesta #112 en: 13 de Mayo de 2008, 17:02:52 »
Hola me refiero a que si todavia guardas el PCB que usaste en tu ordenador, y si lo podrias poner a disposicion del foro, para que podamos hacer nuestras pruebas. Un saludo! :)
PICMANIACO!

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: MMC Card : Hardware & Firmware
« Respuesta #113 en: 11 de Septiembre de 2008, 20:57:07 »
raus, pero yo no veo codigo?

Perdón, el link correcto era este y esta es la descarga directa del codigo. Lo siento

hola amigo

puedes redirecionar los link creo que estan rotos o
o no funcionan correctamente aparece una web pero creo que no se corresponde por lo menos en unos de los casos

un saludo

pd: el hilo esta genial


Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: MMC Card : Hardware & Firmware
« Respuesta #114 en: 24 de Septiembre de 2008, 12:33:44 »
Hola gente, haber si alguien me puede dar una manito, estaria necesitando un programita que permita formatear tarjetas MMC/SD de diferentes tamaños pero con la salvedad que yo pueda elegir el sistema de archivos ( FAT12,FAT16,FAT32 ) y los sectores x cluster algo asi como hacia el viejo DOS. Desde ya muchas gracias !

Saludos !

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: MMC Card : Hardware & Firmware
« Respuesta #115 en: 24 de Septiembre de 2008, 15:54:13 »
hola amigo richi
se de una tool de hp
hp usb disk storage format se parece mucho a la util del win95 o win98

un saludo.

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: MMC Card : Hardware & Firmware
« Respuesta #116 en: 24 de Septiembre de 2008, 16:02:58 »
Gracias amigo  :mrgreen:

Desconectado teleko

  • PIC10
  • *
  • Mensajes: 41
Re: MMC Card : Hardware & Firmware
« Respuesta #117 en: 16 de Octubre de 2008, 06:51:04 »
Estoy probando esta configuración en proteus pero no me funciona, da error en el init_mmc. Estoy harto de darle vueltas y no lo consigo hacer funcionar.
Palitroquez dice que sí, asi que te pido si puedes subir tu diseño aquí.


Gracias de antemano.

Desconectado nutriax

  • PIC10
  • *
  • Mensajes: 42
Re: MMC Card : Hardware & Firmware
« Respuesta #118 en: 23 de Diciembre de 2008, 19:33:48 »
Hola que tal, yo he seguido por mucho tiempo a este hilo, pero nunca tenia tiempo de ponerme a renegar con estas tarjetitas...  :(
ahora que me hice un tiempito pude tocar este tema que tanto me intrigaba...
de hecho pude hacer la inicializacion, lectura y escritura de la tarjeta, pero todo esto con el spi por hard... pero la aplicacion que quiero hacer, tambien quiero que use el usb, y como todos saben las patitas del usb se superponen con la del spi por hardware (estoy hablando del 18f4550), por lo que en mi aplicacion no me molestaria realizarl la comunicacion spi por soft (como hizo el gran maestro diego).
para lo cual he intenetado implementar el soft de diego y probarlo, pero no me dio resultado, paso a destacar las diferencias que tienen (aunque son pocas porque trate de mantenerlo para ver si andaba)
1- yo uso el 18f4550 con un xtal de 20mhz, los fuses para el clock lo puse para tener el cloc de 48mhz y anda un relojito porque lo probe con parpadeo de unos led y anda (dicho sea de paso la placa que uso es la que tiene diego en la pagina de el (rrboard2 16f877/18f4550).
2- la comunicacion serie la realizo por el usart del pic (es decir por hardware rs232 del pic).
3- le cambie como hizo diego los pines del bus spi. en mi caso tengo a do->b2; ck->b1; di->b3; cs-b5;

pongo las modificaciones realizadas en el nutriax_mmc_spi.c
/////*** USER CONFIG ***/////

//SanDisk’s MultiMediaCards clock data in on the rising edge and out on the falling edge.
#ifndef MMC_CLK
#define MMC_CLK   PIN_B1
#endif
#ifndef MMC_DI
#define MMC_DI    PIN_B4
#endif
#ifndef MMC_DO
#define MMC_DO    PIN_B2
#endif
#ifndef MMC_CS
#define MMC_CS    PIN_B5
#endif

ahora pongo el programa que uso...

////////////////////////////////////////////////////////////////////////////////////
//
// MMC Card Test ...
// by RedPic
////////////////////////////////////////////////////////////////////////////////////

#include <18f4550.h>
//#fuses HS,MCLR,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOPBADEN,NOLVP,NOCPD,NODEBUG,NOWRT,NOVREGEN
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,NOVREGEN,NOPBADEN,NOPUT,NOBROWNOUT,NOCPD,NOWRT
// el fuse que configuramos anteriormente
#use delay(clock=48000000)

#define LED        PIN_e0
#define BUZZER     PIN_e1
#define RELE       PIN_e2

#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

char  cRec=0x00;                            // Último caracter recibido via serie
char  Command=0x00;                         // Comando a procesar

int8  MMCBuffer[512];
int32 address=0;


#define MMC_CS    PIN_B5
#define MMC_CLK   PIN_B1
#define MMC_DI    PIN_B4
#define MMC_DO    PIN_B2

#include "pulpo_mmc_spi.c"

////////////////////////////////////////////////////////////////////////////////////
//
// Funciones ...
//
////////////////////////////////////////////////////////////////////////////////////

void Cursor(char c){

   printf("%c\r\n>",c);
}

void Presenta_Hardware(void){

   printf("\r\n\n");
   printf("MMC MultiMedia Card Driver Test\r\n");
   printf("Hardware iACCESS CONTROL V1 v.0.0.0\r\n\n");

   printf("Commands when available:\r\n\n");
   printf("[M] Init MMC Card\r\n");
   printf("[F] Read MMC Card Block First\r\n");
   printf("[R] Read MMC Card Block Actual\r\n");
   printf("[ ] Read MMC Card Block Next\r\n\n");
   Cursor(0x00);
}


////////////////////////////////////////////////////////////////////////////////////
//
// Interrupción por Recepción Serie RS232
//
////////////////////////////////////////////////////////////////////////////////////

#int_rda
void handle_rda_int(){

   if(kbhit()){                             // Si hay algo pdte de recibir ...
      cRec=getc();                          // lo recibo sobre cRec ...
      if(cRec!=0x00){                       // Si es distinto de \0 ...
         Command=ToUpper(cRec);             // cargo cRec sobre Command para procesarlo
      }                                     // pasándolo a Mayúsculas para no confundir.
   }
}

////////////////////////////////////////////////////////////////////////////////////
//
// Main
//
////////////////////////////////////////////////////////////////////////////////////

void main() {

   int16 f=0;
   int16 size=512;
   int8  col=0;

   disable_interrupts(global);
   disable_interrupts(int_timer1);
   disable_interrupts(int_rda);
   disable_interrupts(int_ext);
   disable_interrupts(int_ext1);
   disable_interrupts(int_ext2);

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_spi(FALSE);
   setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
   setup_timer_0(RTCC_OFF);
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   port_b_pullups(false);

  // set_tris_a(0b00001000);
  // set_tris_c(0b10000000);

   enable_interrupts(global);
   enable_interrupts(int_rda);

   address=0;
   Presenta_Hardware();
   do {
      if(Command!=0x00){                    // Si he recibido un comando vía Serie ...
         if(Command=='?'){                  // Si el comando es '?' ...
            Presenta_Hardware();
         }

         if(Command=='M'){                  // Inicializa MMC Card
            Cursor(Command);
            if(mmc_init()==0)
               printf("MMC init ok");
            else
               printf("MMC init fault");
            Cursor(0x00);
         }

         if(Command=='F'){                  // Read First Block MMC Card
            address=0;
            Command='R';
         }
         
         if(Command==' '){                  // Read Next Block MMC Card
            address+=512;
            Command='R';
         }
         
         if(Command=='R'){                  // Read Block MMC Card
            Cursor(Command);
            for(f=0;f<=511;f++) MMCBuffer[f]=0;
            size=511;
            col=0;
            if(mmc_read_block(address, size,&MMCBuffer[0])==0){
               printf("\r\n>MMC read ok from Address %LX to %LX\r\n",address,address+size);
               for(f=0;f<=511;f++){
                  printf("%X ",MMCBuffer[f]);
                  if(++col==16){
                     col=0;
                     printf("\r\n");
                  }
               }
            }
            else
               printf("\n\rread fault");
            Cursor(0x00);

         }
         Command=0x00;                      // Indico que ya he procesado el comando.
      }
     
      ///////////////////////////////////////////////////////AGREGO NUTRIAX
      ////////////////////////////////////////////////////////////////////
      Cursor(Command);
            if(mmc_init()==0)
               printf("MMC init ok");
            else
               printf("MMC init fault");
            Cursor(0x00);         
   } while (TRUE);
}

como veran este es el codigo que tiene diego en la pagina, pero con una leve modificacion (como por ejemplo le saque el conector rj45 y todas sus funciones)...
el problema es que no me inicializa, me imprime init fault...
alguien me puede ayudar o podria decirme como hizo para que le ande el spi por soft? gracias...

Desconectado nutriax

  • PIC10
  • *
  • Mensajes: 42
Re: MMC Card : Hardware & Firmware
« Respuesta #119 en: 23 de Diciembre de 2008, 19:51:21 »
Hola que tal, yo he seguido por mucho tiempo a este hilo, pero nunca tenia tiempo de ponerme a renegar con estas tarjetitas...  :(
ahora que me hice un tiempito pude tocar este tema que tanto me intrigaba...
de hecho pude hacer la inicializacion, lectura y escritura de la tarjeta, pero todo esto con el spi por hard... pero la aplicacion que quiero hacer, tambien quiero que use el usb, y como todos saben las patitas del usb se superponen con la del spi por hardware (estoy hablando del 18f4550), por lo que en mi aplicacion no me molestaria realizarl la comunicacion spi por soft (como hizo el gran maestro diego).
para lo cual he intenetado implementar el soft de diego y probarlo, pero no me dio resultado, paso a destacar las diferencias que tienen (aunque son pocas porque trate de mantenerlo para ver si andaba)
1- yo uso el 18f4550 con un xtal de 20mhz, los fuses para el clock lo puse para tener el cloc de 48mhz y anda un relojito porque lo probe con parpadeo de unos led y anda (dicho sea de paso la placa que uso es la que tiene diego en la pagina de el (rrboard2 16f877/18f4550).
2- la comunicacion serie la realizo por el usart del pic (es decir por hardware rs232 del pic).
3- le cambie como hizo diego los pines del bus spi. en mi caso tengo a do->b2; ck->b1; di->b3; cs-b5;

pongo las modificaciones realizadas en el nutriax_mmc_spi.c
/////*** USER CONFIG ***/////

//SanDisk’s MultiMediaCards clock data in on the rising edge and out on the falling edge.
#ifndef MMC_CLK
#define MMC_CLK   PIN_B1
#endif
#ifndef MMC_DI
#define MMC_DI    PIN_B4
#endif
#ifndef MMC_DO
#define MMC_DO    PIN_B2
#endif
#ifndef MMC_CS
#define MMC_CS    PIN_B5
#endif

ahora pongo el programa que uso...

////////////////////////////////////////////////////////////////////////////////////
//
// MMC Card Test ...
// by RedPic
////////////////////////////////////////////////////////////////////////////////////

#include <18f4550.h>
//#fuses HS,MCLR,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOPBADEN,NOLVP,NOCPD,NODEBUG,NOWRT,NOVREGEN
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,NOVREGEN,NOPBADEN,NOPUT,NOBROWNOUT,NOCPD,NOWRT
// el fuse que configuramos anteriormente
#use delay(clock=48000000)

#define LED        PIN_e0
#define BUZZER     PIN_e1
#define RELE       PIN_e2

#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

char  cRec=0x00;                            // Último caracter recibido via serie
char  Command=0x00;                         // Comando a procesar

int8  MMCBuffer[512];
int32 address=0;


#define MMC_CS    PIN_B5
#define MMC_CLK   PIN_B1
#define MMC_DI    PIN_B4
#define MMC_DO    PIN_B2

#include "pulpo_mmc_spi.c"

////////////////////////////////////////////////////////////////////////////////////
//
// Funciones ...
//
////////////////////////////////////////////////////////////////////////////////////

void Cursor(char c){

   printf("%c\r\n>",c);
}

void Presenta_Hardware(void){

   printf("\r\n\n");
   printf("MMC MultiMedia Card Driver Test\r\n");
   printf("Hardware iACCESS CONTROL V1 v.0.0.0\r\n\n");

   printf("Commands when available:\r\n\n");
   printf("[M] Init MMC Card\r\n");
   printf("[F] Read MMC Card Block First\r\n");
   printf("[R] Read MMC Card Block Actual\r\n");
   printf("[ ] Read MMC Card Block Next\r\n\n");
   Cursor(0x00);
}


////////////////////////////////////////////////////////////////////////////////////
//
// Interrupción por Recepción Serie RS232
//
////////////////////////////////////////////////////////////////////////////////////

#int_rda
void handle_rda_int(){

   if(kbhit()){                             // Si hay algo pdte de recibir ...
      cRec=getc();                          // lo recibo sobre cRec ...
      if(cRec!=0x00){                       // Si es distinto de \0 ...
         Command=ToUpper(cRec);             // cargo cRec sobre Command para procesarlo
      }                                     // pasándolo a Mayúsculas para no confundir.
   }
}

////////////////////////////////////////////////////////////////////////////////////
//
// Main
//
////////////////////////////////////////////////////////////////////////////////////

void main() {

   int16 f=0;
   int16 size=512;
   int8  col=0;

   disable_interrupts(global);
   disable_interrupts(int_timer1);
   disable_interrupts(int_rda);
   disable_interrupts(int_ext);
   disable_interrupts(int_ext1);
   disable_interrupts(int_ext2);

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_spi(FALSE);
   setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
   setup_timer_0(RTCC_OFF);
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   port_b_pullups(false);

  // set_tris_a(0b00001000);
  // set_tris_c(0b10000000);

   enable_interrupts(global);
   enable_interrupts(int_rda);

   address=0;
   Presenta_Hardware();
   do {
      if(Command!=0x00){                    // Si he recibido un comando vía Serie ...
         if(Command=='?'){                  // Si el comando es '?' ...
            Presenta_Hardware();
         }

         if(Command=='M'){                  // Inicializa MMC Card
            Cursor(Command);
            if(mmc_init()==0)
               printf("MMC init ok");
            else
               printf("MMC init fault");
            Cursor(0x00);
         }

         if(Command=='F'){                  // Read First Block MMC Card
            address=0;
            Command='R';
         }
         
         if(Command==' '){                  // Read Next Block MMC Card
            address+=512;
            Command='R';
         }
         
         if(Command=='R'){                  // Read Block MMC Card
            Cursor(Command);
            for(f=0;f<=511;f++) MMCBuffer[f]=0;
            size=511;
            col=0;
            if(mmc_read_block(address, size,&MMCBuffer[0])==0){
               printf("\r\n>MMC read ok from Address %LX to %LX\r\n",address,address+size);
               for(f=0;f<=511;f++){
                  printf("%X ",MMCBuffer[f]);
                  if(++col==16){
                     col=0;
                     printf("\r\n");
                  }
               }
            }
            else
               printf("\n\rread fault");
            Cursor(0x00);

         }
         Command=0x00;                      // Indico que ya he procesado el comando.
      }
     
      ///////////////////////////////////////////////////////AGREGO NUTRIAX
      ////////////////////////////////////////////////////////////////////
      Cursor(Command);
            if(mmc_init()==0)
               printf("MMC init ok");
            else
               printf("MMC init fault");
            Cursor(0x00);         
   } while (TRUE);
}

como veran este es el codigo que tiene diego en la pagina, pero con una leve modificacion (como por ejemplo le saque el conector rj45 y todas sus funciones)...
el problema es que no me inicializa, me imprime init fault...
alguien me puede ayudar o podria decirme como hizo para que le ande el spi por soft? gracias...


 

anything