Modificaciones en un Linksys WRT54GL V1.1

El router inalámbrico WRT54GL de Linksys es un equipo muy completo y asequible (unos 70 Euros). En Internet hay muchos recursos acerca de su modificación y mejora. Aunque existen muchas versiones similares y versiones de otros fabricantes yo me he centrado en este, pero lo que expongo aquí puede ser utilizado también, con pequeñas modificaciones, para otros equipos.

El equipo tiene unas prestaciones mas que aceptables para lo poco que cuesta:
Procesador Broadcom BCM5352EL Mips32 a 200Mhz, 16Mb de RAM DDR en un chip HY5DU1622ET (a 200Mhz la velocidad de la RAM es la misma que la del procesador!!).En  los 4Mb de Flash K8D3216UBC tiene instalado el sistema operativo, LINUX kernel 2.4 y queda algo de espacio para el usuario. La conectividad es spectacular: un switch de 4 puertos 10/100 AutoFXD, otro puerto de ethernet 10/100 autoFDX, wireless 54Mb (80211.g) basado en el chip Broadcom BCM 2050, con dos antenas de calidad!. También tiene 2 puertos serie, uno lo usa el sistema para la consola local y el otro está libre para el usuario. Como la salida es a niveles TTL de 3,3V hay que usar un conversor TTL-RS232 para poderlo conectar con otros equipos RS232. No es necesario este conversor para conectarlos con otros dispositivos que usen TTL, como un PIC. Por último tiene 16 bits de GPIO para entradas y salidas discretas, pero solo están documentados 7 de ellos, algunos se pueden usar para conectar una memoria SD. El consumo del conjunto es de alrededor de 250mA a 12V CC en reposo, supongo que aumentará dependiendo de las condiciones de uso porque el alimentador que proporciona el fabricante es de 1A.

Para equipar de Sistema Operativo a este router (a parte del que viene instalado de fábrica) existen muchas opciones, las dos principales son OpenWRT y DD-Wrt. Estos dos sistemas operativos son variantes de Linux muy modulares, orientadas al trabajo de router, pero que pueden daptarse para cualquier uso. Además proporcionan un SDK muy completo que permite compilar programas (en entorno linux) para el tarjet MIPS32.

Modificación 1: Convertidor TTL am RS232 doble.

No voy a inventar la rueda, en internet hay muchos recursos donde explican como realizar esta modificación: usando el MAX3232, que convierte de TTL 3,3V a RS232. se puede hacer esta modificación con mucha sencillez: http://www.wrtrouters.com/guides/dualserialport/
Sin embargo yo no tengo a mano ningún  MAX3232, usaré un MAX232. Como la alimentación y las entradas salidas son a 5V alimentaré de una de las fuentes internas del WRT54GL que produce 5V, y pondré unos limitadores basados en una resistencia y un diodo de silicio para evitar que las salidas y entradas al BCM5352 tengan niveles de 5V. Como no es posible encontrar el datasheet del chip no se si es tolerante a 5V, por lo que me curo en salud y limito la tensión a 3,3V + V diodo (0,7V) = ~4V. El los +5V los he tomado del condensador CK23, el positivo es el mas cerca el panel frontal y el negativo el cercano al panel trasero. Basta conectar el conector para cable plano JP1 en el conector del mismo nombre de la placa del WRT54GL, respetando la numeración de los pines.

El montaje funciona a la perfección. Una vez construido y conectado mediante un cable serie al PC (en TTYS0) podemos ver el arranque del router con algún programa de terminal como el realterm , configurado en Port a 115200 baudios 8, n, 1 y display Ansi.

Modificación 2: Ampliación de memoria a SDRAM a 32Mb DDR.

Normalmente no es necesario, pero si se van ha ejecutar programas potentes sería interesante esta memoria extra, aunque con 16Mb hay de sobra para el Sistema Operativo y programas de usuario.

ATENCION!!
Este proceso es muy delicado, las memorias y las pistas de circuito impreso son muy delicadas, no intentarlo sin una buena experiencia en soldar-desoldar SMD (son 66 paras espaciadas 0,65 mm!!!). Con herramientas especiales para soldar SMD esto no tiene ninguna complicación.

