Comencé mi proyecto de interfaz MicroSD Card
con PIC32MX795F512L
. Para comenzar con esto, primero hice un programa para probar SPI protocol
en 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 0x12
enviando 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 1sec
una velocidad de 24MS/s
. También quiero saber cómo puedo verificar a qué frecuencia se está ejecutando el protocolo SPI. Alguna ayuda.!
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.
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.
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.
usuario007