Mini curso de ingenieria inversa 1

Mientras que la ingeniería convencional nos permite diseñar un producto pasando por su un diseño práctico a partir de una idea, la ingenieria inversa (reverse engineering) sirve para realizar el trabajo a la inversa: partiendo de un producto (un chisme que tienes sobre la mesa) obtenemos su diseño práctico (el esquema eléctrico, sus especificaciones técnicas, incluso su programa interno) y podemos llegar a la idea original.
La ingeniería inversa no es una cosa que se estudie de forma reglada, pero es facil de aprender si tienes unos buenos conocimientos de ingeniería convencional. Yo voy a hablar un poquito de la ingeniería inversa de dispositivos electrónicos. Para poder entender los conceptos será necesario tener buenos conocimientos de electricidad y electrónica.

La necesidad: ¿Por que razón vamos a usar ingeniería inversa sobre un dispositivo electrónico? Hay muchas, la principal es no tener la información técnica necesaria para su uso o reparación. También podemos desear mejorarlo, copiarlo, o anular alguna función no deseada. Para realizar cualquiera de estas operaciones primero necesitamos tener el esquema eléctrico del dispositivo. Encontrar la polaridad de la clavija del gadget recién comprado para acoplarle un alimentador es ingeniería inversa básica.

Las herramientas: Para hacer un análisis pasivo (sin alimentar) solo necesitaremos una buena fuente de luz difusa para que no haga sombras, una lupa (sobre todo para circuitos SMD), un medidor de continuidad (un SuperProbe?) y un polímetro.
Por supuesto papel y lapiz. Si, lápiz, habrá que borrar mucho…
Para anlalisis activos (con el circuito alimentado) o para analizar protocolos etc serán necesarias otras herramientas mas sofisticadas, osciloscopio, analizador lógico etc…

Un caso práctico:
He comprado recientemente en DealExtreme este reloj-voltímetro-termómetro: http://dx.com/p/c-022-3-in-1-red-digital-led-voltmeter-thermometer-clock-223786 por solo 4,38€.
El chisme es interesante y barato pero, como ya avisan en DX, viene sin manual. Googleando su modelo «C-022» no aparece nada, ni por «dx clock voltmeter» etc. Estoy solo con el circuito. Conectarlo no es dificil: un + y un – serigrafiados en la PCB.
Sin embargo solo mide de 7V a 15V de la propia tensión con que se alimenta. Me gustaría medir otra tensión distinta… ¿Como lo hago?. ¿Y si quiero medir una temperatura remota?.
Necesito su esquema eléctrico. La terea no es demasiado dificil, es una pequeña PCB con un integrado TSSOP20 y otro SO8, una batería, un display de 4 dígitos y algunos componentes mas…
Reloj-voltimetro-termometro C-022
Empezamos
Primero: Identificar los componentes, si la PCB es de 2, 4 o 6 capas (cuantas mas capas mas dificil, sobre todo si tiene vias ciegas, entonces la cosa se complica muchísimo y habría que usar otras herraientas…), los conectores etc.
Segundo: hay que identificar bloques funcionales, para cada uno de ellos usaremos distintos métodos deductivos para obtener el esquema. No nos basta con el esquema simple, tenemos que identificar polaridades, tipos de señales etc.

Bloques C-022

Alimentación Es el mejor bloque funcional por el que empezar. Para ello comenzaremos por identificar el conector de alimentación… si no es fácil de identificar (por ejemplo porque se alimenta desde un conector múltiple) buscaremos un plano de masa y a partir de él identificaremos la MASA del circuito. Las pistas de alimentación suelen ser gruesas gruesas, pero pueden confundirse con señales de potencia. También suelen estar desacopladas con condensadores polarizados y filtradas con bobinas de pocos microhenrios y alta corriente. Generalmente la alimentación «bruta» suele acabar en distintos reguladores de tensión. Los condensadores polarizados suelen tener el negativo a masa (cuidado con las fuentes negativas!!). Vamos siguiendo con el medidor de continuidad desde el supuesto positivo de la alimentación (uno de los dos pines de alimentación) hasta el regulador de tensión.
Observamos que hay un par de resistencias conectadas a la alimentación sin regular. Posiblemente es el divisor resistivo para medir la alimentación en la función voltímetro.
Procesador. En este caso no tenemos identificación del procesador, nos limitamos a dibujar el cableado entre el procesador y los pulsadores, el display y el chip SO8 que hay bajo la batería que es el RTC (DS1302).
Observamos otro divisor resistivo, este usa un extraño componente en forma de gota. Se trata de una termoresistencia (al medirla da 5K a 20ºC). Posiblemente se trate del sensor de temperatura para la función termómetro.
La batería está conectada con el RTC DS1302. Podemos decargar el datasheet: DS1302.pdf El cilindro metálico de la derecha será el cristal de 32.768Khz y los dos chips SMD los condensadores del circuito oscilador.
Este es el borrador del esquema obtenido:
Borrador-Esquema C-022
Puede mejorarse un poco:
Esquema KiCad C-022
Ahora vamos a hacer un poco de magia googleiana. ¿Es posible identificar el procesador? Seria muy interesante para poder reprogramarlo…
¿Que sabemos de él? Sabemos que se alimenta por los pines 7- y 9+. También tiene unos condensadore entre los pines 4 y 8 y masa… y su encapsulado es TSSOP20. Vamos a buscar en google microcomputadores o microcontroladores en TSSOP20 a ver que sale.
Ya tengo varios candidatos: MC9S085F4, 87LPC76, PIC16F6xx, MSP430, ATTYNY87167, MSP430G2 y STM85S103F.
Comparando el cableado del borrador con las datasheets de los micros anteriores no queda duda: es un STM8S103F:
STM85S103F
Todo coincide, la alimentación, los condensadores a masa son uno para el reset y otro para el regulador interno, los dos divisores encontrados estan conectados a dos entradas analógicas…
Faltaría conectarlo a un grabador para ver si lo identifica… Desgraciadamente mi grabador, que soporta mas de 10.000 dispositivos, necesita un accesorio para este micro, que no tengo… (también es mala suerte!!).
Al menos al tener identificadas las entradas de tensión y temperatura ya podemos hacer un análisis activo para ver el escalado de estas entradas y poder usarlas de otra manera.
Eso para otro día.