Autor Tema: LECTO-GRABADOR de tarjetas MMC , SD, MicroSD con pic 16F877A  (Leído 64147 veces)

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

Desconectado NANO1985

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
    • Desarrollos Tecnologicos - Tucuman - Argentina
LECTO-GRABADOR de tarjetas MMC , SD, MicroSD con pic 16F877A
« en: 12 de Junio de 2007, 11:48:28 »
Hola!!!! quiero hacer una aporte a toda la comunidad electronica... y de paso poder complementar con otra informacion para lograr que este circuito llegue a la plenitud de su desarrollo. el mismo consta de un microcontrolador PIC16F877A con un oscilador de 20Mhz (luego voy a explicar porque el de 20)... un par de resistencias para "ajustar" los niveles de tension que manejan las tarjetas SD,MicroSD y MMC (2.7 a 3.3 v) a los niveles de la lógica TTL de la arquitectura del PIC, las diversas memorias que existen en el mercado, desde el punto de vista técnico, pueden trabajar mediante dos protocolos serie distintos: el protocolo MultiMediaCard propiamente dicho, y el protocolo SPI. El primero de los protocolos es el más potente  ya que permite más operaciones que el segundo  :lol:, pero por otro lado, el segundo es más fácil de implementar si se dispone de una interfaz SPI   :-/ (en este caso mediante el modulo MSSP interno del pic) y es suficiente para la mayoría de aplicaciones. la tarjeta se comunica mediante Comandos del operador o Controlador, respondiendo en cada caso cada una de las peticiones del mismo. Yo por el momento logré paso a paso lo siguiente:

(1) seleccionar el modulo MSSP del pic para que funcione de modo maestro,... se utilizan para configurarlo solo 2 registros principales el SSPSTAT y el SSPCON1.
(2) mediante el 2 registro se selecciona el clock del modulo SPI, son 4 posibilidades distintas de frecuencias,... 1- Fosc/64 \\\ 2-Fosc/16 \\\ 3-Fosc/4 \\\ 4- Fosc=timer2/2
(3) en este caso tenemos que utilizar indefectiblemente un cristal de 20Mhz para que al seleccionar el divisor de frecuencia de clock a 64 (opcion1 item anterior) logremos obtener una frecuencia de clock de aproximadamente 312Khz... (frecuencia necesaria para inicializar la memoria)...
(4) luego debemos setear el tipo de polaridad del clock, momento en quese va a muestrear la entrada y ... haciendo CKP=1 CKE=0 SDI(SMP)=0 ...(son bits de los registros nombrados anteriormente)
(5) finalmente ya hemos inicializado el modulo del micro activandolo poniendo a "1" el bit SSPEN

ahora sigue la secuencia de pasos inalterables:

Los pasos muy precisos y específicos... cada comando entrega una respuesta de parte de la tarjeta.
a continuacion se detalla la cadena de cada comando a enviar y que se debe esperar de parte de la tarjeta.

CMD0--- cadena a enviar: 0x40,0x00,0x00,0x00,0x00,0x95 esperar respuesta: 0x01 (significa tarjeta en modo idle).
CMD41--- cadena a enviar: 0x41,0x00,0x00,0x00,0x00, 0xXX. Como la tarjeta ya esta en modo SPI el CRC (0xXX) puede tomar cualquier valor. se aconseja cargarle 0xFF. esperar respuesta 0x00 (significa tarjeta lista!!!! )
CMD55--- ESTE COMANDO NO ES UTILIZA PARA TARJETAS KINGSTON... SI TU TARJETA NO ES DE ESTA MARCA DEBERÁS ENVIARLE ESTE COMANDO. cadena a enviar: 0x77,0x00,0x00,0x00,0x00, 0xXX Y ESPERAR UN 0X00 DE RESPUESTA.
CMD58--- este comando es muy importante ya que se le "pregunta" a la tarjeta si está posibilitada a funcionar con una tension de alimentacion de 3.3v. cadena a enviar 0x7A,0x00,0x00,0x00,0x00, 0xXX. esperar respuesta 0x00 (significa que todo va OK!!!!)

