Tengo un convertidor de analógico a digital que lee y envía datos en flancos descendentes. También tengo dos MCU, FEZ Hydra y FEZ Cobra. Al usar el osciloscopio, noté que los datos que ingresan al ADC y los datos que salen del ADC son exactamente iguales, sin embargo, cuando leo los datos en la computadora que han almacenado las MCU, obtengo valores diferentes.
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, Hydra lee un 1 mientras que Cobra todavía lee un 0; y cada vez que los bits de salida de datos cambian de 1 a 0, Hydra lee un 0 y Cobra todavía lee un 1. Parece que Cobra no da suficiente tiempo entre el borde negativo del reloj y la lectura de la entrada para permitir para que suceda la actualización.
Estoy usando la biblioteca spi de microsoft. Mi pregunta es: ¿hay alguna forma de retrasar la función de lectura 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 datos en el ADC.
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 como si los dos uC tuvieran una fase diferente. La página SPI Wiki (y cualquier otro tutorial SPI medio decente) tiene detalles:
No estoy seguro de cómo configura las cosas con su hardware, pero las configuraciones relevantes no deberían ser demasiado difíciles de encontrar.
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 llaman fase de reloj (como ya se mencionó) y polaridad de reloj . La fase del reloj determina si los datos se muestrean en el flanco ascendente o descendente de SCK. La polaridad del reloj solo determina el estado de SCK entre transferencias de bytes (a algunos dispositivos no les importa esta opción).
Según su explicación, no estoy muy seguro de si configura O muestra sus datos en el borde descendente o ascendente . Al ver que ha dibujado una imagen con líneas en los bordes descendentes de la señal, supongo que desea que sus dispositivos muestreen (lean) el valor en ese mismo borde. Eso es bastante poco convencional. Además, está en contradicción con tu imagen.
El autobús funciona así.
Por lo general, la configuración se realiza al caer y la muestra al subir.
Al final, es muy probable que arreglar la polaridad y/o la fase del reloj resuelva el problema.
usuario1084113
Andy alias