Entendiendo SPI

2

Tengo algunos problemas para entender SPI:

Actualmente estoy usando STMF2xx para conectarme con FTDI UM232H, configuraré mi STMF2xx en esclavo y FTDI en maestro.

Pero, tengo problemas para obtener los datos en mi STM32 desde el FTDI, pero cuando verifico mi señal, puedo ver que la señal de MOSI (FTDI a STM32) es correcta

¿Puedo saber qué podría estar mal?

Pero, ¿no es que mi línea MISO debería estar obteniendo los mismos datos que MOSI pero está un poco desplazada? (¿Tengo razón? ¿No es que SPI funciona como un registro de desplazamiento, cada vez que se envían datos a MOSI, el hardware se enviará automáticamente a MISO?)

Mi segunda pregunta es, ¿importa si mi línea MOSI siempre está BAJA, pero la línea MISO siempre está ALTA? ¿O necesito configurar que MOSI y MISO deben ser bajos / altos iniciales, o MOSI altos, MISO bajos?

Mi configuración actual para mi SPI es:

  1. dúplex de 2 líneas
  2. reloj de 1 Mhz
  3. MSB
  4. 8 bits
  5. Phase = Low
  6. Polaridad = Positiva
  7. Hardware: conexión de 4 líneas, CS, SCLK, MOSI, MISO

    
pregunta Tim

2 respuestas

3
  

Pero, ¿no es que mi línea MISO debería estar obteniendo los mismos datos que MOSI pero está un poco desplazada? (¿Tengo razón? ¿No es que SPI funciona como un registro de desplazamiento, cada vez que se envían datos a MOSI, el hardware se enviará automáticamente a MISO?)

No. El esclavo debe registrar lo que haya puesto en el registro de salida. Si hay un 0 allí, entonces el 0 se anula.

  

Mi segunda pregunta es, ¿importa si mi línea MOSI siempre está BAJA, pero la línea MISO siempre está ALTA? ¿O necesito configurar que MOSI y MISO deben ser bajos / altos iniciales, o MOSI altos, MISO bajos?

irrelevante. El nivel solo importa cuando se muestrea en la fase y polaridad apropiadas del reloj.

Asegúrese de que el periférico SPI esté habilitado en modo esclavo y que MISO esté configurado como salida.

    
respondido por el Ignacio Vazquez-Abrams
1

Hay varias formas en que SPI con interrupción puede no funcionar.

Trivialmente, las conexiones MOSI y MISO pueden estar equivocadas. Supongo que ese no es el caso.
AFAICT el FT232H puede llevar las señales a 3.63V, que puede Ser un problema el STM32F, pero IIRC no debería dañarlo. Estoy asumiendo que esto está bien.
El STM32F debería poder manejar entradas FT232H, que reconocen una entrada alta a 2V. Así que supongo que esto está bien.

Es posible que el SPI STM32F no esté configurado correctamente:

  • reloj para la operación SPI
  • hay cuatro configuraciones de reloj contra borde que deben coincidir con FTDI
  • Los pines STM32F deben configurarse para la función alt correcta
  • Los pines IIRC STM32F todavía deben configurarse correctamente para la salida también

Fallo de interrupción:

  • Vector de interrupción incorrecto
  • Prioridad demasiado baja, y ser bloqueado

Intenta simplificar.

¿Está utilizando un ejemplo 'operativo' de ST?

Intente recibir datos encuestando el SPI. Eliminar problemas sobre las interrupciones, y simplemente alternar un pin cada vez que se reciben los datos. Puedes ver ese pin en tu 'alcance'.

Si esto no funciona, intente el simple 'bit bashing' y reciba los datos encuestando directamente el reloj y el pin de datos. Es posible que solo logres unos pocos Mbit / s, pero eso comprobaría que las cosas funcionen.

    
respondido por el gbulmer

Lea otras preguntas en las etiquetas