Estoy diseñando un dispositivo integrado que me gustaría hacer interoperable con periféricos de terceros a través de un bus serie. ¿Debo elegir SPI, I²C o algún otro autobús?
Los periféricos tendrán un ancho de banda bastante bajo (algunos sensores que se comunican a través del bus, sondeados periódicamente) y probablemente dentro de un metro o menos del controlador. La única tarea del controlador es recopilar los datos del sensor, empaquetarlos de alguna manera y luego enviarlos a un módulo inalámbrico a través de otro bus (aunque el bus del sensor también podría reutilizarse para esto).
Respuestas:
Si no está seguro, y sus requisitos son bastante vagos, elegiría I²C.
La principal diferencia entre SPI e I²C es que SPI requiere una línea de selección de chip para cada periférico. I²C emite una dirección periférica al comienzo de la comunicación, por lo que no necesita líneas de selección de chip. Las líneas de selección de chip se vuelven engorrosas después de las primeras.
Por otro lado, SPI es probablemente más fácil de implementar y depurar. Podría ser el ganador si solo quieres conectarte a un par de dispositivos.
Descartaría USB a menos que necesite altas velocidades de datos en distancias relativamente largas (m en lugar de cm). También descartaría RS-232 a menos que todavía sea 1976 y sus periféricos necesiten una señal masiva para distinguir un poco del ruido.
Puede considerar Dallas 1 cable, pero sospecho que no es tan común como I²C, y un autobús de "1 cable" que necesita 2 cables para funcionar siempre me ha parecido un poco sospechoso.
fuente
Como dijiste que sería de poco ancho de banda, asignaría suficiente IO para manejar tanto SPI como I2C. Si fuera posible, también tendría líneas CS adicionales para que pueda ejecutar múltiples dispositivos SPI. Tampoco olvides ver cómo vas a alimentar el periférico. Si se está quedando sin batería para obtener una vida útil máxima, debe poner el dispositivo en modo de bajo consumo o desconectarlo cuando no esté en uso. Utilice también el módulo de controlador serie de los controladores si es posible, muchos controladores mux SPI, I2C y serie. Si puede y separe la conexión inalámbrica del sensor, esto hace que sea más fácil apagar los dispositivos cuando no estén en uso. Además, algunos sensores tienen una línea que le indicará al controlador cuándo deben ser reparados, por lo que también querrá tener un IO adicional en un pin, idealmente desde el que pueda generar una interrupción.
fuente
La pregunta es un poco problemática debido a problemas de definición.
La comunicación serializada es básicamente lo que necesita si desea comunicarse con algún periférico externo sin usar innumerables puertos en su controlador. Básicamente, cada método de comunicación en serie necesita un reloj y una configuración sobre cómo manejar las conexiones de datos.
SPI es un bus de 4 hilos. I2C es un bus de 2 cables.
Cada uno tiene características diferentes. Lo que debe responder es qué tan rápida debe ser su comunicación, qué tan confiable debe ser, qué opciones ofrece su microcontrolador, etc.
Este artículo de wikipedia y este sitio de referencia explican mucho más claramente que yo, ¡también siga las referencias para aprender aún más!
fuente
Básicamente, debe elegir entre I2C y SPI.
Independientemente del bus que use, debe considerar el nivel de voltaje de sus sensores y periféricos de terceros. Puede hacer esto haciendo su propio convertidor con dos MOSFETS (solo va en una dirección: recoger / no cambiar o bajar / no cambiar; solo es un problema si necesita ejecutar sus sensores a 3.3 e interactuar con maestros de 1.8 y 5V). Ver AN10441 de NXP [PDF]. Esto también funcionará para SPI (solo elimine los pullups). Deberá agregar una línea a su conector para establecer un voltaje de referencia (si aún no lo está haciendo).
Una desventaja de I2C es que estás limitado al reloj más lento del autobús. Si un sensor solo es capaz de 100kHz y desea hablar con su memoria a 400kHz o 1MHz (ambas velocidades válidas), el comportamiento de su sensor más lento no está especificado. Si usa SPI, la línea de selección de chip significa que el sensor más lento ni siquiera escuchará lo que hay en el bus, y puede ejecutar diferentes velocidades para diferentes sensores.
fuente
Yo usaría I2C. Solo asegúrese de obtener un módulo inalámbrico que pueda comunicarse a través de I2C si desea tenerlo en el mismo bus que sus sensores. La mayoría de los periféricos de comunicaciones que he visto usan SPI, no I2C.
fuente