rimeramente hay que identificar la memoria que tiene instalada nuestro WRT54GL V1.1: es una Hnnix HY5DU1622ET de 128 Mbit organizada como 8MByte x 16bits. Una posible ampliación podría hacerse con una Hnnys HY5DU561622CT de 256Mbit organizada en 16MByte x 16. La única diferencia entre una y otra es el PIN 42 (A12) y el PIN 19 (DNU) de la HY5DU561622CT que son "no conectados" en la HY5DU1622ET. Por suerte el fabricante ha conectado la pista que une la pata 42 (A12) de la SDRAM con la correspondiente señal del procesador Broadcom, y la pata 19 (DNU) que ha de dejarse sin conectar está desconectada!. Solo hay que cambiar una por otra. Lo difícil es encontrar memorias de estas características que puedan comprarse por unidades. Yo usaré una de reciclaje, de un módulo de memoria SO-DIMM 256 M SDRAM 266Mhz de un ordenador portátil. También podría usar una Samsung K4H561638D que pueden encontrarse también en módulos SO-DIMM para ordenadores portátiles.

Con mucho cuidado se unen todas las patas de un lado del integrado con estaño de buena calidad y se apalanca con un cutter mientras tratamos de mantener el estaño que baña las patas fundido y fluido. Puede usarse un soldador de 30W con una punta de 1 mm.

En la foto superior ya está la memoria desoldada del módulo. Puede apreciarse que una isla de conexión de la hilera superior del circuito impreso ha desaparecido. Esta isla no tenía conexión y es más débil que las demás, pero hay que tener cuidado: si ocurre esto en el WRT56GK la reparación (con finísimos alambres de cobre) será muy laboriosa. Estas son las herramientas de "baja tecnología" usadas:

y esta la memoria del WRT54GL a medio desoldar:

Por fin está desoldada, y no se ha roto ninguna pista!!. Con estaño y flux limpiar bien las islas de conexión para eliminar los posibles cortocircuitos. Luego SIN AÑADIR ESTAÑO A LAS PATAS (solo debemos fundir en que hayamos dejado previamente en las islas y en las patas de la memoria) vamos calentando las 66 patas una a una con la punta del soldador y apretando para que hagan contacto con el circuito impreso. Para esto he usado un soldador de 15Watios con una punta B05D.  Si todo va bien tendremos esto:


La memoria nueva de 32Mb soldada y la vieja de 16Mb para repuesto.

Atención: aunque tengo bastante experiencia tuve que soldar y desoldar las memorias 3 veces: quito la vieja y pongo la nueva: no funciona, quito la nueva y pongo la vieja: tampoco. El router está muerto totalmente, ni siquiera arranca el CFE (botloader). Quito la original de nuevo y ya he roto 5 pistas de circuito impreso con tanta manipulación: las reparo con hilillos sacados de un conector de cable plano y sueldo la nueva. EXITO: por fin funciona!!!. Probablemente en las anteriores pruebas había alguna pista rota que no había visto.

Durante la carga del CFE (si se usa la el puerto serie para monitorizar el arranque del router) se mostrará un mensaje similar a :

CFE version 1.0.37 for BCM947XX (32bit,SP,LE)
Build Date: Tue Jun 20 16:22:41 CST 2006 (root@localhost.localdomain)
Copyright (C) 2000,2001,2002,2003 Broadcom Corporation.

Initializing Arena
Initializing Devices.

No DPN
et0: Broadcom BCM47xx 10/100 Mbps Ethernet Controller 3.90.37.0
CPU type 0x29008: 200MHz
Total memory: 32768 KBytes

Evidentemente antes de la modificación solo mostraba Total Memory: 16384 KBytes.

Modificación 3: Añadir un conector para memorias SD.

Después de la ampliación de RAM sería interesante ampliar la FLASH, pero el circuito impreso no está preparado para soportar chips de flash de mas capacidad. Sin embargo es posible instalar un conector para memorias SD lo que proporcionaría más de 1Gb de almacenamiento remobible, de lectura y escritura.

En proceso de documentación, mirar
http://wiki.openwrt.org/OpenWrtDocs/Customizing/Hardware/MMC