Foros de Electrónica

Comunidad de discusión sobre Automatización, Electrónica industrial, Microcontroladores y electrónica digital, Robótica, Domótica, Telemática, Tecnologías móviles, y muchos temas más.




Lecto-grabador de tarjetas MMC, SD, MicroSD con PIC16F877A


       



#61  
monly

Registrado: 06 May 2008
Mensajes: 8
citar
Hola h22, es un poco lioso segun la documentacion la respuesta es un byte,pero si miras los diagramas de tiempos puede tardar hasta 8 bytes en darte la respuesta y como la salida DO de la tarjeta esta en alto pues cada vez que les un byte lees FF hasta que te llega el 01 y despues de un comando/respuesta hay que enviar un byte extra con lo que lees otro FF, esto se traduce en la practica a que lees FF01FF, pero la verdad es que no hace falta leerlos con que hagas un bucle hasta que te llegue el 01 te da igual que mande 1 que 5 y cuando salgas de el mandas el byte extra pero ya no te hace falta leerlo.espero haberme explicado bien.

Y lo del standar no se, yo estoy haciendo pruebas de lectura y escritura, y con las rutinas que tengo puedo leer y escribir en una kingston pero en una sandisk no.

La diferencia que he notado por ahora es que la kingston en la respuesta a la lectura manda
FF 00 FF FE y la sandisk FF FF 00 FF FE.

Alguna idea de porque puedo escribir en la kingston y en la sandisk no.

Gracias

#62  
serchy

Registrado: 03 Ene 2008
Mensajes: 9
Ubicación: Tucuman, Argentina
citar
hola
Monly, seguramente debes resetear el pic, por que tu haces la inicializacion directamente desde el pic, y como puedes ver un poco mas arriba, (no se a que se debe) debes mandar dos veces el CMD1, pues la primera vez, la tarjeta envia que se encuentra en IDLE. Intenta enviar el comando 1 una vez, esperar la respuesta, y enviarlo otra vez, seguramente ahi va a funcionar bien.

h22, tal como dicen en todos lados, en realidad la respuesta es una sola R1, los 3 Bytes de los que todos hablan, es por que R1 viene despues de un byte o dos, ya no recuerdo bien. De todos modos se soluciona con un lazo que lea la respuesta de la tarjeta y salte, cuando obtenga la respuesta correcta.

Espero que les haya servido...

Si alguien me puede ayudar con el tema de escritura de la tarjeta estaré agradecido.

#63  
monly

Registrado: 06 May 2008
Mensajes: 8
citar
Hola serchy, ya me inicia sin problemas.

no se que problema tienes escribiendo,te digo lo que hago yo:

activo chip select
mando el comando, por ahora las direccion del sector la pongo directamente
espero en un bucle que me conteste 00, una vez solo, he leido en algun sitio que esperan 3
mando FF
mando FF
mando FE
mando 512 bytes
mando 2 bytes de crc por ejemplo FF
espero en un bucle la respuesta 05, al byte recibido le hago un and con 1f y lo comparo que sea 05
desactivo cs

Como comente en un post anterior con esta funcion escribo en una microsd de kingston,pero no me va en una sandisk.

#64  
monly

Registrado: 06 May 2008
Mensajes: 8
citar
Bueno sigo investigando haber que me pasa con la escritura de la sandisk, he añadido el comando 13 para leer el status de la tarjeta y leo la respuesta r2 y me da dos bytes de 00 00 como que no hay error pero en la tarjeta no escribe nada a alguien le pasa.

He revisado las respuestas de la kingston y es la misma que la sandisk pero no me escribe.

Un saludo.

#65  
cooperharris

Registrado: 05 Feb 2008
Mensajes: 56
Ubicación: españa
citar
saludos a todos compañeros, si alguien podria subir el esquema circuital del proyecto seria excelente, saludos amigos

#66  Espero q ayude
Ettneciv

Registrado: 20 Jul 2006
Mensajes: 3
citar
Bueno, al parecer este tema se ha complicado mas de lo debido (SOBRE TODO PARA LOS Q QUEREMOS HACERLO EN ASSEMBLER), les cuento q despues de leer MUCHO, decidi simular con el Proteus 7.2, aparentemento todo esta bien, el gran detalle es cuando lo pongo en practica.
Lamentablemente no cuento con osciloscopio q seria lo ideal para seguir las señales..Sin embargo AL PARECER
Inicializa bien mi SD
Pero nunca logro leer datos de la tarjeta

Aqui les dejo mi codigo, espero q sirva de algo para poder asi llegar al resultado deseado...

Nota: disculpenme los comentarios en el programa pero la verdad no soy muy bueno en eso, ademas me parece q es muy sencillo de comprender



Este mensaje contiene archivos adjuntos, para verlos debes estar registrado.

#67  
monly

Registrado: 06 May 2008
Mensajes: 8
citar
Hola Ettneciv, yo tambien lo estoy haciendo en ensamblador te ayudare en lo que pueda.

He mirado tu codigo asi por encima y he visto algunas cosas, cs lo tienes en bajo antes de mandar los 80 ciclos de reloj y debe estar en alto, las patas de la tarjeta DO y DI deben estar en alto yo tengo DO con una resistencia de pull-pup a 3,3 y DI la pongo en alto por software junto con CS antes de mandar los ciclos de reloj.

Me ha parecido que cuando mandas el comando cmd1 esperas una respuesta 01 y debe ser 00,
la respuesta de cmd0 si que es 01.

