Si un borde de reloj coincide con el borde de salida de datos, ¿qué debe leer SPI?

3

Tengo un convertidor de analógico a digital que lee y envía datos en bordes descendentes. También tengo dos MCU: la FEZ Hydra y la FEZ Cobra. He notado que al usar el osciloscopio los datos del ADC y los datos del ADC son exactamente los mismos, sin embargo, al leer los datos en la computadora que han almacenado las MCU obtengo diferentes valores.

Dado que el ADC solo envía salidas en los flancos descendentes del reloj, cada vez que los bits de salida de datos cambian de 0 a 1, la Hidra lee en 1 mientras la cobra aún lee en 0; y cada vez que los bits de salida de datos cambian de 1 a 0, la Hidra lee en 0 y la cobra aún lee en 1. Parece que la Cobra no da suficiente tiempo entre el borde negativo del reloj y la lectura de la entrada para permitir para que la actualización suceda.

Estoy usando la biblioteca spi de microsoft. Mi pregunta es: ¿hay alguna forma de retrasar la función de lectura de SPI? ¿Cuál es el resultado razonable en esta situación que se supone para mí?

Nota: hay un retraso de 60 ns en el tiempo de acceso a los datos en el ADC.

    
pregunta user1084113

2 respuestas

4

Los periféricos SPI tienen la capacidad de seleccionar la polaridad y la fase del reloj con respecto a los datos, por lo que debe asegurarse de que los datos se lean en el borde correcto. Parece que los dos uC tienen una fase diferente. La página SPI Wiki (y cualquier otro tutorial SPI medio decente) tiene detalles:

No estoy seguro de cómo configurar las cosas con su hardware, pero la configuración relevante no debería ser demasiado difícil de encontrar.

    
respondido por el Oli Glaser
1

Estoy de acuerdo con la respuesta anterior. Los periféricos SPI generalmente tienen dos bits en algún lugar de los registros de control. Estos se denominan fase de reloj (como ya se mencionó) y polaridad de reloj . La fase del reloj determina si los datos se muestreando en el borde ascendente o descendente de SCK. La polaridad del reloj solo determina el estado de las transferencias de bytes intermedios de SCK (a algunos dispositivos no les importa esta opción).

A partir de su explicación, no estoy muy seguro de si setup O muestre sus datos en caer o en aumento edge. Al ver que ha dibujado una imagen con líneas en los bordes descendentes de la señal, supongo que desea que sus dispositivos muestren (lean) el valor en ese mismo borde. Eso es bastante poco convencional. Además, está en contradicción con su imagen.

El autobús funciona así.

  • configure el valor en un borde de SCK
  • probarlo en el otro

Por lo general, la configuración se realiza al caer y la muestra al aumentar.

Al final, corregir la polaridad de tu reloj y / o la fase del reloj probablemente solucionará tu problema.

    
respondido por el Dzarda

Lea otras preguntas en las etiquetas