¿Cuál es el bus serie incorporado más popular? [cerrado]

8

Estoy diseñando un dispositivo integrado que me gustaría que sea compatible 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 muy probablemente a menos de un metro 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 podría potencialmente ser reutilizado para esto también).

    
pregunta pfyon

5 respuestas

12

Si no estás seguro, y tus 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 transmite 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 chips 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 desea conectarse 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 aún sea 1976 y sus periféricos necesiten una señal masiva para distinguir un poco del ruido.

Puede considerar Dallas con 1 cable, pero sospecho que no es tan común como I²C, y un bus de "1 cable" que necesita 2 cables para funcionar siempre me ha parecido un poco sospechoso.

    
respondido por el pingswept
3

Como usted dijo que sería un ancho de banda bajo, asignaría suficiente IO para manejar tanto SPI como I2C. También, si es posible, tendría líneas CS adicionales para que pueda ejecutar múltiples dispositivos SPI. Además, no olvide ver cómo va a alimentar el periférico. Si se está quedando sin batería para obtener la máxima vida útil, debe poner el dispositivo en modo de bajo consumo o desconectar la alimentación cuando no esté en uso. También use los controladores del módulo controlador de serie, si es posible, muchos controladores funcionarán como SPI, I2C y serie. Si puede y separa 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 dirá al controlador cuándo deben ser reparados, por lo que también desea tener un IO adicional en un pin, idealmente desde el cual puede generar una interrupción.

    
respondido por el Rex Logan
2

La pregunta es un poco problemática debido a problemas de definición.

La comunicación serializada es básicamente lo que necesitas si quieres comunicarte con algún periférico externo sin usar innumerables puertos en tu 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 hilos.

Cada uno tiene diferentes características. Lo que debe responder es qué tan rápido debe ser su comunicación, qué tan confiable debe ser, qué opciones ofrece su microcontrolador, etc.

Este wikipedia y este sitio de referencia explica mucho más claramente que yo, ¡también siga las referencias para aprender aún más!

    
respondido por el Wouter Simons
2

Básicamente, debes elegir entre I2C y SPI.

Independientemente de qué bus utilice, 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 interconectarse con maestros de 1.8 y 5V). Consulte AN10441 de NXP [PDF]. Esto también funcionará para SPI (solo remueve los pullups). Necesitará 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 quiere 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.

    
respondido por el Kevin Vermeer
1

Yo usaría I2C. Solo asegúrese de poder 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.

    
respondido por el mjh2007

Lea otras preguntas en las etiquetas