¿Puede el esclavo SPI funcionar con una configuración de fase de reloj incorrecta?

0

En nuestra placa de prototipos, tenemos un ADC basado en SPI de 16 bits [ad 7798] y un conmutador basado en SPI [adg1414].

Aunque otro tipo ha escrito el controlador para él, y también está funcionando. Sin embargo, cuando analicé, creo que la configuración del reloj y la fase son incorrectas.

Estoy adjuntando los diagramas de tiempo para ambos esclavos. ¿Puede alguien decirme si la configuración que asumo es correcta?

ckpl = HIGH

ckph = Alto

Pero en nuestro código de controlador está escrito como

ckpl = HIGH

CKPH = LOW

Todavía funciona ... ¿Alguien tiene una idea, ¿cómo está funcionando?

    
pregunta Virendra Kumar

2 respuestas

1

Según el diagrama de tiempo de Motorola SPI, la configuración de su ADC debería ser

CPOL = 1, (SCK Normal Alto)

CPHA = 1, (los datos son efectivos al segundo borde, en su caso, es un flanco ascendente)

También tiene una versión de TI SPI:

  

Algunos productos utilizan diferentes convenciones de nomenclatura. Por ejemplo, la TI   MSP430 usa el nombre UCCKPL en lugar de CPOL, y su UCCKPH es el   inversa de CPHA. Al conectar dos chips juntos, la fase de reloj   Los valores de inicialización deben examinarse para asegurarse de utilizar el derecho   configuración.

Entonces, para la versión de TI, debería ser

CKPL = 1,

CKPH = 0.

Según el método de denominación en su código, parece que el código utiliza el modo TI, ¿y está utilizando una MCU de TI? Si lo es, entonces CKPH debería ser 0.

Por lo tanto, lea el código detenidamente, no solo el comentario, asegúrese de entender el código completamente.

Actualizar:

En realidad, la mayoría del ADC basado en SPI de ADI tiene un tiempo de escritura estándar, el bus utiliza un diagrama de tiempo de lectura de SPI modificado .

Desde el tiempo de escritura, debe hacer que los datos sean efectivos en el segundo borde CLK. Entonces, para la versión Motorola: CPHA = 1, para la versión TI: CKPH = 0.

Para el tiempo de lectura: cuando el ADC complete la conversión. Primero da salida a un nivel "bajo" en la línea DOUT, para indicar al usuario que los datos están listos. Y envías el reloj y anotas los datos restantes. Los datos restantes se eliminarán después de t2 desde su primer borde. Por lo tanto, debes evitar el bit extra bajo y usar CKPH = 0.

Cualquiera que sea la configuración que utilices, dado tu sincronización final (teniendo en cuenta los diversos factores parasitarios) no viola el diagrama de sincronización, funcionará.

    
respondido por el diverger
0

Cuando se usa de manera normal, un puerto SPI se configurará para producir un margen de tiempo de +/- 1/2 bit de tiempo entre el reloj y los cables de datos. La inversión de la fase del reloj aumentará el margen de tiempo a un tiempo de bit completo en un lado, pero lo reducirá a cero en el otro. Dependiendo de lo que se sepa sobre los retrasos de propagación relativos del reloj y de los cables de datos, eso puede o no ser bueno.

Hay muchas situaciones en las que una tolerancia tan sesgada sería algo malo; en los casos en que los tiempos de propagación del reloj y los datos son pequeños, pero uno no tiene ninguna razón particular para creer que uno es más grande que el otro, tener una tolerancia sesgada haría que las cosas no funcionen. Sin embargo, en muchas otras situaciones, cuando se sabe que los datos en un cierto punto se retrasarán significativamente en relación con el reloj (incluida la situación muy común de un esclavo que alimenta datos al maestro), tal sesgo puede ser realmente ventajoso. / p>

Si el esclavo está suministrando datos al maestro, se puede garantizar que el maestro vea cada borde del reloj antes de que el esclavo pueda verlo y devolver los datos. Por lo tanto, generalmente es seguro que el esclavo envíe datos salientes en el mismo margen de reloj que el maestro habrá utilizado para muestrear el bit anterior. De hecho, el uso de un enfoque de este tipo puede aumentar la velocidad a la que los datos pueden transmitirse de manera confiable (con SPI normal, el tiempo de viaje de ida y vuelta del maestro al esclavo debe ser de menos de medio bit; ).

    
respondido por el supercat

Lea otras preguntas en las etiquetas