Wifi para nuestras FPGA
Vamos a montar y configurar un par de adaptadores que, por apenas unos euros, nos van a proporcionar conectividad wifi en algunos de los cores de nuestras FPGA. Usaremos el ya conocidísimo chip ESP8266 y la fantástica placa SiDi de ManuFerHi, compatible a nivel de firmware con la mítica MiST.
Para el montaje hemos elegido una placa clónica de la Wemos D1 Mini, una placa de desarrollo NodeMcu Lua que a su vez integra un ESP8266 en su versión 12F. La ventaja de esta placa es que incorpora un puerto serie a través del conector micro-USB, por lo que solo será necesario un cable de este tipo para programarla. Además funciona a 3.3V, con lo que es directamente compatible con nuestra placa SiDi a nivel de señales.
La placa se acompaña de una serie de pines listos para soldarlos de la manera que nos sea mas conveniente.
De todos los pines disponibles en el chip tan solo usaremos los correspondientes a la entrada de alimentación 3.3V, GND, TX y RX. En la Wiki de la SiDi podemos ver a su vez la disposición de estos pines en el puerto serie de la placa:
Tan solo necesitamos montar una pequeña placa adaptadora que nos permita pinchar el chip directamente en el puerto serie de la SiDi y conecte cada pin del chip con su correspondiente en la FPGA. Para ello hemos utilizado una placa perforada que hemos cortado a la medida de la D1 Mini, y sobre la que hemos soldado cuatro pines que harán de conector macho. Conectamos con cables estos cuatro pines a los correspondientes de la D1 Mini y soldamos ambas usando los pines que venían con la placa.
La parte hardware ya está terminada y es hora de programar el chip. Aquí nos encontramos con dos firmwares distintos que ofrecen dos modos de funcionamiento diferentes que nos servirán dependiendo del core que vayamos a usar, por lo que veremos los dos.
- Firmware Zimodem
Este firmware es desarrollado por Bo Zimmerman inicialmente para dar conectividad a los Commodore 64, haciendo que el ESP8266 responda a los comandos Hayes que se utilizaban en los módems antiguamente. Esto nos permitirá usar cualquier aplicación que sirviera para conectarse telefónicamente (por ejemplo, a las BBS), pero en lugar de marcar un número telefónico estaremos «marcando» una dirección de internet.
Mediante este firmware podremos conectarnos a cualquiera de las BBS que operan actualmente vía telnet desde equipos que dispongan de puerto serie, como el Amiga o el C64.
Para flashear el firmware usaremos la aplicación NodeMCU Flasher para windows. Una vez descargada, conectamos nuestra placa wifi al PC con un cable USB y veremos como aparece un nuevo puerto serie en el administrador de dispositivos.
Si arrancamos la aplicación, podremos seleccionar este puerto en el desplegable «COM Port»:
El firmware correspondiente a esta placa lo podemos descargar de aquí. Tan solo tendremos que seleccionarlo en la pestaña «Config», marcando 0x00000 como dirección de inicio del flasheo.
En «Advanced» podemos elegir la velocidad a la que se conectará la aplicación. Si volvemos a la pestaña «Operation» ya podemos pulsar «Flash» y en unos segundos el chip estará listo.
Ya podemos configurarlo conectándonos al chip por el puerto serie, bien usando el conector micro-USB o los pines de la placa adaptadora. Si abrimos en el PC una aplicación como PuTTY nos podremos conectar a 1200 baudios, que es la velocidad a la que está configurado por defecto.
Con el comando AT+CONFIG podremos seleccionar la red wifi que queramos usar, introducir la contraseña y configurar el resto de parámetros de la conexión (velocidad, bits de datos, bits de parada, etc.). Si ahora lo pinchamos en la SiDi podemos intentar utilizarlo desde alguno de los cores que tenemos disponibles.
En el core de Amiga, usamos la aplicación NComm y seleccionamos la velocidad de transmisión que hemos elegido anteriormente, y probamos a conectarnos a una BBS con el comando:
ATDT»direccion:puerto»
Para el core de Commodore 64 primero hay que asegurarse que el puerto de usuario está en modo UART:
A partir de ahí podemos usar aplicaciones como CCGMS para conectar de igual manera que hicimos en el Amiga.
- Firmware esp_slip_router
El firmware esp_slip_router implementa el protocolo SLIP (Serial Line Internet Protocol), que nos va a permitir establecer una conexión IP punto a punto entre el ESP8266 y el ordenador a través del puerto serie. Será el chip quien actúe como router y permita la salida a internet de la máquina que está conectada a él. Por tanto, ésta deberá contar con la infraestructura necesaria para manejar comunicaciones TCP/IP, como será el caso del core de Amiga.
El flasheo del chip será similar al del firmware Zimodem, usando NodeMCU Flasher. En este caso tendremos que descargarnos los dos ficheros de esta página. Al cargarlos en la aplicación, seleccionaremos la dirección 0x00000 para el archivo 0x00000.bin y 0x10000 para el archivo 0x100000.bin:
En el caso de usar Linux, podremos hacer lo mismo con la herramienta esptool.py, cambiando el puerto serie por el que corresponda así como la ruta de los ficheros:
esptool.py --port /dev/ttyUSB0 write_flash -fs 32m 0x00000 0x00000.bin 0x10000 0x10000.bin
A partir de este momento el chip queda configurado con la IP 192.168.240.1 y para comunicarnos con él tendremos que entrar por telnet a esa IP usando el puerto 7777 a través del puerto serie. Para ello tendremos que configurar una conexión SLIP en nuestro PC. Aquí es donde se hace casi obligatorio usar Linux/Raspbian por las facilidades que nos ofrece para hacer eso mismo, al contrario que las versiones recientes de Windows.
Con nuestra placa conectada al USB de una máquina Linux o una Raspberry, y suponiendo que el chip aparece en el puerto /dev/ttyUSB0, tecleamos lo siguiente:
sudo slattach -L -p slip -s 115200 /dev/ttyUSB0&
sudo ifconfig sl0 192.168.240.2 pointopoint 192.168.240.1 up mtu 1500
Hemos configurado un nuevo interfaz sl0, que conecta nuestro ordenador (192.168.240.2) directamente con nuestro chip wifi (192.168.240.1). Ahora podemos conectarnos a él mediante telnet:
telnet 192.168.240.1 7777
Nos aparecerá el promp CMD> y con una serie de comandos podremos configurar el chip, indicando el nombre de nuestra red wifi y su contraseña así como la velocidad en baudios a la que nos conectaremos a él:
CMD>set ssid <nuestra_red>
CMD>set password <nuestra_contraseña>
CMD>set use_ap 0
CMD>set speed 160
CMD>set bitrate 38400
CMD>save
CMD>reset
Para instalar la pila TCP/IP en el core de Amiga vamos a utilizar Miami Deluxe, que podemos instalar siguiendo las instrucciones de este post del foro Abime.
En Hardware creamos un nuevo interfaz de tipo Serial:
Seleccionamos la velocidad en baudios (38400) y el control de flujo (XON/XOFF). En Modem settings… marcamos Null modem:
En Dialer creamos un nuevo marcador telefónico y eliminamos todos los comandos que aparecen en Dial scripts:
Seguimos en Interfaces, donde creamos un nuevo interfaz de tipo SLIP dial-out, seleccionando el puerto serie y el marcador telefónico creados anteriormente:
Finalmente introducimos la IP del Amiga (192.168.240.2) y nuestra puerta de enlace (usualmente nuestro router ADSL, 192.168.1.1):
Solo falta añadir en Database el servidor DNS que queramos usar (por ejemplo, el de Google) asociado al interfaz sl0:
Si ahora volvemos a Interfaces y seleccionamos el que hemos creado, al pulsar Online se establecerá por fin la conexión:
Con la conexión establecida ya podemos utilizar cualquier aplicación de internet, por ejemplo algún cliente FTP…
…chatear en el IRC…
…o intentar navegar por la WWW…
Comentarios recientes