luego de haber terminado la inicializacion, la tarjeta ya estla lista para realizar operaciones de lecto-escritura... pero lamentablemente acá se me recomplicó la cuestión.... hace una semana que estoy intentando escribirle algo y se vé que algun moco me estoy mandando o saltié algun paso,...porque no me responde nada cuando peticiono la escritura mediante el comando 24... nosé la verdad... voy a seguir intentando,.... y si hay progreso voy a seguir publicando más info...

si alguien está interesado en este proyecto no duden en intentar... por cualquier duda de hard o soft comunicate conmigo

vamos!!!! vamos!!!! pongansé las pilas e investiguen en este tema!!!!!! que está muy GROSSOOOO!!!

(tengo mucha informacion al respecto como para compartir sin problema)
"La inquebrantable voluntad de vencer"
"hay dos cosas infinitas... El universo y la Estupidez humana" Albert Einstein
 "El sabio actua sin anhelos, permanece sosegado,... así no es afectado por el resultado de sus acciones sean éstas el triunfo o el fracaso"
- UNIVERSIDAD TECNOLOGICA NACIONAL - FACULTAD REGIONAL TUCUMAN -

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: LECTO-GRABADOR de tarjetas MMC , SD, MicroSD con pic 16F877A
« Respuesta #1 en: 12 de Junio de 2007, 12:16:13 »
Hola NANO1985 y Bienvenido...

Date una vuelta por estos sitios encontraras muchas cosas interesantes.

http://www.todopic.com.ar/foros/index.php?topic=15553.0

http://www.todopic.com.ar/foros/index.php?topic=15741.0

Esa es la gente que se necesita, gracias por tus aportes.

Saludos
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado electroximo

  • PIC10
  • *
  • Mensajes: 36
Re: LECTO-GRABADOR de tarjetas MMC , SD, MicroSD con pic 16F877A
« Respuesta #2 en: 12 de Junio de 2007, 12:36:01 »
Hola , que hay .Yo tambien estoy trabajando con las sd y he podido escribir un bloque y leerlo , lo que pasa a diferencia de ti yo utilizo un dspic y el C30 , pero supongo que os pasos son los mismos.

Para escribir :

1º enciendes la tarjeta (CS=0)
2º esperas un retardo (aprox. yo le he puesto 40 ciclos de reloj).
3º envias el comando 24 y esperas un 0.(TENIENDO ENCUENTA QUE SIEMPRE TIENES QUE ENVIAR ALGO PARA QUE EL RELOJ  NO PARE)
4º  esperas un tiempo (apx=16 ciclos)
5º  envias el byte de comienzo
6º  envias los datos(512 bytes)
7º  envias el crc que son 2 veces 0xff
8º  esperas un 0x05 que es la contestacion de la tarjeta (le ha llegado bien).ESTE PUNTO TIENE UN PROBLEMA : SOLO LO ENVIA UNA VEZ Y TARDA UN POCO ,TIENES QUE COMBINAR EL ENVIO PARA QUE NO PARE EL RELOJ Y RECOGER LA RESPUESTA.
9º   parar la tarjeta.

para la lectura:


haces los mismos pasos pero cambia en que no tienes que esperar la llegada de la respuesta del comando sino la del byte de start del bloque que te envia la tarjeta . Lo envia en seguida practicamente despues de recibir el crc del comando.


Espero que esto te ayude , por lo menos para el primer bloque , porque como he dicho antes no he podido todavia cambiar de bloque en un bucle cerrado.Ya que si se pone la direccion concreta si que me funciona pero si esta direccion(muy raro) es solo par como 0x0002 etc... Luego aprovecho para pedir ayuda yo tambien aver si alguin sabe como resolverlo.

