El punto central de "plug and play" es que el host puede "descubrir" qué tipo de periférico está conectado. Plug and play se puede hacer más fácilmente por tarjeta; es mucho más difícil hacerlo en un dispositivo individual como se explica a continuación.
Tanto I2C como SPI se usan para la mayoría de las interfaces seriales a los circuitos integrados, con UART a una tercera distancia. La alternativa principal es una interfaz paralela, que ha descartado. Discutiré los méritos de cada interfaz serial a continuación.
Tanto SPI como I2C están diseñados para implementarse localmente dentro de una placa o en varias placas, como usted está planeando; normalmente no están disponibles como una interfaz externa. Los UART son iguales, a menos que tengan un chip convertidor de nivel para convertir las señales de nivel lógico de UART a sus homólogos RS-232, en cuyo caso son válidas para un par de cientos de pies.
La mayoría de los microcontroladores modernos pueden proporcionar un par de interfaces I2C, tal vez 4 interfaces SPI y 4 o más UART. Por lo general, no puede usar todos a la vez debido a las limitaciones de los pines.
Direccionamiento basado en tarjeta
La forma más fácil de distinguir entre diferentes interfaces es hacerlo a nivel de placa, utilizando el direccionamiento basado en tarjeta. Esto puede ser digital o analógico. Cuatro ejemplo, tres líneas digitales podrían usarse para distinguir entre ocho tipos de tarjetas. Una interfaz analógica, que requiere solo una línea, con un voltaje máximo de 3v en un sistema de 3.3V podría admitir doce "direcciones" de tarjetas que usen diferencias de 0.25V para cada tarjeta. Necesitaría una tabla, basada en la "ID de tarjeta", que le indicaría los tipos y el número de interfaces seriales en cada tarjeta.
He usado este último esquema para identificar varias versiones de una PCB a un microcontrolador, para permitirle usar un conjunto común de firmware en muchas versiones diferentes de hardware.
I2C
I2C tiene la ventaja de requerir solo dos líneas, reloj y datos. El direccionamiento está integrado en el protocolo. Si se necesita más de un chip del mismo tipo en el mismo bus I2C, entonces los chips usualmente tienen pines de dirección, como A0-A2 proporcionaría ocho chips idénticos.
I2C se especifica para 100kHz, 400kHz y, más recientemente, de 1 a 5MHz. Como resultado, I2C se usa generalmente para interfaces más lentas, como EEPROM y NVRAM que contienen configuraciones de usuario o datos de configuración, DAC y ADC de baja velocidad, pantallas pequeñas, sensores y relojes en tiempo real.
I2C solo no se presta a una interfaz plug and play, ya que cada dispositivo I2C tiene una dirección única y debe consultarse. Necesitaría tener una lista de todas las posibles interfaces I2C que pueden existir en los PCB esclavos, revisar la lista e intentar cada una, y ver cuáles responden.
SPI
Las interfaces SPI requieren la mayoría de las líneas; un mínimo de cuatro líneas para un chip; reloj, líneas de datos de entrada y salida, y una selección de chip para distinguir entre chips. Los chips SPI adicionales deben tener su propia selección de chips. Así que una tabla con tres chips SPI requeriría 6 líneas. SPI es el más rápido de estos tres tipos, llegando a 50MHz.
SPI se usa generalmente para interfaces más rápidas, como DAC y ADC de alta velocidad, pantallas grandes, chips de memoria más grandes y tarjetas SD.
Si uno permitiera diferentes tipos de PCB esclavos, cada uno de ellos con un número de selecciones de chip, entonces nuevamente el host necesitaría tener algún tipo de tabla de qué dispositivos puede seleccionar cada línea de selección de chip.
UARTs
Los dispositivos con interfaces UART tienden a ser módems, como celulares, Bluetooth y similares, a menudo con interfaces de comando de "comando AT" como los viejos módems telefónicos Hayes de los años 80 y 90. Los UART tendrían que ser tratados de la misma manera que SPI, ya que no tienen ninguna dirección asociada con ellos. Entonces, uno podría emitir un comando AT simple (por ejemplo, solo AT / cr / lf) y ver si responde, y luego emitir comandos únicos para cada dispositivo posible para determinar su tipo.
(Otro uso común para los UART, ya sea dentro o fuera del tablero, es para dos microcontroladores que se hablan entre sí).
Al igual que I2C, los UART solo requieren un mínimo de dos líneas (Tx y Rx). Hay líneas de control adicionales (RTS y CTS, por ejemplo) que, si va a implementar una interfaz UART, probablemente valdría la pena ponerlas en práctica. Si no son necesarios para la interfaz UART, podrían usarse como líneas de E / S de propósito general (GPIO).
Una dificultad con las interfaces UART es que pueden estar usando una de varias velocidades en baudios; 115200 es el más común, pero he visto dispositivos que utilizan 9600, 19200 y 57600 además de 15.2K. Entonces, si uno obtuvo una respuesta de basura con 115.2, puedes probar una de las velocidades de transmisión más bajas.
Las interfaces UART compiten con I2C en términos de velocidad; durante mucho tiempo estuvieron limitados a 115.2K, pero ahora pueden llegar a un par de MHz.
A menos que piense en admitir placas que tengan módems inalámbricos, puede que no valga la pena proporcionar una interfaz UART.