Autor Tema: Comenzando con memorias SD/MMC. Librería a nivel hardware.  (Leído 158621 veces)

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

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Comenzando con memorias SD/MMC. Librería a nivel hardware.
« Respuesta #30 en: 17 de Enero de 2010, 15:49:38 »
Citar
    Guarda que mi proyecto no esta terminado!   

 :D :D :D. Se me complico el objetivo  :D :D :D.

Hola Suky sigo acá trabajando con la memoria gracias por los links ya mismo me pongo a trabajar con lo del socalo, pero mientras llega la muestra sigo con la memoria. Revisando nuevamente la teoria hay unos comando que son los siguientes.

CMD32, CMD33,CMD34. Que son para borrar un bloque ya escrito en la memoria según entendí :mrgreen: y haciendo algo de aritmética para conocer lo que debe enviar el micro llegue a lo siguiente.

CMD32 = 0X60,0X00,0X00,0X00,0X00,0X95
CMD33 = 0X61,0X00,0X00,0X00,0X00,0X95
CMD34 = 0X62,0X00,0X00,0X00,0X00,0X95

1 . Acá va mi primera pregunta lo mismo los 4 bytes es para de 0x00 son para referenciar que bloque se desea borrar.
2. Con estás memorias no hay forma de sobrescribir un sector de 512 bytes sin nesecidad de borrar primero el bloque ya escrito.

3. No hay un comando para borrar toda la memoria de una vez sin necesidad de irse por cada sector.

Saludos. 
Un saludo desde Pereira - Colombia

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Comenzando con memorias SD/MMC. Librería a nivel hardware.
« Respuesta #31 en: 17 de Enero de 2010, 21:01:18 »
mmm... Un comando es para definir la dirección del primer bloque, otro para definir la dirección del último bloque, y la restante es para borrar los sectores comprendidos entre los bloques definidos con los comandos anteriores.
Para borrar toda la memoria defines el primer sector con dirección 0x00, y el último dependerá del tamaño de la memoria.

Respecto a la pregunta numero 2, en las pruebas que desarrollaste, necesitaste borrar el sector para escribirlo?  :mrgreen:

Saludos!

No contesto mensajes privados, las consultas en el foro

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Comenzando con memorias SD/MMC. Librería a nivel hardware.
« Respuesta #32 en: 18 de Enero de 2010, 17:47:41 »

Hola Suky que pena por no responder ligero, pero ya estoy que comienzo semestre de nuevo y estoy terminando de cuadrar el horario de clase dejame contarte que tengo un semestre lleno de básicos las siguientes son las materias de este semestre

1 Matemáticas V
2 Dinámica
3 Resistencia de Materiales
4 Ingeniería Económica
5 Taller de Ajuste
6 Electromagnétismo II

Nada de electrónica :oops:, pero bueno así son todas las materias de básicos, además hoy empiezo el curso de inglés de 6:00 pm a 10:00 Pm por 15 días.

En conclusión tengo un semestre bastante apasionante  :D :D :D.

Listo a lo que vinimos por acá tengo un memoria sd de 16 Mbytes y haciendo una conversionsita ligera llego a que

16Mbytes = 16777216 bytes

Pasando esto a potencias de 2 concluyo que 16777216 bytes = 2^24 y pasando a binario es equivalente a:

00000001 00000000 00000000 00000000 b = x(01000000)

De acá concluyo que la primera posición de la memoria de 16 Mbytes es = x00000000
Y la última es = x01000000

Creo que está bien no se si habrá algún problema con el cálculo del la última dirección de la memoria de 16 Mbytes.

Citar
Respecto a la pregunta numero 2, en las pruebas que desarrollaste, necesitaste borrar el sector para escribirlo? 

Voy a probar a ver como funciona y cual es la conclusión ;-).

Saludos.
Un saludo desde Pereira - Colombia

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Comenzando con memorias SD/MMC. Librería a nivel hardware.
« Respuesta #33 en: 18 de Enero de 2010, 19:04:40 »
Uff! Que semestre!!! Yo ya pasé por eso esfuerzos mentales :rolleyes:  :D :D

Respecto a la memoria, coincidimos en el numero de bytes, pero cada sector tiene 512 bytes, entonces el ultimo sector sería 16777216-512=0xFFFE00.

Igual podes descargar el programa WinHEX y verificar lo que estamos calculando.

Saludos!


PD: No es necesario borrar un sector antes de escribirlo  ;-)
No contesto mensajes privados, las consultas en el foro

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Comenzando con memorias SD/MMC. Librería a nivel hardware.
« Respuesta #34 en: 20 de Enero de 2010, 12:36:53 »

Citar
Uff! Que semestre!!! Yo ya pasé por eso esfuerzos mentales   

 :D :D. Si que lo exprimen a uno.

Citar
Respecto a la memoria, coincidimos en el numero de bytes, pero cada sector tiene 512 bytes, entonces el ultimo sector sería 16777216-512=0xFFFE00.

Haaaaa. Si tienes toda la razón no tuve en cuenta que el último era el penúltimo bloque pero bueno.