Desconectado NANO1985

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
    • Desarrollos Tecnologicos - Tucuman - Argentina
Re: LECTO-GRABADOR de tarjetas MMC , SD, MicroSD con pic 16F877A
« Respuesta #3 en: 12 de Junio de 2007, 20:08:23 »
MUCHISIMAS GRACIAS ELECTROXIMO!!!!  :-/ LA VERDAD QUE ESTOY RE CONTENTO PORQUE SOS EL PRIMERO QUE ME RESPONDE Y LE PONE PILAS A ESTE TEMA....bueno voy a seguir probando.... mirá acá tengo un manual que te puede servir demasiado.... la verdad que está muy completo.

mirá esta improvisacion rápida para probar si esto funcionaba o no... me armé el zócalo con adaptador para tarjetas micro SD ... soldándoles los cables a las terminales expuestas...

apropósito.....vos en que programás en C?.... en asemmber?.... en PBP?....
yo te comento que soy muy partidario del assembler... asi que no entiendo mucho de otro lenguaje....
« Última modificación: 12 de Junio de 2007, 20:41:20 por NANO1985 »
"La inquebrantable voluntad de vencer"
"hay dos cosas infinitas... El universo y la Estupidez humana" Albert Einstein
 "El sabio actua sin anhelos, permanece sosegado,... así no es afectado por el resultado de sus acciones sean éstas el triunfo o el fracaso"
- UNIVERSIDAD TECNOLOGICA NACIONAL - FACULTAD REGIONAL TUCUMAN -

Desconectado electroximo

  • PIC10
  • *
  • Mensajes: 36
Re: LECTO-GRABADOR de tarjetas MMC , SD, MicroSD con pic 16F877A
« Respuesta #4 en: 13 de Junio de 2007, 06:04:44 »
Hola, yo programo en C con el compilador C30 para dspic. Tiene que ser un poco complicado en ASM ?¿no?

Desconectado NANO1985

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
    • Desarrollos Tecnologicos - Tucuman - Argentina
Re: LECTO-GRABADOR de tarjetas MMC , SD, MicroSD con pic 16F877A
« Respuesta #5 en: 13 de Junio de 2007, 09:39:23 »
hola! electroximo! mas que complicado es muy denso en el sentido que si quiero hacer una rutina de escritura de LCD la tengo que hacer yo mismo y paso a paso, fijarme en los manuales como es el protocolo, los tiempos de las lineas de datos etc... etc....etc, en cambio en C es mucho mas sencillo y se te acortan mucho las lineas programacion (oooojo!!!... hablo de C,... porque una vez que se compila a *.HEX, debe quedar aproximadamente lo mismo) aparte ya tenés "armadas" muchas librerias de periféricos, puertos, modulos aritméticos, etc...etc.... bueno en fin.... me encantaría programar en C pero no tengo mucha idea de que se usa de soft ni nada :shock: ...

sacame de una duda  :? .... cuando hacés el programa en C, el compilador te crea tambien el archivo *.asm ???... porque si te crea este archivo, yo lo puedo entender, ... el mismo está en assembler,... como para que me compiles un par de fundiones del modulo SPI a ver si son parecidas a las que hago yo.... ok?... un abrazo.
"La inquebrantable voluntad de vencer"
"hay dos cosas infinitas... El universo y la Estupidez humana" Albert Einstein
 "El sabio actua sin anhelos, permanece sosegado,... así no es afectado por el resultado de sus acciones sean éstas el triunfo o el fracaso"
- UNIVERSIDAD TECNOLOGICA NACIONAL - FACULTAD REGIONAL TUCUMAN -

Desconectado electroximo

  • PIC10
  • *
  • Mensajes: 36
