¿el maestro SPI siempre recibe datos al mismo tiempo que envía los datos?

1

Intento comunicarme con EPPROM utilizando SPI. La imagen ilustra la secuencia del registro de estado de lectura.

el programa que estoy usando verifica el registro de datos de recepción cada vez que SPI termina de enviar (enviar el registro de datos vacío).

mi pregunta es, ¿el SPI maestro recibe datos en MISO cuando envió los datos de instrucciones como se muestra en la imagen de abajo? y en general, ¿SPI siempre recibió datos en MISO al mismo tiempo que envió datos en MOSI?

en otras palabras, para obtener datos del estado, ¿debo enviar otros datos NULL (0x00)?

    
pregunta Makhlouf GHARBI

4 respuestas

4

El concepto general de SPI es que puede enviar y recibir bits a cada hora del reloj. Dicho esto, cada dispositivo SPI funcionará de manera diferente con respecto a qué bits se utilizan en cada ruta. Depende de usted leer la HOJA DE DATOS de su dispositivo para averiguar qué bits se requieren en el lado MOSI para que el dispositivo haga lo que quiere y le devuelva lo que necesita en el lado MISO.

    
respondido por el Michael Karas
1

La transferencia de datos SPI en cualquier dirección significa que el maestro envía un reloj y quien quiera decir algo (incluido el propio maestro) lo coloca en la línea de datos con los ciclos del reloj.

En principio, el maestro podría generar el reloj sin enviar datos, pero esto es lo mismo que enviar un 0x00 .

    
respondido por el sweber
0

Algunas bibliotecas SPI incluyen solo una rutina, que envía y recibe un byte simultáneamente. Otros tienen una rutina separada para enviar un byte e ignorar el resultado. La inclusión de esta última función en una biblioteca puede permitir que el rendimiento se mejore significativamente (a veces casi se duplique) en algunas plataformas, ya que la rutina de resultados de transmisión y omisión puede volver tan pronto como el hardware se inicie transmitiendo el byte en cuestión, aunque no podría devolver datos hasta que la acción finalice . Para permitir una recepción de alta velocidad, algunas bibliotecas pueden ofrecer la función "obtener un byte y comenzar a recibir otra".

No he notado mucha coherencia en el funcionamiento de las bibliotecas de mayor rendimiento, y evitar la corrupción de datos al tiempo que se superponen las operaciones puede ser complicado, pero las mejoras de rendimiento que pueden obtenerse mediante la E / S y los cálculos superpuestos pueden ser muy importantes. Vale la pena el esfuerzo.

    
respondido por el supercat
0

SPI es un bus dúplex completo. Eso significa que la comunicación en ambos sentidos ocurre simultáneamente.

En hardware, se puede implementar mediante 2 registros de turno que están sincronizados por el reloj SPI. El registro de transmisión registrará la salida de los datos y el registro de recepción registrará los datos. La mayoría de los microcontroladores accederán al registro de transmisión en escritura y recibirán el registro en lectura.

Ambos registros de desplazamiento están sincronizados con el mismo reloj. Por lo tanto, si desea registrar los datos en el registro de recepción, debe enviar un byte de 00 h. Esto a menudo se considera "seguro" para enviar.

En las bases de código en las que he trabajado, normalmente hemos implementado rutinas SpiTxRx. Se necesita un byte para transmitir, y también devuelve el byte leído. En mi opinión, esta es una buena práctica, ya que si no lee el búfer de recepción SPI (por ejemplo, cree que puede optimizar escribiendo una rutina SpiTx más rápida) en todo el hardware puede marcar un exceso de búfer y bloquear el periférico SPI en un error estado.

    
respondido por el Hans

Lea otras preguntas en las etiquetas