Lecto-grabador de tarjetas MMC, SD, MicroSD con PIC16F877A
| #61 |
| #62 |
|
serchy
|
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
|
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
|
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
|
saludos a todos compañeros, si alguien podria subir el esquema circuital del proyecto seria excelente, saludos amigos
|
|||||||||||
|
|
||||||||||||
| #66 Espero q ayude |
|
Ettneciv
|
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 |
|||||||||||
|
|
||||||||||||
| #67 |
|
monly
|
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
|
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
|
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
|
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? |
|||||||||||
|
|
||||||||||||
|
| Temas de interés | |
|---|---|
| enviar mensajes de texto sin usar el teclado del celular. | |
| Enviar video en vivo por internet | |
| Enviar comandos por RS232 en visual basic | |
| Enviar comunicacion via RS232 a servidor | |
| 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 || |
Site Map
© Foros de Electrónica
Comunidad Internacional de Electrónicos
Powered by phpBB © 2001, 2005 phpBB Group
Acerca de || Política de privacidad
Generada en = 0.12760 segundos, Consultas = 15
© Foros de Electrónica
Comunidad Internacional de Electrónicos
Powered by phpBB © 2001, 2005 phpBB Group
Acerca de || Política de privacidad
Generada en = 0.12760 segundos, Consultas = 15

