Autor Tema: Problemas con memoria spi  (Leído 2471 veces)

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

Desconectado adso

  • PIC10
  • *
  • Mensajes: 2
Problemas con memoria spi
« en: 13 de Marzo de 2007, 15:28:17 »
Hola a todos.

Estoy haciendo una aplicacion para un dspic 30f4013. El caso es que quiero guardar unos historicos en una memoria spi y no la logro hacer funcionar. ¿Alquien ha tenido alguna esperiencia con este tipo de memorias?. Llevo un rato pegandome con ella y lo que no logro es hacer que me mande algo, es decir, me falla la lectura. La escritura supuestamente la hago bien, pero claro, supuestamente, porque todo depende de si lo que yo le mando ella lo entiende. Supuestamente son las instrucciones, pero claro... nunca se sabe, jejeje. Bueno el caso es ese que creo que la escritura la hago bien y es la lectura lo que me falla. Si alguien ha trabajado con ellas y me puede decir como la hecho andar, que memoria uso y eso, pos yo se lo agradeceria. Muchas gracias a todos, un saludo.

Desconectado CheKeBo

  • PIC10
  • *
  • Mensajes: 18
Re: Problemas con memoria spi
« Respuesta #1 en: 13 de Marzo de 2007, 16:45:12 »
Hola, yo tuve un problema similar con el SPI pero con otro dispositivo, a ver si esto te ayuda.

Cuando escribes un dato en el puerto SPI el módulo utiliza ese data para realizar la lectura tambien, entonces el truco para leer es enviar un dato por el SPI (lo que se llama comunmente un dummy) para obligar la lectura del puerto.

Te pongo el codigo que yo utilizo para realizar la lectura.

En este ejemplo tengo que leer 16bits desde una posición dada.

// le decimos que vamos a leer
spi_in_out(READ);                   // enviamos byte0 (address y read)

spi_in_out(spi_address_h);   // enviamos byte1 (adress_h datos)
spi_in_out(spi_address_l);   // enviamos byte2 (address_l datos)

// a partir de ahora tenemos que leer
byteh=spi_in_out(0x00);   // recibimos la parte alta, enviamos un dummy como 0x00
bytel=spi_in_out(0x00);   // recibimos la parte baja, enviamos un dummy como 0x00

spi_stop();         // fin de trama
// montamos la palabra de 16bits
aux_spi_receive=byteh;
aux_spi_receive=aux_spi_receive<<8;
aux_spi_receive=aux_spi_receive|bytel;


La rutina que lee y escribe es la siguiente:

unsigned char spi_in_out(unsigned char dato_a_enviar)
{
// enviamos dato por el SPI
SPI2BUF=dato_a_enviar;   // sacamos el dato

while(!IFS1bits.SPI2IF);   // esperamos a que se haya enviado el byte
IFS1bits.SPI2IF=0;

return(SPI2BUF);                       // devolvemos el dato leido
}


Espero que te sirva de guia.

Un saludo

Chekebo

Desconectado adso

  • PIC10
  • *
  • Mensajes: 2
Re: Problemas con memoria spi
« Respuesta #2 en: 14 de Marzo de 2007, 07:20:03 »
Gracias CheKeBo!!!

Ya lo he solucionado, en verdad ya hacia lo que tu me dijistes. Vi por ahi en un post anterior algo acerca de memorias spi y venia a decir lo mismo que tu, asi que me asegure y lo hice. Además, me leí el datasheet del dspic y decia lo que tu me has dicho. No obstante probe tus funciones y no funcionaron. El problema era físico, los puñeteros contactos, yo creia que estaban bien soldados, pero va a ser que no. Un poquito de estaño ha arreglado el problema, pero como he dicho, muchas gracias por tu ayuda.