Autor Tema: Nivel señal MISO en comunicación SPI  (Leído 5575 veces)

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

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Nivel señal MISO en comunicación SPI
« en: 13 de Febrero de 2011, 12:34:01 »
Hola,
Tengo una placa con un pic que comunica por SPI con un enc28j60 y con otro chip esclavo.

El ENC28j60 funciona, pero el otro esclavo no.

Me ha dado por mirar las señales del puerto SPI con el osciloscopio y he visto que la señal SCK y MOSI tienen un nivel de 3.3V, pero la MISO tiene un nivel de apenas 50mV, tanto cuando comunico con el ENC28J60 como cuando lo hago con el otro esclavo.

¿Saben si esto es normal? ¿O tendría que tener también un nivel de 3.3V en MISO?

Muchas gracias por la atención.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17764
    • MicroPIC
Re: Nivel señal MISO en comunicación SPI
« Respuesta #1 en: 13 de Febrero de 2011, 12:43:44 »
¿Será que alguno de ellos te está pisando la señal hacia masa?
Puedes probar anulando la configuración del SPI y haciendo output_high() en el pin correspondiente a MISO para ver si levanta o alguien le tiene cogido por el cuello..
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Nivel señal MISO en comunicación SPI
« Respuesta #2 en: 13 de Febrero de 2011, 12:50:45 »
A mi pasó algo parecido, la señal SPI se deformaba, se achataba. Bastó con desconectar el pin PGD o PGC del PICkit3 y la señal se encuadró como debió ser. Checa que en paralelo no haya nada que pueda deformarla.

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: Nivel señal MISO en comunicación SPI
« Respuesta #3 en: 13 de Febrero de 2011, 12:59:49 »
Gracias nocturno... el pin sube sin problemas a 3V cuando deshabilito el SPI y lo pongo en HIGH.

Gracias MIG, no tengo nada más en los pines de comunicación SPI (los he direccionado con PPS a unos pines que no usaba para nada).

Voy a probar a quitar una resistencia de 150R que tengo en la línea MISO, y que puse porque leí algo de que no venía mal para el ENC28J60 ponerla en SCK y en MOSI, pero que por error he metido también en la MISO.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6759
Re: Nivel señal MISO en comunicación SPI
« Respuesta #4 en: 13 de Febrero de 2011, 13:05:48 »
El pin SDO queda en alta impedancia mientras el dispositivo no este seleccionado mediante CS, cuando se lo selecciona y envía clock colocará en el pin el nivel lógico que le corresponda según datasheet.


El otro dispositivo, cual es?

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Nivel señal MISO en comunicación SPI
« Respuesta #5 en: 13 de Febrero de 2011, 13:05:59 »
No sé qué PIC estés usando, pero los dsPIC33 dan poquísima corriente en sus pines: 4mA. Los demás PICs dan hasta 25mA.

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: Nivel señal MISO en comunicación SPI
« Respuesta #6 en: 13 de Febrero de 2011, 13:18:07 »
He cambiado la resistencia por una de 0R y sigue  igual.

Doy por hecho que la señal en MISO debería ser de 3.3V ¿no? Por favor, confírmenme esto. Porque, como les digo, el ENC28j60 funciona.

El otro chip es un cc1101 y su CS está en alto... pero incluso desoldando este chip de la placa, en la comunicación con el ENC28j60 la tensión de MISO sigue siendo 20mV... pero funciona.


Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6759
Re: Nivel señal MISO en comunicación SPI
« Respuesta #7 en: 13 de Febrero de 2011, 13:22:03 »
Doy por hecho que la señal en MISO debería ser de 3.3V ¿no? Por favor, confírmenme esto. Porque, como les digo, el ENC28j60 funciona.

Entiendo que no. Cuando transfiera datos desde el ENC al PIC, colocará el nivel lógico que corresponda en cada ciclo de reloj y después alta impedancia.

Por ejemplo página 29 del datasheet del ENC.


Ahora, cuando se hace de PIC a ENC, al realizar read() que valor colocas para enviar? Y sin generación de clock es alta impedancia.


Saludos!
« Última modificación: 13 de Febrero de 2011, 13:24:18 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: Nivel señal MISO en comunicación SPI
« Respuesta #8 en: 14 de Febrero de 2011, 05:33:32 »
Vaya, creo que entonces no he entendido cómo funciona la comunicación SPI.

Yo creía que el maestro siempre controlaba el reloj SCK, tanto en las operaciones de lectura como en las de escritura y que en cada ciclo de SCK ocurrían dos cosas:

* El maestro pone un bit en el MOSI (que está configurado como salida en el maestro) para que el esclavo lo recoja.
* El esclavo pone a la vez un bit en el MISO (que está configurado como entrada en el maestro) para que el maestro lo recoja.

