2020/04/23

Métodos para identificar el pinout de puertos seriales de dispositivos embebidos

Nos hallamos ante un dispositivo, por ejemplo un router, al que queremos acceder por el puerto serial. El enfoque que voy a desarrollar parte de unos conocimientos muy limitados de electrónica en general y digital en particular.

¿Por qué el puerto serial? Quizás es la única puerta abierta.



Buscar en el manual


Claramente es la fuente más confiable, mejor comprobar que las versiones correspondan.

En el caso de computadoras y microcontroladores es relativamente sencillo, pues la UART es una opción explícita, por ejemplo en la raspberry, pero en otros dispositivos donde no está expuesta y suele estar como canal de diagnóstico.



Buscar en Internet


Suele ocurrir que alguien ya lo investigó, nuevamente, comprobar que corresponda al equipo que tenemos. Por ejemplo es lo que hice en el análisis del  router al que le cayó un rayo, hallé el pinout en un video Bricked TP-Link WDR4300 Router Recovery Using UART Serial Converter Part #1



En este caso, el modelo no correspondía exactamente pero por todos lados decía eran equivalentes y comprobé primero la continuidad con el tester de Vcc y GRD y luego aposté que Rx y Tx estaban identificados correctamente.

Identificar los componentes


Esto nos permite hallar datasheets que usaremos luego, además de verificar que realmente haya un puerto serial. Entiendo que podría estar implementado por GPIO y no por un circuito dedicado, ya sea un chip o como parte del SoC, pero me imagino que debe ser una rareza, sobre todo en equipos más modernos.

Tengo por ejemplo el caso fallido del firmware de SENAO - Long Range Multiclient Bridge, un dispositivo que me regalaron y que estoy seguro que aunque no funcionaba prendía, cosa que no ocurrió cuando quise hacer esta exploración.

Tiene varios componentes interesantes:




UBICOM IP2022 Wireless Network Processor

ATMEL 0441, no sé qué es, supongo que es memoria flash

Una placa PCMCIA con antenas. Si existiera y yo pudiera conseguir una placa PCMCIA a puerto paralelo o GPIO y si pudiera intervenir el firmware, tendría una excelente oportunidad de cambiar el propósito del dispositivo.

Hay tres conectores, uno de ellos parece ser rs232 pero le falta el chip.






La datasheet el UBICOM dice cuáles pines pueden ser los seriales:




Aplicando el siguiente método, continuidad, comprobé que desde los pines hay pistas hasta el chip ausente, sólo me faltó el empeño de suponer que chip es y si los pines serían los apropiados.




Al documentar esto saqué las fotos y he descubierto que me hubiese ayudado
mucho mirar la foto bien grande mientras seguía las pistas.



En este caso bien puede ocurrir que el firmware no esté usando la UART pues el chip ni está, pero hasta prenderlo, no sabés.


Inspección visual y continuidad


Con un tester o un led, rastrear entre el pin, el conector y los chips si hay pistas que conecten de modo consistente.





 

 

Señales

 

Hasta acá nos manejamos con el dispositivo apagado, llegó la hora de prenderlo y ver que hace. Puede hacer falta conectarle algo al puerto serial, por ejemplo la parallella afirma que si no hay nada conectado al arrancar, no se habilita. Esto no lo comprobé.

Niveles

Con el tester podemos comprobar que Vcc y GND lo sean. Luego, en Rx no debería haber nada y en Tx un nivel alto.

Si estuviera transmitiendo como una consola serial de un sistema operativo al arrancar, Tx estaría cambiando pero muy rápido como para verlo con un tester.



Analizador lógico

Si los niveles eléctricos corresponden, podemos conectarle un analizador lógico como este, mencionado en esta conversación.


Esa captura se hace con sigrok-cli y luego se puede ver y decodificar con pulseview.

Ejemplo de decoder con sigrok-cli:

sigrok-cli  -d fx2lafw --time 3000 \
    --config "samplerate=1 MHz" \
    --triggers 0=1 --wait-trigger \

    -P uart:baudrate=9600

Start bit
1
1
1
0
0
1
1
0
g
Stop bit
Start bit
0
0
1
0
1
1
1
0
t
Stop bit
Start bit
1
1
0
1
0
1
1
0
k
Stop bit
Start bit
1
1
1
0
1
1
1
0
w
Stop bit
Start bit
1
0
0
0
0
1
1
0
a
Stop bit
Start bit
0
1
1
0
1
1
1
0
v
Stop bit
Start bit
1
0
1
0
0
1
1
0
e
Stop bit


En verde el mensaje transmitido.



Si no corresponden los niveles se puede hacer una adaptación que prefiero delegar a alguien que sepa.


Osciloscopio

El más caro de los métodos, si tenés dos canales podés ver ambos sentidos y si además tiene decodificador, podés ver pasar las letritas, pero tenés que acertarle al baudrate. En el osciloscopio que tengo yo eso no es gran problema, pues el decoding se hace sobre lo que ya está capturado en memoria, no hace falta recapturar.







Finalmente, de un modo u otro, una vez que tenemos identificados los pines, a jugar.

En las serie de artículos Jugando con los rayos, muestro en particular el uso para explorar el firmware.

Acá hay un ejemplo de como pasar de la UART a RS-232, que no he probado. Consiste en agregarle un chip y un par de conectores.

Y acá hay un ejemplo de modding muy intersante, mucho más ambicioso, pero en linea con mi objetivo estratégico de aprendizaje.

Conexión directa


Un último recurso es, habiendo identificado los niveles, conectar el Tx del dispositivo al Rx de una compu o microcontrolador, considerando correctamente la adaptación eléctrica que pueda haber e ir probando los distintos baudrates.


No hay comentarios:

Publicar un comentario