¿Valdría la pena soportar UART para una interfaz serial 'plug-n-play'? ¿O sería una pérdida de tiempo? [cerrado]

0

Actualmente estoy trabajando en un proyecto en el que estoy diseñando una placa de circuito central que contará con tableros de mini plugins. La comunicación entre la placa de circuitos principal y las placas de circuitos de complementos será en serie. Estoy intentando crear una interfaz general tal que la placa de circuito principal pueda admitir comunicaciones SPI e I2C. Tengo una pregunta un tanto subjetiva que necesita una respuesta práctica:

¿Valdría la pena apoyar también a UART? ¿O sería una pérdida de tiempo?

Daré un poco más de información con respecto a mi solicitud. Las mini tarjetas de complementos normalmente tendrán ICs pequeños. Dudo que alguna vez intente comunicarme con una PC con esta interfaz.

Ahora, cuando he estado viendo algunos circuitos integrados que podrían aparecer en una de estas placas de complementos (es decir, un acelerómetro), Digikey y Mouser realmente solo listan circuitos integrados serie con interfaces SPI e I2C. Estoy teniendo dificultades para encontrar cualquier chip que tenga UART. Por lo tanto, me traigo a la pregunta, ¿debería siquiera intentar admitir UART en esta interfaz serial que estoy diseñando?

Me doy cuenta de que esta es una pregunta subjetiva, sin embargo, estoy algo confundido en cuanto a para qué aplicaciones típicas se usa UART. Como no parece ser usado para comunicaciones IC-IC. En cambio, la única aplicación real a la que he estado expuesto es que se usa para flashear microcontroladores y comunicarse con periféricos de PC.

Otra pregunta: ¿dónde entra en juego la separación entre SPI / I2C y UART? ¿SPI / I2C se utiliza normalmente para las comunicaciones entre IC y UART se reserva para distancias más largas porque es más robusto? Además, estoy bien versado en las diferencias técnicas entre SPI / I2C / UART, sin embargo, no estoy bien versado en las aplicaciones típicas en las que debería usar una sobre la otra.

    
pregunta Izzo

2 respuestas

2

Yo diría que para apoyar un UART. Casi todas las MCU tienen un UART, y como dijo @tcrosley, muchos dispositivos de comunicaciones tienen interfaces UART.

He hecho diseños similares en los que he agregado disposiciones para los tableros hijos en los servocontroladores sin saber qué podrían terminar siendo. No siempre es fácil planear por adelantado. Recientemente agregué Bluetooth a un servo controlador como una placa hija, usando la interfaz UART, así que tuve la suerte de tener el UART fijado.

Lo que dice @tcrosley sobre "plug-and-play" es muy cierto. Casi ninguna interfaz que sea apropiada para una placa hija se presta a "plug-and-play". Pero como es probable que tengas el control sobre la creación de las tablas hijas, existen soluciones simples.

Mi solución favorita se basa en el hecho de que casi todas las MCU tienen un ADC. Dedico un pin en la interfaz hija-tablero para "detectar-tablero". Conecto ese pin a un canal ADC que tiene una resistencia de pull-up. Cada placa hija diferente tiene asignado un resistor de valor diferente, y está cableado como un menú desplegable. El divisor de voltaje resultante entrega una "firma" a la MCU.

La MCU lee el ADC en el encendido, y luego sabe qué placa hija está conectada (si corresponde). Por supuesto, la MCU necesitaría un firmware para cada placa diferente, pero ese sería casi siempre el caso.

    
respondido por el Mark
-2

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.

    
respondido por el tcrosley

Lea otras preguntas en las etiquetas