Portar código SPI de (Intel) Galileo a Edison - Arduino

Actualmente estoy trabajando para portar algunos bocetos de Arduino de Intel Galileo que usan SPI (usando un prototipo de placa Arduino Breakout).

No he podido hacer que funcione hasta ahora, pero he usado un osciloscopio para ver lo que realmente está haciendo el SPI.

He observado que las señales de reloj SPI de Galileo y Edison tienen una forma diferente y también un voltaje diferente (observe las escalas en la parte superior de la pantalla). También he notado que el reloj de Galileo está encendido todo el tiempo mientras que el de Edison se apaga y enciende cada pocos segundos.

osciloscopio

El de arriba es el Edison, y el de abajo es el Galileo.

Como experto en software, realmente no sé qué está pasando aquí. ¿Alguien sabe qué podría estar causando esto? ¿Es esto algo que puedo cambiar en el software o es definitivamente una cuestión de hardware? ¿Y esto sería causado por el propio Edison o por la placa de conexión?

Gracias, ¡cualquier ayuda u orientación es apreciada!

Editar - Más información

A continuación se muestran algunas imágenes más de los relojes que funcionan a diferentes frecuencias: NOTA: Galileo (comportamiento deseado) ahora está en la parte superior y Edison está en la parte inferior. Las escalas se han ajustado para que sean iguales.

125 khz

Imgur

1Mhz

Imgur

4Mhz

Imgur

Parece que el reloj se distorsiona cada vez más en el Edison a medida que aumentamos la frecuencia. ¿Podría ser esto lo que está causando nuestros problemas? Ahora el sobreimpulso es tan dominante que parece estar en un nivel lógico más alto.

¿Son sondas de alcance o cables BNC aleatorios? Si es lo último, la mitad de su problema puede estar ahí.

Respuestas (2)

Realmente necesita determinar si todo ese exceso y timbre que se muestra en el osciloscopio es real, o simplemente un artefacto causado por la forma en que está probando el circuito. Sospecho que es lo último, así que asegúrese de tener una conexión a tierra sólida, sus sondas estén debidamente compensadas y/o tome prestadas/compre algunas mejores.

En general (ignorando el timbre y centrándose en la forma subyacente de la forma de onda), parece que Edison tiene un controlador de reloj más débil que Galileo y, de hecho, es tan débil a 4 MHz que la amplitud general se reduce considerablemente. Si conduce un autobús relativamente largo o muy cargado, es posible que el Edison necesite amortiguadores externos para el reloj y las líneas MOSI.

Usando una ruptura diferente, la señal del reloj está bien, así que estoy bastante seguro de que no tiene que ver con la forma en que la estamos probando.
Lo siento, no sé qué significa "ruptura" en este contexto. Pero si cree que el timbre es real, entonces definitivamente necesita deshacerse de él, probablemente usando alguna combinación de terminadores en uno o ambos extremos de su bus. Tal timbre se verá como bordes de reloj adicionales para los esclavos SPI, dejándolos desincronizados con respecto al maestro.

SPI por sí mismo no especifica un nivel de voltaje (puede ser de 1 V, puede ser de 100 V incluso si eso no es muy común). Si desea que sus dispositivos se comporten de la misma manera, necesitará un traductor de voltaje (también se les llama traductores de nivel o cambiadores de nivel). Probablemente no podrá cambiar esto en el software.

La "señal de aumento lento" que ve podría provenir de alguna capacitancia en sus líneas de datos, esto sería típico para I2C donde solo un pull-up débil se encarga de una señal alta y la línea solo se reduce.

No veo a qué frecuencia está conduciendo su señal. ¿Podría especificar esto?

Para SPI no importa si el reloj está siempre encendido o solo cuando se está produciendo alguna comunicación. La comunicación es válida solo cuando la línea CS está activa, todo lo demás debe ignorarse.

El exceso o el aumento lento que ve también podría provenir de su sonda de alcance. Asegúrese de que su sonda coincida con su alcance.

Ok, entonces, ¿la diferencia en la señal afectará si la comunicación es exitosa o no? El Galileo (abajo) funciona como se desea, ¿necesitaré algún hardware para hacer que el Reloj Edison tenga una señal ascendente lenta para que esto funcione?
También creo que estaba manejando esto a 0.125 Mhz solo para poder ver la forma de las señales del reloj en el osciloscopio. (En realidad, lo conduciremos mucho más rápido)
Sí, afectará la comunicación (especialmente los diferentes niveles de voltaje). Debe tener cuidado de no exceder los niveles de voltaje especificados en la hoja de datos en un momento dado. La señal de aumento lento es realmente mala, lo que normalmente querrías sería (idealmente) un rectángulo. Excepto por el sobreimpulso en la señal superior, parece estar bien, pero el nivel de voltaje es más alto de lo que su dispositivo conectado podría manejar.
Deberá prestar atención a la calidad de la señal una vez que aumente la velocidad. 125kHz es bastante bajo. Una vez que suba, su señal se verá diferente. Asegúrese de que en el momento en que se muestrea la señal (por lo general, borde ascendente o descendente de SCK), sus líneas de datos (MISO/MOSI) hayan tomado el valor deseado.
Entonces, ¿crees que el sobreimpulso en el edison podría estar rompiendo cosas? Lo conecté de nuevo (Esta vez el Galileo está en la parte superior, Edison está en la parte inferior) Aquí hay 0.125khz nuevamente, y también [1mhz]()
Lo siento, aquí está el enlace de 1mhz ...
Tenemos la intención de impulsar el SPI a 4 MHz (o tal vez incluso más). ¿Podría ser la distorsión al principio y al final de los pulsos lo que hace que no funcione?
A 4 mhz parece que el "sobreimpulso" distorsiona tanto la señal del reloj que parece estar en un nivel lógico más alto: 4 mhz
Después de mirar estas señales: Algo está definitivamente mal. Supongo que tienes algo mal conectado. ¿Podría publicar los esquemas correspondientes? Con 4MHz la señal debería ser bastante limpia. Lo que ves es todo tipo de zumbidos y distorsiones. ¿Ha intentado deshabilitar todos los dispositivos que están conectados a su SPI para ver si tal vez algún dispositivo interfiere con Edison/Galileo. ¿El SPI en cuestión es una implementación de software o está hecho en hardware (recuerdo haber leído algo sobre tener solo una implementación de SW en el pasado)