¿Cómo SPI e I2C bloquean los datos?

Tengo preguntas sobre el mecanismo de trabajo y el método de medición de la interfaz SPI e I2C. Para SPI, hay varios modos. Mi pregunta es, ¿cómo se bloquearán los datos? Tome CPOL=1 y CPHA=0 por ejemplo, el bit se bloquea en el flanco descendente del reloj. Pero, ¿por qué es lo mismo para MISO y MOSI? Quiero decir, MISO y MOSI provienen de diferentes dispositivos (el primero del dispositivo y el último del maestro). Pero el reloj siempre viene del maestro. Entonces, ¿cómo sería posible bloquear tanto MOSI como MISO en el flanco descendente del reloj? Para MOSI, tal vez sí, ya que el reloj y el MOSI salen juntos del maestro y llegan al dispositivo al mismo tiempo (tal vez debería decir medio reloj más tarde). Entonces, es posible que MOSI siga el diagrama de tiempo. Pero para MISO, ¿cómo dejamos que el MISO se trabe en el centro de su bit, ya que es ¿Viajará un tiempo de vuelo incierto del dispositivo al maestro? Y para medir el alcance, ¿qué punto debemos sondear? ¿MOSI en el lado del dispositivo y MISO en el lado maestro?

Tengo la misma pregunta en I2C. ¿Cómo asegurarse de que los datos SDA se mantengan altos cuando se trata de maestro a esclavo y de esclavo a maestro, ya que el reloj siempre es de maestro a esclavo?

¡Gracias por cualquier comentario! :)ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

¿Encuentra algún problema al usar SPI/I2C en su proyecto, o está preguntando esto con fines de aprendizaje?
Hola Raj, solo propósito de aprendizaje... :)

Respuestas (2)

Entonces, ¿cómo sería posible bloquear tanto MOSI como MISO en el flanco descendente del reloj?

El diagrama tiene fines ilustrativos, no detallados dentro del chip, supongamos que los datos se capturan en el flanco descendente, supongamos que el esclavo está transmitiendo datos, ahora en el flanco descendente del reloj, el esclavo emite el bit (digamos MSB en el primer reloj), el esclavo retendrá la salida hasta el flanco ascendente de la entrada CLK, el maestro puede permitir los datos del esclavo hasta el flanco ascendente del CLK y luego cambiar el bit a la derecha, la misma repetición hasta que todos los bits de datos estén recibido, lo mismo se aplica a MOSI del maestro.

Otra, explicación usando SS (Selección de esclavo también llamado Pulso de E/S de sincronización de cuadro), cuando el bit SS baja (vea la imagen) el esclavo emite los datos, en el borde descendente se capturan los datos, que es aproximadamente el centro del pulso de datos en el flanco ascendente, los siguientes datos se desplazan a la salida, por lo que tenemos un tiempo de ancho de pulso CLK para que los datos se asienten en los pines de salida y el maestro capture los datos del esclavo

El módulo periférico SPI tendrá todo el tiempo necesario, cambiando el circuito para que funcione en el peor de los casos.

Hola @Raj: ¡Gracias por tu explicación! ¿Podemos usar el último diagrama que adjunto como ejemplo? Es un diagrama de tiempo de un dispositivo (en realidad, un chip flash SPI). 9.7 es el tiempo de "lectura" y 9.8 es el tiempo de escritura. Para lectura, el tiempo que se especifica es tCLQX y tCLQV, que es el flanco descendente del reloj hasta la validez de los datos (o tiempo de espera). Para escribir, el tiempo que se especifica es tDVCH y tCHDX, que utiliza el flanco ascendente del reloj como juicio del tiempo de configuración/retención. ¿Hay alguna razón por la que la especificación del chip defina dicho parámetro?
dado que los datos se mueven/vienen desde el exterior del chip, la entrada debe cumplir con este tiempo; de lo contrario, la transferencia de datos será propensa a errores, la distancia normal del cable debe ser entre 10 y 15 metros. Si aumenta la longitud del cable, esto puede afectar los tiempos del reloj y los datos, siempre que la señal de tiempo esté dentro del tiempo de subida y bajada especificado, el dispositivo funcionará como se espera.
Hola, @Raj, creo que mi pregunta sería, ¿por qué leer y escribir definen un borde diferente del reloj a los datos? Para la lectura maestra, ¿puedo entenderlo de esta manera: el dispositivo solo garantiza que los datos se emitirán en un cierto tiempo después del flanco descendente del reloj, y el maestro debe encargarse de recuperar estos datos? y para la escritura maestra, el dispositivo solo garantiza que si los datos de entrada satisfacen el tiempo de configuración/retención basado en el aumento del reloj, y los datos se bloquearán correctamente en el dispositivo. ¡Gracias! :)
Pero surge otra pregunta, para la lectura maestra, los datos leídos de nuevo en el maestro, parece que deberían bloquearse en el maestro con el flanco ascendente, pero no hay una especificación de tiempo para especificar el tiempo de configuración/retención de la lectura maestra. ¿Sabes por qué?
@david, vea el diagrama 2 sincronización de entrada en serie, la señal CS (SS / síncrona) se mantiene baja para sincronizarla con la sincronización esclava, tenga en cuenta que el reloj se mueve alto antes de CS y después del tiempo tCHSL se establece en bajo, en el borde descendente el esclavo emite los datos en MISO, los datos se enganchan al registro de desplazamiento maestro en el flanco ascendente (la señal de tiempo está destinada al flanco ascendente CLK)

SPI e I2C son interfaces relativamente lentas, diseñadas para funcionar con esclavos tontos y un solo maestro activo. Esto significa que debe elegir una velocidad de reloj que sea compatible con las longitudes de ruta y los circuitos involucrados.

El tiempo de ida y vuelta del reloj a los datos debe tenerse en cuenta al diseñar los circuitos para la interfaz. Si la interfaz implica aislamiento óptico, y las baratas pueden ser lentas (es difícil alcanzar incluso I2C de 100 kHz con CNY17 en el camino), entonces también se deben tener en cuenta. Lea las hojas de datos de cualquier búfer que esté utilizando, calcule las constantes de tiempo RC, haga su tarea y también permita 5 nS por metro para cualquier retraso en la línea de transmisión. Sume todos los tiempos de propagación, reste de la mitad de un ciclo de reloj y vea si cumple con el tiempo de configuración de la interfaz ( t s tu , está en la ficha técnica), si >0, resultado felicidad.

Las interfaces de alta velocidad tienden a ser sincrónicas de origen por esta misma razón, todas las señales se envían desde el extremo de transmisión.

Las interfaces de muy alta velocidad, como SATA, HDMI, etc., eliminan la necesidad de sincronizar cualquier señal y envían datos como una serie sincronizada.

Hola @Neil_UK, ¡gracias por tus comentarios! Entonces quiere decir que, como en la imagen que adjunto ahora, el tiempo de configuración y el tiempo de espera para 1 y 2 deben cumplirse al mismo tiempo, al elegir una velocidad de reloj adecuada, ¿es correcto? ¡Gracias! :)
Otra pregunta es que, como adjunté el gráfico de tiempo de especificaciones, especifica la salida con el flanco descendente del reloj, pero usa el flanco ascendente del reloj para la entrada en serie. No parece lo mismo que el modo CPHA. ¿Sabes por qué la hoja de datos define eso?
No he mirado todos los modos, solo sumas detalladas para los que uso. Pero la respuesta es la misma, ponte cómodo y RTFM.