Acabo de recibir un analizador lógico Saleae y lo estoy usando para hackear una batería de Guitar Hero . La placa principal dentro de la batería se comunica con otra placa secundaria mediante SPI. Cuando entro en la conversación, veo esto:
El negro es MOSI, el marrón es MISO, el rojo es CLOCK y el naranja es HABILITAR/selección de esclavo.
Me doy cuenta de dos cosas extrañas que suceden aquí:
¿Alguien tiene una idea de lo que está pasando aquí? ¿Los diseñadores de la placa se volvieron perezosos o hice algo mal al capturar los datos?
Detalles:
Aquí hay otra vista, ampliada:
Obviamente, ninguna de estas imágenes proporciona mucha información sobre lo que realmente se "dice", ya que no acerqué lo suficiente. Pero creo que son suficientes para entender mi punto. Si desea una imagen diferente, solo pregunte.
EDITAR
Kris sugirió que la línea de habilitación se use para sondear la placa esclava en el muestreo. Esto tiene sentido. Mira esta captura de pantalla:
Las pequeñas burbujas negras con contornos rojos son instancias en las que el software pudo decodificar una transmisión SPI. Estos solo ocurren cuando la línea de habilitación es baja, lo cual sigue lo que sugirió Kris.
Creo que el autobús que estás viendo simplemente tiene múltiples esclavos. Comparten MISO, MOSI y CLK, pero tienen líneas de selección de esclavos dedicadas para cada uno de ellos. La señal ENABLE en sus formas de onda es una de esas selecciones esclavas. Puede buscar otras selecciones de esclavos en los pines del chip maestro si desea probar esta hipótesis.
Observe cómo las señales parecen cambiar de polaridad de un esclavo a otro (más notable en el reloj). Tal vez diferentes esclavos usen diferentes modos SPI .
Las formas de onda parecen repetirse con un período determinado, lo que indicaría que el maestro consulta a los esclavos uno tras otro en un bucle.
Thorn tiene toda la razón. Lo que estás viendo es bastante normal.
En primer lugar, se pueden conectar varios periféricos a un bus SPI. Todos comparten las líneas MOSI, MISO y CLK. Pero cada uno tiene su propia línea CS. (Solo por simplicidad, aquí no he mostrado la línea MISO)
Si la MCU quiere enviar un byte a ADC1, primero baja CS1. Luego envía 8 pulsos de reloj en la línea CLK mientras escribe los bits de datos en la línea MOSI. Mientras esto sucede, CS2 y CS3 permanecen altos.
Para enviar un byte a cada ADC, uno podría ver una forma de onda como la siguiente:
Tu mismo lo dijiste:
Detalles:
Capturado a 4 MHz El reloj funciona a 2 MHz, cuando en realidad está funcionando
También hay algo llamado Frecuencia de Nyquist , o Límite de Nyquist. Básicamente dice que la frecuencia más alta que puede ver es menos de la mitad de la frecuencia de muestreo. Entonces, si su frecuencia de muestreo es de 4 MHz, solo puede ver frecuencias de menos de 2 MHz. Hay algo importante aquí en lo que la mayoría de la gente se equivoca. Puede ver frecuencias hasta, pero sin incluir , la mitad de la frecuencia de muestreo. Entonces, a 4 MHz, no puede ver correctamente las frecuencias de 2 MHz.
El efecto secundario de esto también se llama "aliasing". Lo que esto significa en términos prácticos es que si está mirando una señal que está cerca, pero no exactamente a 2 MHz, entonces parecerá que la señal va y viene. Por un tiempo ese reloj estará ahí, luego se irá. Esto es lo que creo que está pasando en tus fotos, donde el reloj a veces no está ahí cuando creo que debería estar. Algo similar también puede suceder con sus datos.
Para obtener datos confiables para depurar esto, debe tener al menos 4x y, a veces, 16x de su frecuencia máxima. Entonces, para un reloj de 2 MHz, debe capturar datos de 8 a 32 MHz.
kris bahnsen
Chris Laplante
Chris Laplante
Espina
jon l
Espina