¿Qué es la velocidad de respuesta para I2C?

Estoy configurando I 2 C en un PIC18 usando las funciones integradas del compilador C18 como se describe en la sección 2.4 de la documentación :

void OpenI2C2( unsigned char sync_mode,
    unsigned char slew );

No estoy seguro de lo que debo hacer con slew. Puedo elegir entre dos opciones, definidas en i2c.h:

  • SLEW_OFF: Tasa de cambio deshabilitada para el modo de 100 kHz
  • SLEW_ON: Tasa de cambio habilitada para el modo de 400 kHz

En la hoja de datos en el registro 15-1, página 257, las dos opciones se explican con un poco más de detalle:

  • 1 = Control de velocidad de respuesta deshabilitado para el modo de velocidad estándar (100 kHz y 1 MHz)
  • 0 = Control de velocidad de respuesta habilitado para el modo de alta velocidad (400 kHz)

Aunque no lo entiendo, tengo un par de preguntas:

  1. ¿Qué es la velocidad de respuesta?

  2. Para mí, las dos opciones no tienen sentido: ¿qué pasa si quiero deshabilitar la velocidad de respuesta para 400 kHz y habilitarla para 100 kHz? ¿Por qué es esto?

  3. ¿Cuándo debo elegir SLEW_OFFy cuándo SLEW_ON?

Respuestas (1)

La velocidad de respuesta es la rapidez con la que la señal cambia de baja a alta, o viceversa. Al limitar esta transición abrupta, puede reducir el timbre de los reflejos de la señal y limitar la diafonía entre las líneas de señal.

Sin embargo, la forma en que funciona es que a 100 kHz, las velocidades de la señal son tan lentas que la velocidad de respuesta realmente no importa; a 400 kHz, es posible que pueda arreglar un circuito problemático limitándolo; pero luego, cuando llega a 1MHz, realmente necesita toda la velocidad de transición que pueda obtener, por lo que solo tiene que hacer una buena coincidencia de señal y enrutar sus líneas con más cuidado.

El bit en cuestión no hace más que habilitar o deshabilitar la función. El resto son simplemente consejos. Las velocidades están entre paréntesis, ya que es solo una sugerencia.

¡Gracias! Parece ser una buena opción: ¿por qué no usaría el control de velocidad de respuesta?
@CamilStaps: según tengo entendido, parece que podría haber leído mal la respuesta. Tener transiciones bruscas (SLEW_ON) provoca ruido EMI y timbre adicionales. Tener transiciones lentas (SLEW_OFF) reduce la EMI pero reduce la frecuencia máxima utilizable del enlace. Es una compensación.
@gbarry: Ah, así que con el control de la velocidad de respuesta desactivado , la señal es lo más parecida a las ondas cuadradas que el uC puede lograr. Con el control de velocidad de giro en la onda, las transiciones alto/bajo son más inclinadas (= menos verticales) de lo que serían de otro modo.
Eso es correcto, aunque no estoy seguro de cuán dramático es en el PIC (debería verificarlo). Nota histórica: la especificación RS232 tenía una limitación de velocidad de giro, por lo que alguien presentó un chip controlador que tenía buenas señales de salida con pendiente. Y luego todos comenzamos a usar tasas de bps cada vez más rápidas, por lo que no pudimos usar ese chip...
Tres años después, tuve la misma pregunta, pero en realidad la medí. Para referencia futura, en un PIC16F1454 con pull-ups de 4,7k y un solo esclavo en el bus, el tiempo de caída es de 2,9 ns sin limitación de velocidad de respuesta (posiblemente limitada por mi sonda de 150 MHz) y 151 ns con limitación de velocidad de respuesta. No afecta el tiempo de subida.
Se pueden encontrar más detalles sobre la velocidad de giro en esta publicación del foro , por ejemplo, que la velocidad de giro para el flanco ascendente está controlada por las resistencias pull-up que esencialmente elevan la capacitancia total del bus (cable + conexiones + pines), como se describe en UM10204 capítulo 7.1.