Autor Tema: Problema con MMC  (Leído 4253 veces)

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

Desconectado gus40

  • PIC10
  • *
  • Mensajes: 8
Problema con MMC
« en: 27 de Marzo de 2008, 11:19:52 »
Saludos a la gente del foro ...estoy trabajando con una MMC conectada a un micro 18F452 , la idea es recibir datos via conexion RS232 y guardarlos en un archivo de texto que pueda ser leido en la PC . Gracias a toda la informacion que fui encontrando aca logre la conexion con la MMC , implementar la FAT16 y generar un archivo de texto escribiendo la respectiva entrada en el directorio raiz ,las FAT y sectores de datos ... donde tengo el problema ? pues bien ...todo funciona de maravilla siempre y cuando encienda la fuente con la MMC colocada en el zocalo . El zocalo que uso tiene una patita que se usa para identificar cuando la MMC esta presente ...tal es asi que dentro de mi programa reviso esa condicion , entonces si se detecta que se inserto la MMC corre el codigo de inicializacion , pero como dije antes la MMC no se pone en estado IDLE.

PRUEBAS REALIZADAS:

1) Simulo la extraccion e insercion de la MMC conectando y desconectando el pin que reconoce la presencia en forma manual (dejando la MMC en el zocalo ) . En este caso se inicializa correctamente ,con lo que aseguro que este segmento de codigo funciona

2) Añadi al circuito un transistor de corte en la alimentacion de la MMC controlado por el micro . Cuando se detecta la precencia el micro corta la alimentacion , espera 500ms , vuelve a alimentar y a partir de ahi corre la inicializacion (esto para evitar que en el momento de energizar aparezca algun ruido que la deje en un estado raro ) sinembargo tampoco se inicializa de esta manera .

3) He agregado retardos , mas pulsos de clock en la inicializacion , he deshabiltado SPI antes de alimentar la memoria dejando en estado bajo todos los pines conectados a ella , he asegurado que la frecuencia de trabajo SPI sea de 312khz en el momento de la inicializacion .....nada a funcionado ...la unica forma en que se inicializa es cortando la fuente


He leido las especificaciones y recomendaciones sobre las MMC y por lo que entiendo el comando CMD0 (reset) que es parte de la inicializacion deberia ser reconocido en cualquier estado si se lo envia con el CRC ...sinembargo la respuesta que obtengo es 0XFF en lugar de la esperada 0x01 ....El corte que hago con el transistor deberia dejar la MMC en el estado inicial ....

El codigo que utilizo en la inicializacion es el mismo que esta posteado en todos lados mmc_init() y funciona bien ya que se ejecuta correctamente al encender la placa ....

Bueno espero que puedan ayudarme o darme alguna idea ...ya que tengo todo funcionando y falta este detalle que parece una pavada pero me esta volviendo loco ....

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Problema con MMC
« Respuesta #1 en: 27 de Marzo de 2008, 11:24:04 »
1) Simulo la extraccion e insercion de la MMC conectando y desconectando el pin que reconoce la presencia en forma manual (dejando la MMC en el zocalo ) . En este caso se inicializa correctamente ,con lo que aseguro que este segmento de codigo funciona.

Hola!
Estas trabajando con una simulacion? No será problema del simulador? Quizas un prototipo del hard corriendo el programa te sea util para solucionar este ultimo problema!

Saludos.
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado gus40

  • PIC10
  • *
  • Mensajes: 8
Re: Problema con MMC
« Respuesta #2 en: 27 de Marzo de 2008, 11:44:12 »
Hola Aitopes ..gracias por responder tan rapido... he leido algunas cosas tuyas para realizar este proyecto....disculpenme si no se entendio ....el prototipo lo tengo hecho ...cuando hablo de simular ..quiero decir que desconecto el pin en lugar de sacar y poner la memoria ..de esa forma funciona ..pero si la saco y vuelvo a poner realmente ...no se inicializa ...pero el codigo que se ejecuta es el mismo en ambos casos  :z)

Desconectado wATAw

  • PIC12
  • **
  • Mensajes: 52
Re: Problema con MMC
« Respuesta #3 en: 27 de Marzo de 2008, 14:15:21 »
yo estoy trabajando en algo parecido...pero por lo que veo me llevas ventaja, por que yo no consigo escribir en la tarjeta(en mi caso SD). Solo consigo inicializarla...utilizo diferentes librerias del foro de ccsinfo, pero no consigo hacerlas funcionar correctamente...Te importaría postear algo más sobre las librerias y el circuito que usas??
Muchas gracias de antemano!

Desconectado gus40

  • PIC10
  • *
  • Mensajes: 8
Re: Problema con MMC
« Respuesta #4 en: 27 de Marzo de 2008, 15:41:40 »
Hola Wataw:

