Puertos y Buses. Generalidades
Están ahí, los usamos a diario sin darnos cuenta, hablamos de ellos. Los puertos y los buses son los encargados de que haya comunicación
entre dispositivos microncontrolados. Son conceptos muy amplios, y
abarcan desde puertos tangibles como los USB a intangibles como puertos
internos de un SOC (System on a chip), al igual que tenemos buses como
el cable del teclado o buses de fibra óptica. Mucha gente usa el termino “puerto” y “bus” de manera indistinta
como si se tratase de lo mismo, de hecho yo he hablado de puerto USB
cuando USB significa “Universal serial Bus”. Y es que son dos conceptos
inherentes el uno del otro.
Tal y como yo lo entiendo el puerto es el punto de entrada y/o salida de los buses.
Haciendo una analogía tenemos dos dispositivos que serán mi casa y la
casa de mi vecino, los puertos serían las puertas de ambas casa y el bus
sería el pasillo.
En qué se diferencia un puerto de otro
Tenemos muchos tipos de puertos y de muchas características distintas. Los puertos paralelos,
como su propio nombre indica, tienden a enviar la información en mayor
medida de forma paralela, lo cuál hace que usen buses con mayor número
de cables o pistas. Los puertos serie son los que más se usan, USB, UART, I2C, CAN bus, RS232 son puertos serie. Por tanto van a tender a usar pocos cables y la información se enviará secuencialmente.
Por otro lado podemos distinguir entre buses síncronos y asíncronos.
La diferencia entre ambos reside en que a la hora de comunicar
dispositivos que trabajan a frecuencias distintas necesiten o no de una
señal de sincronización.
La mayoría de los puertos que vamos a
presentar a continuación son puertos serie y asíncronos, en la mayoría
se usan buses de 3 ó 4 pistas cómo mínimo más alguna opcional. Entonces,
¿En qué se diferencian? A nivel eléctrico encontramos diferencias en cuanto a voltajes y a nivel computacional encontramos diferentes protocolos de comunicación. Veamos más concretamente las características de cada uno.
Algunos tipos de Buses
Cómo electrónico, los puertos de los que
voy a hablar son los principales puertos de comunicación entre
microcontroladores, existen otros para redes de Internet, etc…que no voy
a tratar. No pretendo hacer un copia y pega de la información que
podéis encontrar en Wikipedia, quiero esclarecer las dudas sobre estos
puertos que me han ido surgiendo según los he tenido que ir utilizando
para que antes de que os veáis en mi situación tengáis varios conceptos
claros.
I2C
Es un bus que está formado por 2 cables conocidos como SDA y SCL más 1 para conectar las masas (GND)
de los dispositivos, seguramente os suene verlos en Arduino. Con este
tipo de bus podéis conectar bastantes dispositivos entre sí.
Contructivamente lo único que hace falta es que conectéis una
resistencia de 2.2KOhm de algún punto de SDA a Vcc y otra resistencia de
2,2KOhm desde un punto de SCL hasta Vcc, es decir, que las líneas SDA y SCL deben tener una resistencia de pull-up.
También es importante decir que en cada momento uno de los dispositivos toma el papel de maestro y el resto de esclavos.
El maestro genera una señal de reloj por SCL que se usará para
sincronizar todos los dispositivos. Y por SDA viaja la información
propiamente dicha. Cada esclavo debe tener configurada una dirección de
esclavo. Esta dirección es una variable de 8 bits donde los 7 primeros
son un número en binario y el último bit indica si es una lectura o
escritura lo que quiere hacer el maestro.
Existen dos escenarios distintos, o bien el maestro es un escritor en los esclavos, o bien el maestro es el que pide a los esclavos que le envíen información. En cualquier caso la comunicación se realiza con la siguiente secuencia:
- Se configuran todas las direcciones de esclavos
- El maestro envía una dirección de esclavo más el bit de lectura/escritura e indica además cuantos bytes será de larga de comunicación.
- El esclavo se prepara enviar la información solicitada o para recibir la siguiente información.
- O bien el esclavo envía información o bien el maestro envía información.
- Todos los esclavos vuelven a estar disponibles de nuevo.
UART y USART
Las siglas de estos buses significan
“Universal Asynchronous Receiver/Transmitter” y “Universal synchronous
Asynchronous Receiver/Transmitter” respectivamente. En general las dos
diferencias que hay entre ellos es que el USART puede trabajar en modo
síncrono y asíncrono y puede ir más rápido (más baudios) mientras que el
UART sólo funciona de manera síncrona.
BAUDIO:
Es el número de símbolos por segundo, importante no confundir con tasa
de bits por segundo, ya que cada símbolo puede suponer el envío de más
de 1 bit.
Estos buses están compuestos por 3 pistas
fundamentales: TX, RX y GND. De tal manera que el pin TX de un
dispositivo esté conectado RX del otro dispositivo y viceversa y que las
masas de ambos estén conectadas. Si sólo conectamos un TX a un RX, la
comunicación puede existir de manera unidireccional, es decir, que sólo 1
envía y sólo 1 recibe. No es el mejor bus para comunicar más de 2
elementos, de hecho no lo recomiendo para esto. Es mejor abrir 1 puerto
UART distinto para cada dispositivo al que quieras conectarte. Lo que
hace muy útil a este puerto es que trabaja con niveles lógicos TTL
(transistor-transistor logic) lo cual hace que dos micros se puedan
comunicar sin necesidad de convertir los voltajes con
transreceptores/drivers.
Es muy utilizado para programar los
microprocesadores de sistemas embebidos con un ordenador debido a que no
hace falta que los micros traigan un bootloader precargado. Si queremos
programar nuestro micro a través de un puerto UART tan sólo necesitamos
un cable FTDI (con TX, RX, GND y Vcc conectados a nuestro micro) y un
programa adecuado.
Esquema cable FTDI:
Como me estoy alargando continuaré en otro artículo hablando sobre CAN bus y RS-232.
Fuente:
No hay comentarios:
Publicar un comentario