Bueno, pues el tema de los GPIO va viento en popa..... para empezar creamos el siguiente script:
#!/bin/sh
for gpio in $(seq 0 39)
do
echo $gpio > /sys/class/gpio/export
done
echo out > /sys/class/gpio/gpio0/direction
echo out > /sys/class/gpio/gpio1/direction
echo out > /sys/class/gpio/gpio2/direction
echo out > /sys/class/gpio/gpio3/direction
echo out > /sys/class/gpio/gpio6/direction
echo out > /sys/class/gpio/gpio7/direction
echo out > /sys/class/gpio/gpio8/direction
echo out > /sys/class/gpio/gpio10/direction
echo out > /sys/class/gpio/gpio11/direction
echo out > /sys/class/gpio/gpio14/direction
echo out > /sys/class/gpio/gpio15/direction
echo out > /sys/class/gpio/gpio16/direction
echo out > /sys/class/gpio/gpio17/direction
echo out > /sys/class/gpio/gpio18/direction
echo out > /sys/class/gpio/gpio19/direction
echo out > /sys/class/gpio/gpio20/direction
echo out > /sys/class/gpio/gpio21/direction
echo out > /sys/class/gpio/gpio24/direction
echo out > /sys/class/gpio/gpio26/direction
echo out > /sys/class/gpio/gpio27/direction
echo out > /sys/class/gpio/gpio28/direction
echo out > /sys/class/gpio/gpio29/direction
echo out > /sys/class/gpio/gpio30/direction
echo out > /sys/class/gpio/gpio31/direction
echo out > /sys/class/gpio/gpio32/direction
echo out > /sys/class/gpio/gpio33/direction
echo out > /sys/class/gpio/gpio36/direction
echo out > /sys/class/gpio/gpio38/direction
echo out > /sys/class/gpio/gpio39/direction
while true
do
echo 1 > /sys/class/gpio/gpio0/value
echo 1 > /sys/class/gpio/gpio1/value
echo 1 > /sys/class/gpio/gpio2/value
echo 1 > /sys/class/gpio/gpio3/value
echo 1 > /sys/class/gpio/gpio6/value
echo 1 > /sys/class/gpio/gpio7/value
echo 1 > /sys/class/gpio/gpio8/value
echo 1 > /sys/class/gpio/gpio10/value
echo 1 > /sys/class/gpio/gpio11/value
echo 1 > /sys/class/gpio/gpio14/value
echo 1 > /sys/class/gpio/gpio15/value
echo 1 > /sys/class/gpio/gpio16/value
echo 1 > /sys/class/gpio/gpio17/value
echo 1 > /sys/class/gpio/gpio18/value
echo 1 > /sys/class/gpio/gpio19/value
echo 1 > /sys/class/gpio/gpio20/value
echo 1 > /sys/class/gpio/gpio21/value
echo 1 > /sys/class/gpio/gpio24/value
echo 1 > /sys/class/gpio/gpio26/value
echo 1 > /sys/class/gpio/gpio27/value
echo 1 > /sys/class/gpio/gpio28/value
echo 1 > /sys/class/gpio/gpio29/value
echo 1 > /sys/class/gpio/gpio30/value
echo 1 > /sys/class/gpio/gpio31/value
echo 1 > /sys/class/gpio/gpio32/value
echo 1 > /sys/class/gpio/gpio33/value
echo 1 > /sys/class/gpio/gpio36/value
echo 1 > /sys/class/gpio/gpio38/value
echo 1 > /sys/class/gpio/gpio39/value
sleep 1
cat /sys/class/gpio/gpio0/value
echo 0 > /sys/class/gpio/gpio0/value
echo 0 > /sys/class/gpio/gpio1/value
echo 0 > /sys/class/gpio/gpio2/value
echo 0 > /sys/class/gpio/gpio3/value
echo 0 > /sys/class/gpio/gpio6/value
echo 0 > /sys/class/gpio/gpio7/value
echo 0 > /sys/class/gpio/gpio8/value
echo 0 > /sys/class/gpio/gpio10/value
echo 0 > /sys/class/gpio/gpio11/value
echo 0 > /sys/class/gpio/gpio14/value
echo 0 > /sys/class/gpio/gpio15/value
echo 0 > /sys/class/gpio/gpio16/value
echo 0 > /sys/class/gpio/gpio17/value
echo 0 > /sys/class/gpio/gpio18/value
echo 0 > /sys/class/gpio/gpio19/value
echo 0 > /sys/class/gpio/gpio20/value
echo 0 > /sys/class/gpio/gpio21/value
echo 0 > /sys/class/gpio/gpio24/value
echo 0 > /sys/class/gpio/gpio26/value
echo 0 > /sys/class/gpio/gpio27/value
echo 0 > /sys/class/gpio/gpio28/value
echo 0 > /sys/class/gpio/gpio29/value
echo 0 > /sys/class/gpio/gpio30/value
echo 0 > /sys/class/gpio/gpio31/value
echo 0 > /sys/class/gpio/gpio32/value
echo 0 > /sys/class/gpio/gpio33/value
echo 0 > /sys/class/gpio/gpio36/value
echo 0 > /sys/class/gpio/gpio38/value
echo 0 > /sys/class/gpio/gpio39/value
sleep 1
cat /sys/class/gpio/gpio0/value
done
De esta forma creamos las carpetas con las exportaciones, y posteriormente lanzamos en un bucle infinito una salida a "1" en todos los GPIO disponibles a la vez, esperamos un segundo, y lanzamos una salida a "0" con otro segundo de espera... en definitiva, lanzamos una salida tipo onda cuadrada de dos segundos de duración.... Nótese como evitamos los GPIO conocidos, o sea, los de los Leds y los de los pulsadores.
Acto seguido tomamos el osciloscopio y procedemos a medir... lo primero es tener en cuenta que los puntos en la placa base del router son muy pequeños, por lo que en mi caso para evitar problemas y cortocircuitos que puedan derivar en la destrucción del router, he colocado una aguja de coser mediante dos bridas a la punta.....
Y ahora comenzamos a tocar en todos los puntos y nodos cerca al CPU que encontremos... a ver, si bien aparentemente no se usan esos GPIO extra, es bien sabido que todas las placas base tienen revisiones y a veces se prevee colocar componentes que luego no se usan, pero dejan las pistas ya puestas por si en revisiones posteriores se usa, asi que es probable que alguna de las pistas del circuito lleve la unión de un GPIO del CPU, pero sea no usado... o bien sea para alguna función que no hace falta....
Tras un buen rato, he encontrado 3 puntos de momento, y no descarto mas...
Como podemos ver, uno esta cerca del CPU, y los otros dos en el chip que se encarga de la conexión telefónica.... No descarto que el del CPU sea el inicio que desemboca en uno de los otros dos puntos, pero aun no lo he investigado.... Respecto a los otros dos, esta claro que si es del circuito encargado de la conexión telefónica, en la radio wifi no se va a usar, asi que... son nuestros!!!!!
Ahora hay que identificarlos, para lo cual hace falta un poco de paciencia.... con el siguiente script:
#!/bin/sh
while true
do
echo 1 > /sys/class/gpio/gpio0/value
sleep 1
cat /sys/class/gpio/gpio0/value
echo 0 > /sys/class/gpio/gpio0/value
sleep 1
cat /sys/class/gpio/gpio0/value
done
Lo que hacemos es crear la onda cuadrada en el GPIO 0... Medimos con el osciloscopio... si no se ve nada, no es el 0, asi que sustituir donde pone "gpio0" por "gpio1" y repetir la medida... si no, continuar con gpio2, gpio3..... en algun momento veremos en el osciloscopio esto:
Esa interrupción es el paso de "1" a "0" y subida a "1" a intervalos de 1 segundo..... Hemos identificado el GPIO.....
A ver si tengo un hueco, los identifico, lo comento e investigo a ver si veo mas.... con 3 tenemos suficientes para el lector de tarjetas, porque el cuarto necesario, una entrada en este caso, puede ser el del pulsador de wifi, que no se usa, y encima en Mi router se rompió en una de las manipulaciones.....
Fotos en calidad alta:https://docs.google.com/file/d/0B3he-uebZ2asSk1lc1FjVGdFNm8/edithttps://docs.google.com/file/d/0B3he-uebZ2asVTQ1WlFUSU1NVmc/edithttps://docs.google.com/file/d/0B3he-uebZ2asVTQ1WlFUSU1NVmc/editSeguiremos informando....