de lo que te voy a decir ahora no estoy seguro no se si usas un pic, pero si es asi mira haber las instrucciones de tu pic porque el mio no tiene movfw, es movf nombre,w.

Yo los comandos que uso y me funcionan siempre para inicializar son el cmd0 y cmd1 y luego le envio cmd16 para pone la longitud de bloque en 512, lo intente con los comandos 55 y 41 y no me funcionaban bien.

Hotra cosa que he visto es que no se si estas poniendo el crc en los comandos pero el unico que lo necesita es es el cmd0 , en spi esta desactivado por defecto, con lo que el ultimo byte puedes enviar FF.

el cmd 16 es para poner la longitud del bloque y debe ser por lo menos para escritura 512 bytes tu envias 50 00 00 00 03 FF y eso no es valido tienes que enviar para ponerlo en 512
50 00 00 02 00 FF ,luego cuando envies los comandos de lectura y escritura el ultimo byte de la direccion siempre sera 00, por ejemplo para leer el sector 2 seria 51 00 00 02 00 FF.

Bueno si tienes alguna duda me lo dices e intentare ayudarte.

#68  
serchy

Registrado: 03 Ene 2008
Mensajes: 9
Ubicación: Tucuman, Argentina
citar
Hola a todos muchachos!
monly, la verdad q no se bien que le pasa a la tarjeta, te comento, la tengo conectada a la pc mediante el puerto serie, de donde envio los comandos y el micro internamente tiene los 512+2CRC bytes a enviar cuando presiono un pulsador (que seria el "dato" a enviar)
Bien. inicializo la tarjeta todo ok
envio comando 24 de escritura, con la direccion 00 00 80 00 indicando el lugar donde empezará la escritura, la tarjeta me responde despues (creo q de dos bytes FF) con 00 indicando que esta todo ok. entonces ahi, envio los datos mas los 2 crc (FF). una vez esto... la tarjeta queda como muerta... no responde, mande lo que le mande, en algunos lados leí que se debe a que en el proceso de escritura no debe detenerse el clock en ningun momento...
Si me podrias mandar tu codigo para que le de un vistazo, me vendria de lujo... MUCHAS GRACIAS.

Ettneciv. tremendo codigo q t escribiste, la verdad es un poco engorroso. no te conviene al menos hasta q pruebes bien el funcionamiento, enviar los codigos uno a uno desde la pc? es solo una sugerencia

#69  
monly

Registrado: 06 May 2008
Mensajes: 8
citar
Hola serchy, antes de mandar los 512 bytes de datos tienes que mandar un token de inicio FE

yo envio FF FF FE despues de recibir el 00.

una vez enviados los datos y los bytes de crc tienes que esperar a recibir un 05 (al dato que recibas tienes que hacerle un and con 1f es la mascara, porque en el token de respuesta los tres primeros bits no nos interesan y reultado sera 05), que son datos aceptados y despues de recibirlo puedes esperar a que termine de escribir mandano ciclos de reloj y te ira contestando 00 ( bus ocupado ) hasta que recibas un ff ahi ya puedes deseleccionarla.

La secuencia completa seria:
CS en bajo
enviar comando
esperar en un bucle hasta recibir 00
mandar FF FF FE
mandar 512 bytes de datos
mandar 2 bytes de CRC (FF FF)
en un bucle esperar hasta recibir 05 (datos aceptados) ,antes de compararlo hazle un and con 1f
mandar ciclos de reloj en un bucle y esperar aque recibas datos distintos de 00
CS en alto
yo despues envio el comando 13 que es el status de la tarjeta y contesta R2 que son dos bytes y deben ser 00 00 indicando que no ha bido error, sino te indicara el error cad bit es un error diferente.

Ahora no te puedo enviar el codigo pero pruebalo y sino te funciona otro dia te lo pongo.

Un saludo.

#70  
timpepsi11

Registrado: 10 Jun 2008
Mensajes: 2
Ubicación: guatemala
citar
Salu2 a todos! quiero comentarles que estoy haciendo un proyecto en el cual necesito guardar datos en una memoria sd, por lo que les agradezco a todos por los comentarios que han puesto puesto que me van a ser de mucha ayuda! solo tengo una pregunta....por ejemplo...yo lo que tengo q guardar es texto...por lo que como se hace para q la memoria sd sepa q es texto?

chepe

P.d: nano1985 como podria hacer para que me enviaras la info que has encontrado?

 Responder



Google
 


 Temas de interés 
No hay mensajes nuevos enviar mensajes de texto sin usar el teclado del celular.
No hay mensajes nuevos Enviar video en vivo por internet
No hay mensajes nuevos Enviar comandos por RS232 en visual basic
No hay mensajes nuevos Enviar comunicacion via RS232 a servidor
No hay mensajes nuevos Contador de pulsos unido al microcontrolador DLP-245PB

Foros de Electronica
|| Cuestiones Elementales de Electrónica || Fuentes de alimentacion || Circuitos de radio || Diseño de circuitos en general ||
|| Sistemas de Audio: Preamplificadores, Ecualizadores || Amplificadores || Reparación || Discusión ||
|| Microcontroladores y sistemas embebidos || Circuitos logicos combinacionales y secuenciales || Interfaces y Programacion || Dudas en general || Sistemas de Video || PC Hardware || Telematica y comunicaciones || Tecnologias moviles || Software Electronico || Robotica, Domotica y Mecatronica || Autotrónica || Automatizacion, Electronica industrial y de Potencia || Documentacion, circuitos y esquemas || Donde Las Ideas Convergen... || Tutoriales y Manuales || Proyectos Prácticos ||