Uso de Logic Analyzer para SPI

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

Con este entendimiento, probé un UART:

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

Capturé esto en el analizador y todo estuvo bien. Ahora pensé en capturar el programa de prueba de bucle invertido SPI, pero veo 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 initSPI, mientras (1) estoy enviando datos al canal SPI:

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

estoy 0x12enviando 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 de SPI en el analizador está de acuerdo con mi configuración en el código. Estoy capturando los datos para 1secuna velocidad de 24MS/s. También quiero saber cómo puedo verificar a qué frecuencia se está ejecutando el protocolo SPI. Alguna ayuda.!

Aquí está la imagen del resultado del analizador.Imagen del resultado del analizador

y configuración del analizador para SPIajustes del analizador para SPI

Bueno un poco de cacería, he encontrado como chequear frecuencia

Respuestas (1)

Recuerde que un analizador lógico no es más que un comparador de reloj rápido. ¿Qué hacen los comparadores? ¡Comparan un voltaje! Con un voltaje de referencia. Luego, se cronometra y, en el reloj, se mide el canal si es más alto o más bajo que el voltaje de referencia.

Entonces, tienes dos cosas que ajustar. El reloj y el voltaje de referencia.

  1. Reloj - ¿Cómo sabes que tu reloj es lo suficientemente rápido? Siga muestreando más rápido, si ve más y más "bordes", entonces sabe que necesita correr más rápido. Esto se aplica a una señal sin reloj, para una señal con reloj como spi, es aún 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 flancos ascendentes y 8 flancos descendentes. Si parece que los bordes están mal muestreados (es decir, solo hay 5 o menos muestras entre relojes), querrá aumentar la velocidad de su muestreo, para obtener más muestras por reloj.

  2. Voltaje de referencia: debe establecer el voltaje de referencia en el nivel correcto. Verifique sus niveles lógicos , si es cmos de 5V, configúrelo en 2V. 3,3 V TTL = 1,25 V (o más o menos).

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 keyight, 20M de memoria le darán mucho tiempo, casi infinito). Por lo tanto, generalmente no puede muestrear a la velocidad más rápida porque existe una compensación entre la velocidad de muestreo y el tiempo que duran sus muestras totales.

Creo que el reloj y el voltaje son correctos. El voltaje en los pines es 3.3 y estoy viendo los 8 relojes correctos en el analizador con una frecuencia exacta de 250 khz. Pero aún MOSI no muestra los datos correctos. Cuando envío 0x05, muestra 0xB0 o algún otro valor, pero no 0x05. Me estoy perdiendo de algo.?
Si no ves lo que esperas, es posible que tengas un problema con tus líneas digitales o tu software. si es su software, no puedo ayudarlo allí, soy alérgico al software y también creo que es bueno que las personas hagan su propia depuración para que puedan aprender. Si lo que le preocupa son las líneas digitales, obtendría un osciloscopio y vería si obtiene formas de onda limpias y nítidas y sin zumbidos o transiciones lentas. Tiene especificaciones de tiempo para cumplir con su IC de envío y recepción, cada uno tiene niveles de transición donde detectan una condición de encendido o apagado.