Estoy tratando de usar el componente SPI0 de un Zynq XC7Z010 para leer datos de un codificador rotatorio de 12 bits que usa un protocolo SSI.
- Tengo un pequeño proyecto de ejemplo configurado en Vivado que permite que SPI0 use los puertos EMIO y establece los pines que quiero usar.
- También tengo el controlador xspips funcionando y puedo recibir datos del codificador.
-
El problema al que me estoy enfrentando es que solo pude configurar una señal de reloj que está inactiva, mientras que el codificador espera un reloj alto inactivo.
- Debido a esto, los primeros bits recibidos son inutilizables, y tuve que hacer un poco de manipulación de bits para recuperar estos bits (el codificador vuelve a repetir los mismos datos después de la transmisión de 12 bits).
Con un osciloscopio probé que la señal de reloj enviada siempre está inactiva, ya sea que la opción CLK_ACTIVE_LOW esté configurada o no para el SPI, por lo que llegué a la conclusión de que esa es solo la forma en que el Zynq interpreta la señal del reloj.
¿Cómo puedo tener una señal de reloj que sea alta de forma predeterminada? ¿Tengo que invertirlo manualmente en el envoltorio VHDL generado por Vivado o hay una solución más simple?
Señal de reloj medida para una transferencia de 2 bytes cuando ACTIVE_LOW está habilitado:
ycuandoestádeshabilitado: