Hacer que FTDI 2232D haga SPI modo 1 correctamente Los datos parecen 1/2 ciclo de reloj apagado

2

Esta captura por un Saleae Logic Pro 8 (v 1.2.18) muestra el resultado de la transmisión (datos MOSI) 0x20 0x11 . Desafortunadamente, se interpreta y se muestra como 0x40 0x23 . El cuadro de diálogo muestra la configuración del analizador SPI de Saleae que, creo, están correctamente configuradas para SPI Mode 1 . (Se muestran las versiones digitales y analógicas de cada línea SPI por completo.)

Si cambio el analizador a Modo 0 (cambiando a CPHA=0 , los datos originales se muestran correctamente. Sin embargo, el dispositivo para escribir solo hace Modo 1 (vea 9.5.1 y 10.1.1).

Paraconfirmarlarelacióncorrectadedatos/fasedereloj,consulte this .

Estoy usando el comando de salida MPSSE de FTDI 0x11 (consulte 3.3.2 bad command que se muestra en todos los ejemplos de FTDI para garantizar la sincronización del comando (que funciona como se espera).

    
pregunta wallyk

2 respuestas

4

Recibí una respuesta del soporte técnico de FTDI:

  

Los dispositivos FT2232D y FT2xxH MPSSE solo son compatibles con los modos 0 y 2 de SPI. Algunos clientes han intentado usar la sincronización de 3 fases, pero no han tenido éxito.

     

Tenemos un nuevo dispositivo USB a SPI / I2C - FT4222H. Este chip es compatible con todos los modos SPI CPOL / CPHA (polaridad de reloj / fase de reloj).

     

Nota: "Quad SPI" en la hoja de datos del FT4222H se refiere a una opción de interfaz SPI de 4 bits de ancho, no a 4 canales SPI independientes.

Eso parece responder definitivamente a la pregunta de cómo hacer esto.

Estamos considerando posibles soluciones, como invertir la señal del reloj en hardware. Actualizaré esta respuesta cuando determinemos la viabilidad.

Edit: Lo tenemos funcionando. Requiere dos áreas de modificaciones en comparación con una implementación sencilla.

Se agregó un inversor de hardware a la salida de señal SPI_CLK. Esto permite que el reloj y los datos realicen una transición de 180 ° fuera de fase evitando errores de muestreo.

El software se cambia agregando un orden ligeramente extraño pero cuidadoso de selección de chip y transiciones de reloj. Al final de un mensaje, produce un pequeño fallo de reloj, pero a ninguno de nuestros dispositivos (analizador Saleae y convertidores de TI A2D) le importa.

La secuencia para habilitar la selección de chips es:

1.  SPI_CK = 1  &&  SPI_CS = 1
2.  SPI_CK = 1  &&  SPI_CS = 0
3.  SPI_CK = 0  &&  SPI_CS = 0

Para desactivar la selección de chips:

1.  SPI_CK = 1  && SPI_CS = 1   # causes slight glitch

El fallo es un pulso de reloj adicional (pero corto) que se produce cuando el motor MPSSE termina de registrar los datos en los que concluye estableciendo SPI_CK en cero, pero como lo invertimos, aparece como uno. El paso CS deshabilitado luego corrige esto, listo para la siguiente secuencia de habilitación CS (cuando finalmente sea la hora).

    
respondido por el wallyk
3

De acuerdo con esta biblioteca, debe ajustar el reloj antes de habilitar la Línea de selección de esclavo, de lo contrario crea un fallo de reloj. Sus datos descodificados se desplazan a la derecha, que es exactamente el problema que describe este comentario

  

Controle el problema para admitir correctamente el modo SPI 1. El reloj SPI1 está inactivo bajo, pero debe configurarse alto antes de enviar datos para evitar fallos de reloj involuntarios del FT2232. (mpsse.c línea 655)

    
respondido por el C_Elegans

Lea otras preguntas en las etiquetas