Autor Tema: Hoy le toca el turno al SPI.  (Leído 1108 veces)

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

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Hoy le toca el turno al SPI.
« en: 03 de Marzo de 2019, 13:43:26 »
Tengo un dispositivo Slave en cuyo datasheet me ponen este diagrama de timming:

 

* Slave Spi timming.jpg
(170.45 kB, 1275x1023 - visto 283 veces)


 Y el datasheet del PIC32MX me pone este diagrama de modos:

 

* P32_spi_clock_mode.jpg
(185.19 kB, 880x1060 - visto 214 veces)


  Observando ambos, necesito que el clock esté siempre a nivel alto y que se ponga a cero cuando comience una transferencia, por lo tanto CKP = 1.
  El flanco donde los datos tienen que ser leidos es en el de subida, por lo tanto deduzco que CKE = 1.
  Por ultimo, el dato es sampleado a mitad del mismo por lo que deduzco que SMP = 1.

   Pues bien. Con esta configuración, si yo envío un comando al slave, éste lo recibe y responde (lo veo en el osciloscopio).

    Pero al leer el buffer de esta transferencia solo me lo da bien cada 15 intentos aproximados, a veces algo mas, a veces algo menos. Lo que hago es meter dentro de un while las siguientes acciones:

   - Envío byte 0b11000000   (esto significaría para el slave "Dame tu status").
   - Hago lectura para vaciar el buffer.
   - Envío 0x00 para que el slave reciba sus 8 clock y así me envíe su respuesta.
   - Leo la respuesta.
   - Imprimo la respuesta en el terminal usart.

    Fin del while.

   La respuesta que espero recibir del slave sería 0x04.   

  Pues bien, la recibo bien una vez de cada 15 o 16 intentos, el resto de las veces recibo 0xFF

  Ahora viene lo bueno.  A prueba y error (me da coraje trabajar así pero es que ya no sabía por donde meterle mano), cambiando CKP,CKE Y SMT he conseguido una respuesta siempre valida en todos los intentos, es decir, que funcione a la perfección. Para eso he tenido que poner CKE = 1; CKP = 0; Y SMP = 1;

  Así funciona perfecto.

  Pero entonces NO es lo que figura en los diagramas o yo no lo estoy interpretando bien del todo.. 

  Por eso lo pregunto. Me gustaría poder comprender por qué con al configuración que yo "CREO" correcta observando los diagramas NO funciona y sin embargo con otra obtenida a base de prueba y error he conseguido que funcione con una combinación que, volviendo a mirar los diagramas NO debería de funcionar.......

  Ay dios, que sencillamente complejo es todo esto...

   


 
 

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Hoy le toca el turno al SPI.
« Respuesta #1 en: 03 de Marzo de 2019, 15:31:49 »
Me autorrespondo:Está todo bien, lo que pasa es que creía que las lineas discontinuas verticales del diagrama del PIC eran las maestras, es decir, donde se producía el evento y no es así, las lineas son simplemente divisiones de bits. El evento se produce entre ellas.   :oops: :oops: