Hay tres razones por las que creo que SPI es una mejor opción que I2C en la mayoría de los proyectos.
-
SPI se puede sincronizar más rápido que I2C. He usado SPI hasta 50Mhz en circuitos integrados que soportan esa velocidad, mientras que la velocidad máxima de I2C es de 3.4Mhz.
-
Dado que I2C es una línea de datos 'compartida', el maestro debe liberar el control de la línea de datos para que el esclavo responda. He sido quemado en varios proyectos antes donde el maestro soltó el control y el IC esclavo procedió a bloquearse (principalmente debido al ruido en la línea). Ahora está en un estado en el que ambas partes esperan que la otra responda y usted necesita restablecer todo. Muy frustrante. Con SPI, usted salta de lado todas las líneas de datos compartidas porque cada línea tiene una dirección dedicada.
-
Si tiene una diferencia de nivel de voltaje entre los traductores de voltaje unidireccionales de su IC (digamos, 3.3V frente a 5V), es más fácil lidiar con ellos que con los tri estados necesarios para I2C.
En una nota al margen, me resulta más fácil depurar SPI si está usando las líneas de selección de chip, ya que puede usar esa línea para disparar en su alcance. Básicamente, todo se reduce a, si tiene los pines de repuesto, use SPI y ahórrese el dolor de cabeza. Si, por otro lado, solo tienes 2 pines, estás atascado con I2C. Pero, en serio, agregue una línea de restablecimiento por separado a su IC esclavo I2C, para que pueda recuperarse de un bus bloqueado.