Si usted construye una placa de desarrollo para su proyecto o utiliza un microcontrolador común, encontrará muchos protocolos para comunicar otros componentes activos. La mayoría de los controladores llevan incorporados estándares como USB y Ethernet para trabajar con los periféricos de los ordenadores. Aun así, se utilizan protocolos como I2C, SPI, UART y otros para comunicarse con los microcontroladores o los CI programables. Las diferencias entre los buses I2C, SPI y UART son sencillas y cualquier diseñador que trabaje con un microcontrolador debe saber cómo configurar el enrutamiento y el diseño para estos protocolos.
Estos protocolos son estándares de señalización de menor velocidad, por lo que, si trabaja con estos protocolos, casi nunca tendrá que preocuparse de cosas como el control de la impedancia o el comportamiento de la línea de transmisión. Sin embargo, hay que tener en cuenta algunos aspectos importantes del diseño para garantizar que las señales de las líneas de los buses se lean correctamente en los receptores. También está la cuestión del direccionamiento, pero el producto concreto y su código son capaces de ocuparse de este aspecto. De momento, veamos cómo se pueden utilizar estos tres protocolos comunes en el diseño de una PCB, así como algunos elementos importantes para mantener la integridad de la señal.
Cualquier microcontrolador que vaya de los 8 a los de 32 bits utilizará al menos uno de estos protocolos, junto con los GPIO, para la programabilidad y el envío de señales a periféricos sencillos. Estos tres protocolos serie son protocolos de bus. I2C y UART utilizan esquemas de direccionamiento, mientras que SPI funciona sin direccionamiento. Aunque SPI funcione sin direccionamiento, no deja de ser un protocolo de bus y sigue pudiendo utilizarse para seleccionar los dispositivos de bajada que van a recibir los datos.
El I2C (pronunciado I-cuadrado C, o a veces IIC por las siglas en inglés correspondientes a circuito inter-integrado) utiliza dos líneas (modos estándar, rápido y rápido plus) para controlar otros dispositivos; una línea es de reloj (SCL), mientras que la otra es de datos (SDA). Cuenta con tres modos, que se resumen en la tabla siguiente. Ten en cuenta que los valores de tiempo de subida/bajada presuponen la instalación de las típicas resistencias en serie en las entradas y salidas.
Modo |
Frecuencia de datos/velocidad de reloj |
Tiempo máximo de subida/bajada |
Tiempo mínimo de subida/bajada |
Direccionalidad |
Estándar |
100 kHz |
1000 ns |
- |
Bidireccional |
Rápido |
400 kHz |
300 ns |
20 ns* |
Bidireccional |
Rápido plus |
1 MHz |
300 ns |
20 ns* |
Bidireccional |
Alta velocidad |
3.4 MHz (bus de 100 pF) 1.7 MHz (bus de 400 pF bus) |
120 ns** |
15 ns** |
Bidireccional |
Ultrarrápido |
5 MHz |
50 ns |
25 ns |
Unidireccional |
*Supone VDD/VCC = 5,5 V. Se reduce linealmente si VDD/VCC es inferior
**Divide estos valores por 2 para la línea de reloj.
Tenga en cuenta que el modo ultrarrápido es el único en el que la comunicación se utiliza únicamente para las operaciones de escritura de bajada. Este modo también es importante, ya que nos ayuda a ver cuándo será necesario adecuar la impedancia del bus, lo que en la práctica es casi nunca. Si tomamos un límite muy conservador del 10 % en la longitud de la línea crítica, nos encontraremos con que la longitud crucial en estas líneas es de 0,32 m, es decir, mucho mayor que el tamaño de la mayoría de las placas que utilizarán el modo I2C. Si utilizamos la frecuencia de corte para el tiempo mínimo de subida/bajada con un límite del 10 % en la longitud crítica, llegamos a un valor mucho mayor de 0,92 m. Debemos tomar 0,32 m, un número más conservador, para el modo ultrarrápido. Cualquier línea I2C más corta que este valor no se comportará como una línea de transmisión y únicamente tendremos que preocuparnos del esquema de terminación.
Los puntos importantes en la terminación son la selección de las resistencias pull-up y en serie adecuadas. Las resistencias de pull-up y la capacitancia del bus de línea VDD/VCC forman un circuito RC de descarga y carga que proporciona una señal al receptor cuando el controlador conmuta. Los valores de las resistencias de pull-up (Rp) para las líneas de señal y de reloj deben respetar la siguiente desigualdad:
La capacitancia del bus se determina utilizando las fórmulas estándar para la impedancia del bus VCC, que se calcula utilizando las mismas ecuaciones que utilizaría para una línea de transmisión (ya sea microstrip o stripline). Así podrá resolver la capacidad del bus utilizando la impedancia y el retardo de propagación de la línea. Las resistencias en serie son opcionales según la norma I2C, aunque es posible incluirlas para proteger los dispositivos de los picos de tensión y ralentizar los tiempos de subida/bajada. Consulte la página 59 de la norma I2C para determinar el valor correcto de la resistencia en serie que debe emparejar con el valor de su resistencia de pull-up.
El protocolo SPI es similar al I2C. En este bus se utilizan un total de cuatro líneas y los componentes pueden disponerse de dos modos posibles. Si se utiliza un único dispositivo controlador para activar un único dispositivo de bajada, se trata simplemente de una topología punto a punto. La activación de varios dispositivos depende del número de salidas de selección de chip que proporcione el controlador (modo estándar). El segundo modo utiliza la conexión en cadena margarita, en la que una única salida de selección de dispositivo activa sucesivamente cada uno de los dispositivos de la propia cadena margarita.
A diferencia de I2C, los distintos parámetros de señalización en SPI son altamente configurables. A menos que esté utilizando una interfaz extremadamente rápida, puede aproximar el nivel de la señal a través de una interconexión como centro de datos (DC), ya que estará por debajo de la longitud crítica para un comportamiento de línea de transmisión. Luego ya podrá utilizar una resistencia en serie para terminar la salida de baja impedancia del conductor y garantizar la máxima transferencia de potencia. El método de descarga RC con la capacitancia de la traza mostrada anteriormente es capaz de controlar la corriente de salida y los tiempos de subida y bajada de tu interfaz.
El receptor-transmisor asíncrono universal (UART) es similar al I2C. Estas interfaces tienen una velocidad máxima de datos de unos 5 Mbps. También resulta sencillo trabajar con los dispositivos UART, ya que no se envía ningún reloj entre los dispositivos; todo se realiza de forma asíncrona. Tenga en cuenta que el reloj interno (del sistema) de cada dispositivo UART debe funcionar a un múltiplo de la velocidad en baudios (es decir, cada bit se muestrea N veces). Para la comunicación entre un único dispositivo controlador y un único dispositivo descendente se utilizan solamente dos hilos.
Tenga en cuenta que el formato de datos, los niveles de señal y la velocidad en baudios de un dispositivo UART son configurables con un circuito controlador externo. Por desgracia, esto también significa que hay pocas reglas ineludibles para el enrutamiento y el diseño de los dispositivos UART. Siga las directrices estándar de diseño de alta velocidad para determinar cuándo es necesaria la terminación, observando el comportamiento de la transición a la línea de transmisión (consulte el artículo que he enlazado anteriormente). Un método típico de terminación para reducir el rebasamiento es una terminación en serie. Tenga en cuenta que la UART puede estar en reposo a niveles altos o bajos y pueden ser necesarias resistencias de pull-up para establecer el nivel de reposo requerido. Asegúrese de comprobar las especificaciones del componente antes de añadir resistencias de pull-up.
Encontrará más información sobre la diferencia entre la temporización en los buses síncronos y asíncronos en esta presentación de Max Seeley durante la AltiumLive del 2018.
Si las reglas de SPI y UART parecen un poco vagas, esto se debe a que tiene más libertad para diseñar su interfaz a nivel de firmware. Una vez que cualquiera de estos estándares se ejecuta a frecuencias de borde rápidas, son susceptibles de sufrir interferencias, al igual que los estándares de señalización de alta velocidad. Sin embargo, al tener mucha flexibilidad en la especificación, normalmente puedes diseñar las pistas para que tengan una inductancia menor y reduzcan la interferencia inductiva. Esto le permite tener cierto margen a la hora de enrutar estas señales y hacer que funcionen muy fácilmente en su próximo sistema digital.
Cuando se diseñan sistemas digitales con estándares de señalización comunes, es posible hacerlo teniendo en cuenta las diferencias entre I2C, SPI y UART gracias a las reglas de diseño de Altium Designer®. El administrador de pilas de capas y el solucionador de campo 3D integrado de Simberian utilizan la geometría de la placa y la geometría de las pistas para extraer la capacitancia y las parásitas de los buses en las líneas de señal.
Altium Designer, en combinación con Altium 365, ofrece una integración sin precedentes en la industria electrónica que hasta ahora había quedado relegada al mundo del desarrollo de software, lo que permite a los diseñadores trabajar desde casa y alcanzar niveles de eficiencia sin precedentes.
Tan solo hemos rascado un poco la superficie de lo que es posible hacer con Altium Designer en Altium 365. Puede consultar la página del producto para obtener una descripción más detallada de sus características, así como alguno de los seminarios web a la carta.