Bueno continuan las pruebas estás es para mirar si un bloque se puede reescribir estos fueron los resultados:

En la siguiente gráfica podemos como el micro escribe el dato 0xB3.



En está gráfica vemos como leé los datos.



En está gráfica vemos como el micro manda un bloque de 512 bytes con el dato 0x99 en el mismo programa.



Y en la última gráfica leé los 512 bytes con el dato 0x99



En conclusión no se necesita borrar un bloque para poder escribirlo es decir, el bloque es rescribible. Suky que pena por contestar tan tarde pero he estado un poco ocupado cuadrando el horario del semestre pero sigo trabajando con mi memoria, ya me pongo en la tarea de programar la función erase(). ;-)

Saludos.
Un saludo desde Pereira - Colombia

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Comenzando con memorias SD/MMC. Librería a nivel hardware.
« Respuesta #35 en: 20 de Enero de 2010, 15:56:07 »

Saludos. Sigo con la pruebas ahora con la función mmc_erase() la idea es la siguiente cada vez que se inicilice la memoria también seá formateada, estuve mirando el datasheet y el artículo de compañero Suky y realice la siguiente rutina

Código: [Seleccionar]
int mmc_erase()
  {
    OUTPUT_HIGH(PIN_C2);
    for (i=0; i<20; i++)
      {
        SPI_WRITE(0xFF);
      }
    OUTPUT_LOW(PIN_C2);                // Activo la targeta
    for (i=0; i<20; i++)
      {
        SPI_WRITE(0xFF);               // Algunos clocks.
      }
    SPI_WRITE(0x60);
    SPI_WRITE(0x00);
    SPI_WRITE(0x00);
    SPI_WRITE(0x00);
    SPI_WRITE(0x00);
    SPI_WRITE(0xFF);
    if(mmc_respuesta(0x01)== 0x01)     // No respondio acertadamente la memoria
      {
        return 1;
      }
    SPI_WRITE(0x61);
    SPI_WRITE(0x00);
    SPI_WRITE(0xFF);
    SPI_WRITE(0XFE);
    SPI_WRITE(0x00);
    SPI_WRITE(0xFF);
    if(mmc_respuesta(0x01)==0x01)
      {
        return 1;                    // No respondio la memoria y se vencio el tiempo
      }
    SPI_WRITE(0x66);
    SPI_WRITE(0x00);
    SPI_WRITE(0x00);
    SPI_WRITE(0x00);
    SPI_WRITE(0x00);
    SPI_WRITE(0xFF);
    if(mmc_respuesta(0x01)== 0x01)
      {
        return 1;
      }
    while(SPI_READ(0xFF) == 0); 
    OUTPUT_HIGH(PIN_C2);
    return 0;                       // Borro acertadamente toda la memori       
  }

La memoria que estoy simulando es de 16Mbytes, bueno hasta acá todo va bien pero me resulta un interrogante cuando la simulo y le pongo el debug del SPI la memoria me responde con 0x04 que según el R1 indica comando inválido he revisado el cálculo del comando y no se que pueda pasar (Todo el cálculo esta bien eso creo porque soy algo despitado :mrgreen:) :oops:. Bueno seguire intentando haber si termino con la memoria y sigo con la de la FAT.

Saludos.
Un saludo desde Pereira - Colombia

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Comenzando con memorias SD/MMC. Librería a nivel hardware.
« Respuesta #36 en: 20 de Enero de 2010, 18:06:27 »
 :?  Será que el dispositivo de proteus es una MMC y no tienen esos comandos?  :roll:


Pare realizar el formateo de una memoria independientemente del tamaño se podría leer el registro CID, que creo que un parámetro da el tamaño de la memoria.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Comenzando con memorias SD/MMC. Librería a nivel hardware.
« Respuesta #37 en: 20 de Enero de 2010, 18:20:08 »

mmm... Eso es lo que estoy mirando en un datasheet de una memoria MMC Samsung, acá he encontrado que si tienes los comandos para borrar pero en dicho caso tienen dirección distinta ed decir, uno es el CMD35, CMD36 y CMD38 respectivamente, Pero mando el comando con las nuevas direcciones y sigue respondiendo 0x04, La verdad no se si el simulador proteus simula estos comandos "creeria que si" pero seguire investigando cual puede ser el problema o otro podria ser la imagén la verdad no se si habra problema con el simulador.

Citar
Pare realizar el formateo de una memoria independientemente del tamaño se podría leer el registro CID, que creo que un parámetro da el tamaño de la memoria.

Es muy buena idea mejor dicho Suky te la conoces coma la palma de mano :D :D :D.

Saludos.
Un saludo desde Pereira - Colombia

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Comenzando con memorias SD/MMC. Librería a nivel hardware.
« Respuesta #38 en: 21 de Enero de 2010, 11:39:30 »

Hola Suky. Acá sigo con lo de la memoria pero estoy investigando reuniendo información para haber logro simularla en el proteus antes de montarla. Bueno he conseguido un datasheet de una MMC y he encontrado algo.

Lo primero el tamaño de la memoria se encuentra en el registro CSD acá pongo una tabla para que lo observes.



