Autor Tema: SPI por hardware-lectura de pagina  (Leído 2672 veces)

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

25javier

  • Visitante
SPI por hardware-lectura de pagina
« en: 01 de Diciembre de 2005, 17:27:00 »
Hola estoy tratando de leer una memoria spi ,usando el modulo spi del 18f452,no tengo problemas para leer y escribir direcciones particualres de memoria pero cuando trato de leer una pagina entera solo puedo leer el primer dato,
yo hice un polling con spi_read(0) para recibir los demas datos,pero parece que no genera los clocks para que la memoria siga mandando los datos!!!??alquin me puede dar una mano?
aca los ejemplos,el que me anda y el que no...

ESTO ANDA BIEN

output_low(EEPROM_SELECT);
delay_ms(5);
spi_write(3) ;       //comando leer
spi_write(5);       //3 bytes direccion
spi_write(0);
spi_write(0);   //byte mas significativo
value= spi_read(0); //         leo contenido direccion 5
output_high(EEPROM_SELECT);
delay_ms(300);

AHORA SI QUIERO LEER DESDE LA POSICION 5 A LA 10

output_low(EEPROM_SELECT);
delay_ms(5);
spi_write(3) ;       //comando leer
spi_write(5);       //3 bytes direccion
spi_write(0);
spi_write(0);   //byte mas significativo
 for (i=0; I<=5 ;i++){
recib = spi_read(0);} // datos los cargo en recib
output_high(EEPROM_SELECT);

for (i=0; i<=5; i++){
printf("valor = %u
",recib);}  //NO ANDA, RECIBE SOLO EL DATO DE LA DIRECCION 5
}


Desconectado pablofer78

  • PIC10
  • *
  • Mensajes: 20
Re: SPI por hardware-lectura de pagina
« Respuesta #1 en: 04 de Diciembre de 2007, 12:48:15 »
hola
yo estoy tratando de comunicar por hardware el pic con la memoria ..... si podes por favor me sera de gran ayuda si me podes pasar el codigo en c dado q lo q estoy haciendo no me anda
muchas gracias

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: SPI por hardware-lectura de pagina
« Respuesta #2 en: 04 de Diciembre de 2007, 15:41:18 »
Hola estoy tratando de leer una memoria spi ,usando el modulo spi del 18f452,no tengo problemas para leer y escribir direcciones particualres de memoria pero cuando trato de leer una pagina entera solo puedo leer el primer dato,
yo hice un polling con spi_read(0) para recibir los demas datos,pero parece que no genera los clocks para que la memoria siga mandando los datos!!!??alquin me puede dar una mano?
aca los ejemplos,el que me anda y el que no...

ESTO ANDA BIEN

output_low(EEPROM_SELECT);
delay_ms(5);
spi_write(3) ;       //comando leer
spi_write(5);       //3 bytes direccion
spi_write(0);
spi_write(0);   //byte mas significativo
value= spi_read(0); //         leo contenido direccion 5
output_high(EEPROM_SELECT);
delay_ms(300);

AHORA SI QUIERO LEER DESDE LA POSICION 5 A LA 10

output_low(EEPROM_SELECT);
delay_ms(5);
spi_write(3) ;       //comando leer
spi_write(5);       //3 bytes direccion
spi_write(0);
spi_write(0);   //byte mas significativo
 for (i=0; I<=5 ;i++){
recib = spi_read(0);} // datos los cargo en recib
output_high(EEPROM_SELECT);

for (i=0; i<=5; i++){
printf("valor = %u

",recib);}  //NO ANDA, RECIBE SOLO EL DATO DE LA DIRECCION 5
}



Primero:
Que memoria quieres leer??

Segundo:
Dependiendo del tipo de memoria, la lectura por bloques es mas compleja que  usar solo SPI_read()

Tercero:
Prueba de cambiar esto:
Citar
recib = spi_read(0);} // datos los cargo en recib

por esto:
Código: [Seleccionar]
recib = spi_read(i);} // datos los cargo en recib
ya que estas tratando de leer utilizando un indice pero pones el valor en cero, entonces es posible que no te funcione y solo lea la primer posicion, que es a la única a la cual apuntas...

Eso sí, la lees 5 veces seguidas... :D :D :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.


 

anything