Re: LECTO-GRABADOR de tarjetas MMC , SD, MicroSD con pic 16F877A
« Respuesta #6 en: 13 de Junio de 2007, 11:32:03 »
Lo siento , NANO1985 por lo que parece no lo crea he estado mirando la carpeta donde se crean los archivos adicionales y no hay ninguno .Pero si has podido enviar comandos y  recibir respuestas es que el spi lo tienes bien configurado , lo mas seguro es que si no te funciona la escritura sea problema de los bucles para el tiempo.Si quieres pon un trozo de programa en asm haber si le vemos el fallo y se puede sacar. Un saludo

Desconectado electroximo

  • PIC10
  • *
  • Mensajes: 36
Re: LECTO-GRABADOR de tarjetas MMC , SD, MicroSD con pic 16F877A
« Respuesta #7 en: 13 de Junio de 2007, 14:24:03 »
hola otra vez , tendriamos que intentar cuadrar las horas de conexion , ya que por lo que parece tendremos que ayudarnos mutuamente .
No me acordaba que por el foro esta el manual de las tarjetas SanDisk qu te puede ayudar bastante, lo que no me acuerdo muy bien por donde , creo que por "proyectos".
Adeu.

Desconectado NANO1985

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
    • Desarrollos Tecnologicos - Tucuman - Argentina
Re: LECTO-GRABADOR de tarjetas MMC , SD, MicroSD con pic 16F877A
« Respuesta #8 en: 13 de Junio de 2007, 17:08:21 »
me parece perfecto que coordinemos los horarios :-/ ... decime vos a que hora te podés conectas y lo vemos....
mirá yo bajé hace un tiempo un manual de MMC y MicroSD ... es más lo tengo acá impreso por que es muy util  :mrgreen: pero el problema para postearlo es que pesa 1.76 Mb... asi que voy a tratar de conseguirte el linkpara que lo descargues...
saludos
"La inquebrantable voluntad de vencer"
"hay dos cosas infinitas... El universo y la Estupidez humana" Albert Einstein
 "El sabio actua sin anhelos, permanece sosegado,... así no es afectado por el resultado de sus acciones sean éstas el triunfo o el fracaso"
- UNIVERSIDAD TECNOLOGICA NACIONAL - FACULTAD REGIONAL TUCUMAN -

Desconectado electroximo

  • PIC10
  • *
  • Mensajes: 36
Re: LECTO-GRABADOR de tarjetas MMC , SD, MicroSD con pic 16F877A
« Respuesta #9 en: 14 de Junio de 2007, 04:57:32 »
Vale muchas gracias , respecto al manual, el que yo te he comentado es bastante grande.

Respecto a la hora , en el momento que te escribo tengo 9:52 de la mañana normalmente estoy conectado hasta las 13 y luego desde las 16 hasta las 20.Haber si pudieramos cuadrarlas :)

Desconectado NANO1985

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
    • Desarrollos Tecnologicos - Tucuman - Argentina
Re: LECTO-GRABADOR de tarjetas MMC , SD, MicroSD con pic 16F877A
« Respuesta #10 en: 14 de Junio de 2007, 10:13:26 »
hola!!! electroximo... mirá estuve viendo los horarios y logré acomodarlos,...
segun tus horarios seria

(1) - 10hs (españa) ----> corresponde a las 5hs (argentina)...
(2) - 13hs (españa) ----> correponde a las 8hs (argentina)...

(4) - 16hs (españa) ----> corresponde a las 11hs (argentina)...
(5)- 20hs (españa) ----> corresponde a las 15hs (argentina)...

es decir que para que no me desvele a infrahorarios lo mejor seria encontrarnos en el rango de horarios (4) a (5) es decir para vos entre las 16hs y las 20hs. OK? ... estamos en contacto. 8)
« Última modificación: 14 de Junio de 2007, 10:16:06 por NANO1985 »
"La inquebrantable voluntad de vencer"
"hay dos cosas infinitas... El universo y la Estupidez humana" Albert Einstein
 "El sabio actua sin anhelos, permanece sosegado,... así no es afectado por el resultado de sus acciones sean éstas el triunfo o el fracaso"