Y lo segundo acá una tabla de los comandos de erase para una MMC, son muy distintos a los de la SD.

.

Bueno eso era lo que queria comentar solamente falta lo del simulador.

Saludos y a seguir trabajando. :mrgreen:
Un saludo desde Pereira - Colombia

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Comenzando con memorias SD/MMC. Librería a nivel hardware.
« Respuesta #39 en: 21 de Enero de 2010, 14:07:05 »

Hola Nuevamente. Sigo con lo de la memoria y acabo de realizar la rutina del comando CSD hay vamos :-/ :-/ :-/ 8).

Bueno acá los resultados:

En esta figura observamos una memoria de 32 Mbytes en está memoria los que contienen el parámetro de capacidad son el los bytes 10 y 11 acá la gráfica.



Bueno en está otra simulación la memoria fue de 16 Mbytes los bytes 10 y 11 cambian porque el tamaño de la memoria también cambian. En la siguiente figura los resultados.



Esté método resulta muy util a la hora de formatear toda la memoria ya que sabemos con los bytes 10 y 11 tenemos el tamaño de la memoria así podemos formatear cualquier memoria conociendo esté método. De nuevo gracias al compañero Suky por el dato del CRC aunque se lo tenia bien guardadito :D :D :D.

Saludos y seguimos adelante
Un saludo desde Pereira - Colombia

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Comenzando con memorias SD/MMC. Librería a nivel hardware.
« Respuesta #40 en: 21 de Enero de 2010, 15:41:49 »

Esté método resulta muy util a la hora de formatear toda la memoria ya que sabemos con los bytes 10 y 11 tenemos el tamaño de la memoria así podemos formatear cualquier memoria conociendo esté método. De nuevo gracias al compañero Suky por el dato del CRC aunque se lo tenia bien guardadito :D :D :D.

Saludos y seguimos adelante

 :D :D Hay que leer y leer! Uno solo entrega la punta del ovillo  ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Comenzando con memorias SD/MMC. Librería a nivel hardware.
« Respuesta #41 en: 22 de Enero de 2010, 12:41:50 »

Hola Suky. Si hay que leer bastante pero el inglés técnico me enrreda bastante pero bueno se hace lo puede.

Dejame contarte que por hora no voy a molestar más con la memoria sd si no hasta que la monte (creo que por ahy el 3 de febrero empiezo a cacharriale al hardware), si no que voy a empezar con lo de la FAT16 creo que es la parte más complicada pero hay tiempo y buena disposición para hacerlo. Será que con el micro 16F877 si me aguante lo de la FAT16 porque tengo mis dudas al manejar la SD y la FAT me consuman toda la ROM del micro y ahy si paila.

Bueno compañero muchismas gracias por la ayuda prestada, sin tú ayuda el manejo de la SD hubiera sido un fracaso (al menos eso creo porque está memoria tiene sus marañas). De nuevo seguimos en contacto, contando nuestras experiencias con la SD ;-), aunque de pronto me demore algo en responder pero el proyectico no lo abandono.

Saludos y seguimos adelante.

Un saludo desde Pereira - Colombia

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Comenzando con memorias SD/MMC. Librería a nivel hardware.
« Respuesta #42 en: 22 de Enero de 2010, 13:50:32 »
mmm... Con un 877 no llegas a ningún lado, te va a consumir toda la RAM/ROM y no vas a poder hacer nada. Te conviene usar un 18F que programado en CCS da lo mismo.

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Slalen

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1079
    • Página web personal de Guillermo Herrero González
Re: Comenzando con memorias SD/MMC. Librería a nivel hardware.
« Respuesta #43 en: 29 de Enero de 2010, 06:56:00 »
Vuelvo a la carga!!

He revisado el esquema que has colgado, ¿te funciona sin poner un driver en el SDO? A mí no me reconoce nada.


He metido tu programa en CCS y con la mmc funciona sin problemas pero con las sd hace cosas raras. Estos son los errores que me han salido:
Código: [Seleccionar]
Iniciando SD Card
Error
Iniciando SD Card
Se ha iniciado correctamente la memoria!!!

Lectura del CID:

Lectura del CSD:

Se realiza escritura de la memoria en 512:

Se lee el sector de la memoria 0:
Error! No se ha podido leer

Cambian al resetar el sistema y volver a inicializarlo.

Yo creo que tengo alguna chorrada en el pcb pero por más que lo revise está bien (salvo la diferencia comentada)

A ver si conseguimos echarlo a andar!!

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Comenzando con memorias SD/MMC. Librería a nivel hardware.
« Respuesta #44 en: 29 de Enero de 2010, 09:22:45 »
He revisado el esquema que has colgado, ¿te funciona sin poner un driver en el SDO? A mí no me reconoce nada.

Sip, exactamente así como está. Yo estuve utilizando una memoria SD Card Scandisk de 512MB.


Con respecto al error que pueda ocurrir con la SD Card podrías activar el debug_rs232 para nos de más información de donde pueda estar fallando.

Saludos!
No contesto mensajes privados, las consultas en el foro


 

anything