Voy a acomodar un poco las rutinas y añadirles algunos comentarios para que las entiendan y las posteo (no soy lo mas prolijo haciendo programas  jajajaj) . Vos decis que conseguis inicializarla ...probaste que se inicie cuando la insertas ? yo no consigo hacerlo 


Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Problema con MMC
« Respuesta #5 en: 27 de Marzo de 2008, 15:59:41 »
Hola Wataw:

Voy a acomodar un poco las rutinas y añadirles algunos comentarios para que las entiendan y las posteo (no soy lo mas prolijo haciendo programas  jajajaj) . Vos decis que conseguis inicializarla ...probaste que se inicie cuando la insertas ? yo no consigo hacerlo 



Sospecho que va a ser muy interesante verlas!!!!  :mrgreen:
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado wATAw

  • PIC12
  • **
  • Mensajes: 52
Re: Problema con MMC
« Respuesta #6 en: 27 de Marzo de 2008, 17:03:33 »
Hola Wataw:

Voy a acomodar un poco las rutinas y añadirles algunos comentarios para que las entiendan y las posteo (no soy lo mas prolijo haciendo programas  jajajaj) . Vos decis que conseguis inicializarla ...probaste que se inicie cuando la insertas ? yo no consigo hacerlo 



mmmm hombre es que como no tengo un codigo operativo.....vamos que solo tengo pruebas, como poner el init dentro de un while... :D :Dasi si que inicia....jajaja!!hombre, puedes probar a iniciarla en un while siempre que te de algun error de escritura....no es muy elegante pero puede servirte.... :D

Desconectado gus40

  • PIC10
  • *
  • Mensajes: 8
Re: Problema con MMC
« Respuesta #7 en: 27 de Marzo de 2008, 20:12:34 »
Bueno aca les envio el codigo ..todavia necesita ser depurado ...pero con el he conseguido guardar archivos que ocupan varios sectores de la MMC y despues verlo desde la PC. El circuito no lo estoy poniendo pero es muy sencillo ,la MMC conectada a los pines SPI con divisores resistivos para hacer compatibles los 3,3V y los pines RX,TX a un max 232 para la conexion con la PC



Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Problema con MMC
« Respuesta #8 en: 28 de Marzo de 2008, 08:37:25 »
Hola Gus!
Acabo de darle un vistazo rapido al código. La rutina que usas para inicializar la memoria, de acuerdo al estado de flagcard es bastante larga (en tiempo, me refiero). Sin embargo, lo primero que haces al entrar en ella es poner flagcard = 0 asumiendo (para las pasadas siguientes) que la MMC esta inicializada (es decir, que todo el bloque de instrucciones que esta debajo se ejecuto bien).

Puede ser una pavada, pero....¿estas seguro que todo ese codigo se ejecuta perfectamente? ¿No pasara que asumes que si y cambias el flag, pero en realidad no se ha inicializado por algun problema?