- UNIVERSIDAD TECNOLOGICA NACIONAL - FACULTAD REGIONAL TUCUMAN -

Desconectado electroximo

  • PIC10
  • *
  • Mensajes: 36
Re: LECTO-GRABADOR de tarjetas MMC , SD, MicroSD con pic 16F877A
« Respuesta #11 en: 14 de Junio de 2007, 10:46:47 »
Hola , ya estoy por aqui :) .
Respecto a los horarios no puedo a otras horas que te pillaran mejor , ya que estoy en el laboratorio y son estos.
Bueno vamos al tema,
Una recomendacion no borres la tarjeta!!!!! (o por lo menos muchas veces) , me explico cuando intentas  escribir , (si se logra) , la misma tarjeta borra antes y luego escribe , pero si empiezas tu a borrar aparte al final se bloquea los sectores que hayas borrado . Me ha sucedido a mi  ahora . A tener cuidado . Adeu..

Desconectado NANO1985

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
    • Desarrollos Tecnologicos - Tucuman - Argentina
Re: LECTO-GRABADOR de tarjetas MMC , SD, MicroSD con pic 16F877A
« Respuesta #12 en: 14 de Junio de 2007, 10:56:10 »
hola!!!! electroximo!.... que bien!! nos encontramos!! :-/ se me bloqueó la tarjeta ayer... no se que le pasa.... y pensaba en formatearla e intentar de nuevo... solo puedo inicializarla, pero en el momento de escribirla ... no me responde al comando 24.... asi que voy a ver que hago....
AHH!!!... ya tengo el manual que vos me decias.... lo imprimí y quedó perfecto.... lo estoy mirando....
(a esta hora hasta tus 20hs ...podés verdad??? :?: )
"La inquebrantable voluntad de vencer"
"hay dos cosas infinitas... El universo y la Estupidez humana" Albert Einstein
 "El sabio actua sin anhelos, permanece sosegado,... así no es afectado por el resultado de sus acciones sean éstas el triunfo o el fracaso"
- UNIVERSIDAD TECNOLOGICA NACIONAL - FACULTAD REGIONAL TUCUMAN -

Desconectado electroximo

  • PIC10
  • *
  • Mensajes: 36
Re: LECTO-GRABADOR de tarjetas MMC , SD, MicroSD con pic 16F877A
« Respuesta #13 en: 14 de Junio de 2007, 11:02:40 »
sin problemas , si se te queda bloqueada echale un vistazo a la direccion que envias y ponsela "par" a ver que tal.

A otra cosa le has mandado el comando 16 que indica el tamaño del bloque? , tienes que mandarlo despues de inicializar , da igual a la velocidad en que se lo mandes.

Desconectado NANO1985

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
    • Desarrollos Tecnologicos - Tucuman - Argentina
Re: LECTO-GRABADOR de tarjetas MMC , SD, MicroSD con pic 16F877A
« Respuesta #14 en: 14 de Junio de 2007, 11:06:59 »
por ahora estoy salteando el comando 16.... ya que decia en uno de los tantos manuales que leí ...que por defecto se asume un bloque a escribir o leer de 512 bytes....
asi que cuando envio el comando de esrcitura (CMD24)... mando 512bytes a esctribirle.... de todas formas YA mismo pruebo lo que me estás diciendo..... esperame un segundo....
(y vos que hacés ahora?... te puedo ayudar en algo???  :wink: )
"La inquebrantable voluntad de vencer"
"hay dos cosas infinitas... El universo y la Estupidez humana" Albert Einstein
 "El sabio actua sin anhelos, permanece sosegado,... así no es afectado por el resultado de sus acciones sean éstas el triunfo o el fracaso"
- UNIVERSIDAD TECNOLOGICA NACIONAL - FACULTAD REGIONAL TUCUMAN -