Usando Logic Analyzer para SPI

1

Comencé mi proyecto de interconectar MicroSD Card con PIC32MX795F512L . Para comenzar con esto, primero hice un programa para probar SPI protocol en el que hice la prueba de bucle invertido acortando el SDO & línea SDI . Estaba funcionando bien. Luego seguí adelante y escribí un buen programa para la tarjeta de interfaz, pero incluso no pude inicializar la tarjeta. Así que pensé en comprar algunas herramientas como saleae logic y MicroSD Sniffer . Como es la primera vez que utilizo el analizador, entendemos que cuando iniciamos nuestro programa, al mismo tiempo tenemos que comenzar a capturar los datos en el analizador.

Con este entendimiento, probé UART :

while(1)
{
  putsUART1("Hello");
  DelayMs(500);
}

Capturé esto en el analizador y todo estaba bien. Ahora pensé en capturar el programa de prueba de SPI loopback pero estoy viendo algunos datos aleatorios en el analizador. El siguiente es el código para ello:

void initSPI(void)
{
SPI1BRG = 71; 
SPI1CONbits.MSTEN = 1; //MasterEnable
SPI1CONbits.CKE = 1;  //CKE on. CKP OFF
SPI1CONbits.ON = 1;  //SPI Module ON
}

unsigned char writeSPI(unsigned int b)
{

    SPI1BUF=b; // write to buffer for TX
    while( !SPI1STATbits.SPIRBF); // wait transfer complete
    return(SPI1BUF);

}

y en la función principal, después de llamar a initSPI , en while (1) estoy enviando datos al canal SPI:

while(1)
{
 x = writeSPI(0x12);
}

Estoy enviando 0x12 . Entonces, en el analizador MOSI(SDO) debería mostrar este valor, pero muestra algunos valores aleatorios. He conectado los pines correctamente y la configuración SPI en el analizador está de acuerdo con mi configuración en el código. Estoy capturando los datos para 1sec y velocidad en 24MS/s . También quiero saber cómo puedo verificar a qué frecuencia se está ejecutando el protocolo SPI. Cualquier ayuda.!

Aquí está la imagen del resultado del analizador

y la configuración del analizador para SPI

    
pregunta user007

1 respuesta

1

Recuerde que un analizador lógico no es más que un comparador rápido. ¿Qué hacen los comparadores? ¡Ellos comparan una tensión! Con una tensión de referencia. Luego se sincroniza y en el reloj se midió el canal si era alto o más bajo que el voltaje de referencia.

Entonces, tienes dos cosas para ajustar. El reloj, y la tensión de referencia.

  1. Reloj: ¿Cómo sabes que tu reloj es lo suficientemente rápido? Sigue muestreando más rápido, si ves más y más "bordes" entonces sabes que necesitas correr más rápido. Esto se aplica a una señal no sincronizada, para una señal temporizada como spi, es incluso más fácil. Como sabe que los datos vienen en grupos (generalmente 8 bits a la vez), todo lo que tiene que hacer es encontrar 8 bordes ascendentes y 8 bordes descendentes. Si parece que los bordes se están muestrean mal (es decir, solo hay 5 o menos muestras entre los relojes), deseará aumentar la velocidad de su muestra, por lo que obtendrá más muestras por reloj.

  2. Voltaje de referencia: debe configurar el voltaje de referencia en el nivel correcto. Compruebe sus niveles lógicos , si son 5V cmos, configúrelos en 2V. 3.3V TTL = 1.25V (o alrededor).

Una advertencia a esto es que todos los analizadores lógicos tienen memoria limitada (a excepción de la nueva serie 3000 de tektronix y keysight, 20M de memoria le dará mucho tiempo, como casi el infinito). Por lo tanto, normalmente no puede muestrear a la velocidad más rápida porque hay un compromiso entre la velocidad de muestreo y la cantidad de tiempo que duran sus muestras totales.

    
respondido por el laptop2d

Lea otras preguntas en las etiquetas