Un abrazo.
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado El_Guitre

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1046
Re: Problema con MMC
« Respuesta #9 en: 28 de Marzo de 2008, 10:45:30 »
Código: C
  1. while (TRUE){
  2.                 if (!input(PIN_D1)) { // cuando D1 esta en estado bajo significa que la MMC esta presente
  3.                         if (flagcard){          // flagcard=1 me indica que la MMC no fue inicializada aun
  4.                                 disable_interrupts(global);
  5.                                 flagcard=0; //  <------ esta linea
yo sacaria esta linea de aca.
Código: C
  1. OUTPUT_HIGH(PIN_d2);// esta parte de codigo es parte de las pruebas con d2 manejo
  2.                                 delay_ms(500); // el trabsistor que corta la alimentacion de la MMC
  3.                                 delay_ms(500);
  4.                                 delay_ms(500);
  5.                                 delay_ms(500);
  6.                                 OUTPUT_low(PIN_d2); // aca vuelvo a alimentar la MMC despues de un retardo
  7.                                 SETUP_SPI(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_64 ); // bajo la velocidad de SPI a 312 khz
  8.                                 printf("Se detecto MMC");
  9.                                 while (mmc_init()!=0){ // se queda aca hasta que logre inicializar y me imprime error por cada vez que pasa
  10.                                        
  11.                                                 SETUP_SPI(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_64 );
  12.                                                 printf("error");
  13.                                 }
  14.                                 printf("MMC init OK");
  15.              flagcard=0; //  <------ aca
y la pondria aca

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Problema con MMC
« Respuesta #10 en: 28 de Marzo de 2008, 10:55:19 »
Exacto!
Puede que no sea la causa del problema, pero no estaria de mas asegurarse de que el proceso se realiza antes de cambiar el flag.

Saludos!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Problema con MMC
« Respuesta #11 en: 29 de Marzo de 2008, 14:15:16 »
gus40 te recomiendo que en la rutina de inicialización, mires el comando respuesta R1, cuando ocurre un error, este comando es diferente de cero, en la especificaciones aparece la descripción del significado de cada bit


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

Desconectado gus40

  • PIC10
  • *
  • Mensajes: 8
Re: Problema con MMC
« Respuesta #12 en: 30 de Marzo de 2008, 17:51:11 »
Gracias a todos los que respondieron ...he tomado en cuenta todos los consejos ..sinembargo aun no he conseguido solucionarlo ...hice un programa chico que solo ejecuta la inicializacion e imprime las respuestas como dice PalitroqueZ

El printado es asi respuesta es la respuesta esperada para el comando que se ejecuto , en resp lo que responde la MMC

Cuando enciendo la fuente la respuesta esperada al comando 0 es 0X01 y se obtiene en forma inmediata , despues se envia el comando para ponerla en estado IDLE y la respuesta esperada es 0X00 , en este caso se reenvia hasta que se logra


Se detecto MMCSent go to SPI

respuesta: 01 contador: fffe resp: 01
Got response from MMC

respuesta: 00 contador: fffe resp: 01
respuesta: 00 contador: fffd resp: ff
respuesta: 00 contador: fffc resp: ff
respuesta: 00 contador: fffb resp: ff
respuesta: 00 contador: fffa resp: ff
respuesta: 00 contador: fff9 resp: ff
respuesta: 00 contador: fff8 resp: ff
respuesta: 00 contador: fff7 resp: ff
respuesta: 00 contador: fff6 resp: ff
respuesta: 00 contador: fff5 resp: ff
respuesta: 00 contador: fff4 resp: ff
respuesta: 00 contador: fff3 resp: ff
respuesta: 00 contador: fff2 resp: ff
respuesta: 00 contador: fff1 resp: ff
respuesta: 00 contador: fffe resp: 00
Got out of idle response from MMC

respuesta: 00 contador: fffe resp: 00
Got set block length response from MMC

MMC init OK



Cuando enciendo la fuente ,pero inserto la MMC despues hay una respuesta erronea al comando de reset ,observen que ahora es 0x80 en lugar de 0x01 y esto pasa en todos los intentos ...
Se detecto MMCSent go to SPI

respuesta: 01 contador: fffe resp: 80
respuesta: 01 contador: fffd resp: ff
respuesta: 01 contador: fffc resp: ff
respuesta: 01 contador: fffb resp: ff
respuesta: 01 contador: fffa resp: ff
respuesta: 01 contador: fff9 resp: ff
respuesta: 01 contador: fff8 resp: ff
respuesta: 01 contador: fff7 resp: ff
respuesta: 01 contador: fff6 resp: ff
respuesta: 01 contador: fff5 resp: ff
respuesta: 01 contador: fff4 resp: ff
respuesta: 01 contador: fff3 resp: ff
respuesta: 01 contador: fff2 resp: ff
respuesta: 01 contador: fff1 resp: ff
errorSent go to SPI

respuesta: 01 contador: fffe resp: 80
respuesta: 01 contador: fffd resp: ff
respuesta: 01 contador: fffc resp: ff
respuesta: 01 contador: fffb resp: ff
respuesta: 01 contador: fffa resp: ff
respuesta: 01 contador: fff9 resp: ff
respuesta: 01 contador: fff8 resp: ff
respuesta: 01 contador: fff7 resp: ff
respuesta: 01 contador: fff6 resp: ff
respuesta: 01 contador: fff5 resp: ff
respuesta: 01 contador: fff4 resp: ff
respuesta: 01 contador: fff3 resp: ff
respuesta: 01 contador: fff2 resp: ff
respuesta: 01 contador: fff1 resp: ff
errorSent go to SPI


asi que voy a ver las hojas de datos para ver que error seria 0X80 sinembargo el formato de la respuesta solo indica que este bit deberia ser 0 siempre .

Estoy pensando que el problema debe estar en el hardware aunque es muy simple ..pareceria como que el ruido que provoca la fuente en el encendido favorece la inicializacion .. no es muy logico no? pero no se donde mas buscar






Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Problema con MMC
« Respuesta #13 en: 30 de Marzo de 2008, 18:01:06 »
Una pregunta tonta: La memoria es una MMC "original" o es una SD/SDHC, etc ? A veces no son TAN compatibles entre si, y esas pequenas diferencias pueden complicarte la vida.

Saludos!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado gus40

  • PIC10
  • *
  • Mensajes: 8
Re: Problema con MMC
« Respuesta #14 en: 30 de Marzo de 2008, 18:10:01 »
La MMC que estoy usando es una de 32MB que me vino con el celular