Por este motivo yo esperaba obtener en MISO una señal de 3.3V.

¿No funciona así el SPI?

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Nivel señal MISO en comunicación SPI
« Respuesta #9 en: 14 de Febrero de 2011, 09:37:17 »
  En uno de los mensajes mencionás que la tensión en el pin MISO (me imagino será MasterImputSlaveOutput) es de 20mV pero funciona igual. Lo que yo no entiendo es como hace el PIC para interpretar un nivel tan bajo como si fuera un 1 lógico.

  ¿Estás midiendo siempre con la misma punta y siempre en el mismo canal del osciloscopio?

  Sería bueno que subas el circuito para ver si alguien detecta algo que se te esté pasando por alto.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: Nivel señal MISO en comunicación SPI
« Respuesta #10 en: 15 de Febrero de 2011, 03:43:46 »
De momento no dispongo de otro osciloscopio, y el  que estoy usando es el Velleman portátil de un sólo canal.
El finde probaré con mi otro osciloscopio.

Entretanto me he implementado las rutinas del SPI por software y he conseguido comunicarme bien con el CC1101, antes estaba usando el SPI por hardware.

Sospecho que el problema puede estar en la asignación que he hecho de los pins mediante PPS o, más probablemente, en que los PIC usan unos modos de comunicación SPI (modo00, modo01, ...) que no coinciden con los modos estándar de  la norma SPI...

Seguiré informando.

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: Nivel señal MISO en comunicación SPI
« Respuesta #11 en: 15 de Febrero de 2011, 06:47:32 »
He encontrado este documento de microchip en el que se explica con claridad el asunto de los modos SPI: http://ww1.microchip.com/downloads/en/devicedoc/spi.pdf
Especialmente interesante es la página 25, en la que se establece la relación entre los modos estándar de SPI y el nombre que les ha dado Microchip en su lenguaje.

Y cruzándolo con esta nota de aplicación de los cc1101 de TI: http://focus.ti.com/lit/an/swra112b/swra112b.pdf

Creo entender que el modo SPI en el lenguaje de microchip que debiera usar es....MODE_01 (que es el 0,0 en el lenguaje estándar SPI)

Y la lectura del dato debería realizarla con el flanco de subida del CLK, es decir en el medio del periodo del CLK, es decir con SMP=0

Habrá que probarlo...

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Nivel señal MISO en comunicación SPI
« Respuesta #12 en: 15 de Febrero de 2011, 09:43:50 »
De momento no dispongo de otro osciloscopio, y el  que estoy usando es el Velleman portátil de un sólo canal.
El finde probaré con mi otro osciloscopio.


  No creo que sea necesario, ya que si todas las mediciones fueron hechas con el mismo instrumento y la misma punta, es seguro que no es un error del instrumento.

  Tomando como referencia la figura 9-2 del datahseet del PIC16F877, creo que la configuración de los bits del SPI tendría que ser

CKP = 0, CKE = 1, SMP = 0;

  Aparentemente hemos llegado a la misma conclusión. Habría que ver los modos SPI soportados por el ENC28j60, tal vez puedas trabajar con los 2 integrados con el modo permitido por el CC1101. De no ser así vas a tener que usar un SPI para cada integrado.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: Nivel señal MISO en comunicación SPI
« Respuesta #13 en: 15 de Febrero de 2011, 10:18:21 »
Muchas gracias angel gris por confirmar mis conclusiones... ven más 4 ojos que 2.

Hemos llegado a las mismas conclusiones y, sin embargo, no funciona.

Me huelo que hay algo raro en el timing de las rutinas SPI hardware que no le gusta al CC1101... pero hasta que no tenga un osciloscopio con más canales no podré confirmarlo. A ver si el finde puedo contaros la resolución del misterio.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Nivel señal MISO en comunicación SPI
« Respuesta #14 en: 15 de Febrero de 2011, 11:51:18 »
Muchas gracias angel gris por confirmar mis conclusiones... ven más 4 ojos que 2.

Hemos llegado a las mismas conclusiones y, sin embargo, no funciona.

Me huelo que hay algo raro en el timing de las rutinas SPI hardware que no le gusta al CC1101... pero hasta que no tenga un osciloscopio con más canales no podré confirmarlo. A ver si el finde puedo contaros la resolución del misterio.

  Teniendo en cuenta el datasheet del PIC16F877 las posibles velocidades para el SPI son FOSC/4, FOSC/16, FOSC/64 y Timer2 OutPut/2.

  Esto es lo que dice en la página 3 del documento que mostrás respecto del C1101 "If no delay is inserted between bytes, max clock speed is 9 MHz for single access (see Figure4) and 6.5 MHz for burst access (Figure 5)."

  Tal vez allí esté el kid de la cuestión.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas