Categories
Electrónica

ESP32-S3 Pi Zero 2 W. USB-UART y USB-OTG. Parte I. Funciones.

USB-UART y USB-OTG

La placa de desarrollo se puede alimentar, y programar, de la misma manera que lo hace cualquier versión Pi Zero 2W, con dos puertos USB (USB-C en el caso de Orange Pi Zero 2W y Micro USB en el caso de Raspberry Pi Zero 2 W). En el diseño del ESP32-S3 Pi Zero 2 W se utilizan dos USB-C. Son más modernos y más versatiles. Están dispuestos a la misma distancia que los Micro USB de la Raspberry Pi Zero 2 W.

Raspberry Pi Zero 2 W Dimensions
Raspberry Pi Zero 2 W Dimensions
ESP32-S3 Pi Zero 2 W Dimensions USB
ESP32-S3 Pi Zero 2 W Dimensions USB

El estandar USB-C describe los conectores como reversibles y pueden existir con un número diferente de PINes, hasta 12+12. Dado que mécanicamente estamos usando dos puertos USB-C que funcionan como USB 2.0, solo necesitamos 4 pines (VBUS con GND y D- con D+) mas los pines CC1 y CC2 (Configuration Channel).

Los puertos están etiquetados como USB-OTG y USB-UART.

El situado a la izquierda (USB-OTG) es directo a los PINes USB_D- y USB_D+ en el ESP32-S3. El situado a la derecha, a través de un chip, CH343K, se puede utilizar como interfaz serie RS-232. Ambos son válidos para programar y alimentar el ESP32-S3 Pi Zero 2 W.

USB-OTG

El puerto USB-OTG es un interfaz USB Serial/JTAG nativo con capacidades OTG (On-The-Go). Esto permite disponer de un interfaz que permite que el ESP32-S3 cambie de rol según lo que necesites, bien sea, Host (Maestro) o Device (Esclavo).

Device (Esclavo)

Es el más común. Puedes conectar la placa al PC, y el ESP32-S3 se puede comportar como se desee:

  • HID: Un teclado, un ratón o un gamepad.
  • MSC: Una unidad de disco flash (puedes hacer que los 16MB de memoria interna aparezcan como un pendrive en tu PC).
  • CDC: Un puerto serie de alta velocidad (más rápido que el CH343K).
  • MIDI: Un instrumento musical digital.

Host (Maestro)

En este modo permite conectar periféricos USB al ESP32-S3 a través de cable adaptador OTG, algunos de estos podrían ser:

  • Un teclado USB y leer lo que se escribe.
  • Una cámara USB (UVC) y capturar imágenes.
  • Un pendrive y leer/escribir archivos en él.

No será viable conectar todos los dispositivos USB de está manera, no al menos de una manera simple, generalmente por problemas de alimentación. El USB funciona a 5V y el ESP32-S3 funciona a 3.3V, este no puede alimentar un dispostivo conectado en el puerto USB-C OTG a 5V. Existen soluciones a este asunto pero no están implementadas específicamente en esta placa.

Para poner el ESP32-S3 en modo ROM Bootloader Mode (Download Mode o Boot Mode), el ordenador envía un comando especial a través del protocolo USB (cambiando la velocidad de baudios a 1200 bps, que es el estándar para forzar el ROM Bootloader Mode). El chip ESP32-S3 entra en modo programación en ese momento, y es posible subir el nuevo firmware al chip.

USB-UART

El puerto USB-UART es un interfaz RS-232 (U0RXD, U0TXD, RTS y CTS/DTR), a través de un chip CH343K que se puede utilizar para programar el ESP32-S3, con funciones de auto reseto para no tener que pulsar la secuencia RESET/BOOT en el ESP32-S3. También como consola serie para depurar el programa.

El interfaz USB-UART puede ser más lento que USB-OTG pero dado que en un reseteo inesperado del ESP32-S3 este interfaz no desaparece del PC puede resultar más conveniente utilizarlo.

Para poner el ESP32-S3 en modo ROM Bootloader Mode (Download Mode o Boot Mode) existen dos alternativas.

Download Mode manual

Se puede establecer el modo programación manualmente siguiendo este procedimiento:

  1. Se mantiene pulsado el botón BOOT, indicando al micro que se prepare para Boot Mode.
  2. Se pulsa el botón RESET una vez, forzando un reseteo que leerá el estado Boot Mode.
  3. Se puede soltar el botón BOOT.
  4. El micro debería estar en Boot Mode.

Download Mode Automático

El proceso para establecer el modo programación automáticamente, se basa en utilizar los PINes, DTR (Data Terminal Ready) y RTS (Request To Send) del puerto RS-232 que originalmente servían para controlar módems de una forma particular.

Cuando el software de programación (esptool) quiere subir el código, manipula estas líneas DTR/RTS de forma precisa y en orden, a través del puerto USB-UART y el chip CH343K. Usando dos transitores, es posible replicar los pasos que se realizan en el modo Download Mode manual. Un esquema de como están conectados DTR y RTS es el siguiente:

Esquemático RTS y DTR
Esquemático RTS y DTR

En el proximo articulo veremos como son los esquemáticos de los puertos USB-OTG y USB-UART.

Categories
Internet

¿Qué es una dirección IP?

Todo el mundo parece saber lo que es una una dirección IP pero supongo que en ningún sitio aparece una explicación rigurosa. Una que sea definitiva para todos. Aquí vamos, una más, por si esta pudiera ser la definitiva.

Una dirección IP (IPv4) es un número binario de 32 bits que identifica a un host en una red TCP/IP.

Una dirección IP se puede representar de varias maneras, todas posibles y válidas y unas más usadas que otras:

  • 11000000 10101000 10111110 00000001 en un formato binario.
  • 192 168 190 1 en un formato decimal.
  • C0 A8 BE 01 en un formato hexadecimal.
  • 300 250 276 001 en un formato octal.

Todas son válidas y todas son direcciones IP, aunque no se usan todas. Típicamente solo se utiliza el formato decimal, separado por puntos. Podemos obtener la dirección IP de nuestro equipo ejecutando alguno de los comandos disponibles en cada sistema operativo:

[root@lucas ~]# ip addr show dev enp2s0
  3: enp2s0: mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:e0:5c:8a:5a:6a brd ff:ff:ff:ff:ff:ff
    inet 192.168.190.1/24 brd 192.168.190.255 scope global noprefixroute enp2s0
      valid_lft forever preferred_lft forever

Igualmente podemos mostrar la dirección IP para un Sistema Operativo como Microsoft Windows 10 Profesional, ejecutando el comando ipconfig.

Dirección IP en Microsoft Windows 10 Profesional
Dirección IP en Microsoft Windows 10 Profesional

Cualquiera que sea la manera, en la que se muestre una dirección IP para cada Sistema Operativo particular, cumple la misma función: identificar al host que la define. Pero no sería suficiente con que definiera quién es, sino que, además, cumpliera el resto de los requisitos de las redes TCP/IP.

Cronología

Durante un tiempo, en los principios de las redes IP, las direcciones IP se categorizaron en diversos grupos (llamados clases) para identificar a todas las direcciones IP que pertenecían a una misma organización (Red). Utilizando los primeros bits de una dirección IP (en formato binario) se podían identificar a que grupo pertenecía esa dirección IP:

  • Las direcciones que comenzaban por 0000 0000 serían direcciones de Clase A.
  • Las direcciones que comenzaban por 1000 0000 serían direcciones de Clase B.
  • Las direcciones que comenzaban por 1100 0000 serían direcciones de Clase C.

Las direcciones de Clase A definirían grupos de IPs de al menos 16.777.216 de IPs suficientes para un gran numero de equipos dentro de la misma red. Las direcciones IP de Clase B definirían grupos de 65.536 IPs y las direcciones IP de Clase C definirían grupos de 256 IPs. Existirían otros grupos diferentes con propósitos especiales y que se definieron, de la misma manera con otros propósitos:

  • Direcciones de Clase D (direcciones multicast) que se usan para distribuir información a varios grupos de dispositivos al mismo tiempo, como comodines de direcciones IP, empezarían por 1110 0000.
  • Direcciones de Clase E (direcciones experimentales) que no se sabe muy bien para qué se utilizaron y empezarían por 1111 0000.

El agrupamiento de direcciones IP, utilizando los primeros bits de la dirección IP, no ofrecía un manera flexible de establecer grupos de dispositivos en diferentes tamaños. Las direcciones IP de Clase A utilizarían grupos muy grandes, las direcciones IP de Clase C grupos demasiado pequeños y las direcciones IP de Clase B, ni lo uno ni lo otro, insuficientes para algunos casos y excesivo para otros. Es en ese momento en el que los ingenieros aplicarían una técnica que permitiría segmentar los grupos mas grandes en otros mas pequeños (o los mas pequeños en otros más grandes).

La Máscara de Red

Es otra dirección IP (un número binario de 32 bits) que se utilizaría con el propósito de segmentar las redes de Clase A, B o C en otras mas pequeñas (o más grandes). La técnica consiste en aplicar una regla, AND lógico, entre la dirección IP del host y la máscara aplicada a este. Esto produce el efecto de segmentar la red. Este procedimiento se aplica hoy en día en todos los sistemas operativos del mercado actual pero no fue así, y hace tiempo, existieron equipamientos de red que no tenían la posibilidad de aplicar la regla de la máscara de red:

11000000 10101000 10111110 00000001  =  192.168.190.1
11111111 11111111 11111111 00000000  =  255.255.255.0
======== ======== ======== ========
11000000 10101000 10111110 00000000  =  192.168.190.0

La máscara de red permite identificar en la dirección IP la parte de red y la parte de host. La parte de host identificaría a este, dentro de la parte de red. Pertenecería a esta.

Segmentar, utilizando máscaras de red, permite aprovechar mejor las direcciones IPs. Se pueden utilizar segmentos mas pequeños (o mas grandes) que los de Clase A, B o C. El siguiente es un ejemplo que separa una dirección de Clase C (256 hosts) en dos segmentos, mas pequeños e iguales (128 hosts).

11000000 10101000 10111110 00000001  =  192.168.190.1
11111111 11111111 11111111 10000000  =  255.255.255.128
======== ======== ======== ========
11000000 10101000 10111110 10000000  =  192.168.190.0
-------------------------------------------------------
11000000 10101000 10111110 10000001  =  192.168.190.129
11111111 11111111 11111111 10000000  =  255.255.255.128
======== ======== ======== ========
11000000 10101000 10111110 10000000  =  192.168.190.128

Algunas de las direcciones IP, dentro de la misma red, tienen significados especiales. La primera de todas, la que tiene todos sus bits, en la parte de host a 0 binario, se denomina dirección de red y sirve para identificar al conjunto de todos los activos de esa red. La última de todas, la que tiene todos sus bits, en la parte de host a 1 binario, se denomina dirección de broadcast o difusión, e identifica a cada uno de los activos al mismo tiempo.

Estas direcciones, la de red y la de difusión, tienen propósitos específicos dentro del protocolo IP, por ejemplo la dirección de red se utiliza para indicar la agrupación de todos los activos de esa red. Cuando se necesita conocer el camino (ruta) hacia una red se indica con la dirección de red. Cuando se necesite enviar un mensaje para todos los activos de la red se puede indicar la dirección de broadcast o difusión.

Esto debería ser una definición ajustada de lo que es una dirección IP. Existen aspectos sobre los que no se han hablado en ese post pero supongo que, por ahora, es suficiente. Otro día, mas.