Autor Tema: AYUDA con funcion spi_read()  (Leído 2590 veces)

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

Desconectado JorgitoFRyOle

  • PIC12
  • **
  • Mensajes: 79
AYUDA con funcion spi_read()
« en: 10 de Noviembre de 2004, 11:12:00 »
Hola fenomenos:

Mi duda es que mision realiza la funcion spi_read() en el siguiente codigo:

BYTE read_ext_eeprom(EEPROM_ADDRESS address) {
   BYTE data;

   rotate_left(&address,1);
   output_high(EEPROM_SELECT);
   spi_write(0x18|(address&1));
   spi_write(address);
   data=spi_read(0);
   output_low(EEPROM_SELECT);

   return(data);
}

Este codigo es uno de los ejemplos que trae el compilador ccs y estoy intentando comprenderlo para que me pueda servir de ayuda

Se que la funcion spi_read() leera un dato para ponerlo en el  bus spi pero lo que no entiendo es el significado que alcanza dicha funcion al pasarle un 0 como argumento como en este caso

Gracias amig@s

Desconectado JacoPastorius2004

  • PIC10
  • *
  • Mensajes: 42
RE: AYUDA con funcion spi_read()
« Respuesta #1 en: 10 de Noviembre de 2004, 15:17:00 »
Hola!

Por lo que veo esa funcion es para poder leer un dato desde una eeprom externa; y para ello se comunica via interface serial SPI (MOSI, MISO, CLK y /SS).

Generalmente para leer un dato via SPI lo que se hace es escribir un dato "dummy" que no sirve para nada, en este caso (0) para arrancar la señal de CLK en el PIC (Master), ya que esta interface es full duplex, osea mientras se envia un dato desde el Master hacia el Slave se esta recibiendo un dato desde el Slave hacia el Master, en el mismo momento.
Pero para que toda comunicacion se comience es necesario que la comience el Master colocando un dato en la pata MOSI del PIC para que arranque el CLK.

Cuando quiero escribir un dato sobre un periferico: escribo la direccion y la envio (se arranca el CLK), luego escribo el dato y lo envio (se arranca el CLK).
Cuando quiero leer un dato desde un periferico: escribo la direccion y la envio (se arranca el CLK), luego escribo un dato "dummy" seria el (0) o cualquier cosa y lo envio (se arranca el CLK), despues solo me queda leer el dato que recibi.

Conclusion: read(0) lo que hace es mandar un cero por pin MOSI para activar la señal CLK de la SPI y poder recibir un dato desde el SLAVE por pin MISO.

Espero que lo entiendas!

PD:
MOSI = Master Out Slave In
MISO = Master In Slave Out
CLK = señal de reloj



Desconectado JorgitoFRyOle

  • PIC12
  • **
  • Mensajes: 79
RE: AYUDA con funcion spi_read()
« Respuesta #2 en: 10 de Noviembre de 2004, 20:45:00 »
Gracias Jaco

Acabo de ver tu respuesta, eres un crack. Sinceramente, mu buena explicacion. Habia leido una informacion que estaba en ingles y mi propia traduccion era que la funcion de esa forma servia para obtener el reloj, x lo que veo mi traduccion no iba tan mal, pero ahora lo entiendo y antes no, esa es la diferencia

Muxas Gracias