Como se arregla el código de un microcontrolador OTP
Hace 5 años, uno de mis colegas desarrollo un programa usando la plataforma 8051. Lamentablemente, se produjo un fatal error en el programa lo que suponía un fracaso empresarial y el daño la buena imagen de la empresa. Nuestro jefe nos preguntó si existía algún medio para salvar la empresa y escapar de la crisis. Yo sabía que la memoria interna del microcontrolador usaba en realidad un EEPROM de tecnología OTP (una sola programación) por lo que prometí estudiar el código y tratar de romperlo.
Después de un breve estudio, he encontrado que los dispositivos se pueden reprogramar, incluso después de que han sido programadas.
Así que le dije a jefe que el código podría ser reparado. Los distribuidores reunieron los microcontroladores de los clientes y los reprogramaron con el código parcheado. Todo el mundo estaba contento. Y sin embargo, nadie me expresó su agradecimiento. Les pareció seguramente que el código se había auto-corregido. Pero después de eso, muchos directores de proyectos que tienen problemas solicitan mi ayuda. Lamentablemente no todos los microcontroladores pueden salvarse si
- Los microcontroladores son enmascarados en el proceso de fabricación de los circuitos impresos de las obleas de silicio
- Los microcontroladores son completamente fijos, debido a que la zona no utilizada está programada a 0x00.
La OTP es un proceso secundario del EPROM, la EPROM puede ser borrada usando luz ultravioleta. Este método fue muy popular en los primeros microcontroladores. Como el empaquetamiento en cerámica es muy caro, el paquete de plástico de EPROM es cada vez más popular. Puede ser borrado (ya les indique cómo borrarlo en otro blog) por un método especial. Es de hecho una memoria Programable una sola vez, ya que no pueden borrarse debido al empaquetamiento. De todos modos, recuerde el hecho de que cada byte en el EPROM puede ser programado de 0xFF a 0x00, pero no viceversa.
Romper el 8051 y parcharlo

Aquí está mi detallada aplicación de parches al código. Yo uso 8051 y ensamblador como ejemplo, pero el principio sigue siendo válido para cualquier otra plataforma como PIC, microcontrolador Z8 OTP.
Vamos a estudiar el programa. Normalmente podemos llamar el código que lleva a un error de software como "código erróneo", el código antes del código erróneo como "código anterior", el código que sigue al código erróneo como "código posterior", y los parches como "código parcheado". Estos términos son sólo para su referencia. En general, los errores de código son unos pocos bytes; estos se puede reprogramar fácilmente, cualesquiera que fuera su función, a 0x00. En el ensamblador 8051, 0x00 indica una operación nula (“NOP"). SI EL ESPACIO NO UTILIZADO FUE PROGRAMADO COMO 0xFF, podemos colocar nuestro "Código parcheado" en la zona no utilizada. Es mejor poner el código en una sección inicial de memoria, como 0x8000, 0x9000, 0xA000, ya que estas direcciones pueden ser fácilmente programados en el área de código posterior. La cuestión más importante es la manera de alternar entre el código revisado y el código original. Recuerde que esta posibilidad solo se da en determinadas plataformas de microcontroladores, debido a la limitación de niveles. Es muy difícil encontrar código posterior para insertar el código revisado. La regla es tratar de encontrar un código que pueden ser reprogramados como "LJMP #patch_code", "AJMP # patch_code", "SJMP # patch_code". Usted debe convertir el pseudo código a código hexadecimal y juntarlo con el código posterior, elemento por elemento. Una limitación importante es el salto relativo. Si hay un salto relativo, tienes que calcular la distancia relativa de salto y hacer un nuevo código ensamblador. Si usted puede encontrar uno en el código posterior, entonces reprograme todo el código erróneo a la ubicación 0x00, lo que significa NOP. Inserte un JMP al código revisado. En éste, escriba su software y copie todo el código posterior aquí, y luego inserte otro JMP a la siguiente dirección de JMP en su código. Si no se encuentra disponible en la zona posterior, entonces intente insertarlo en el código anterior. Usted se sentirá afortunado tan pronto lo encuentre.
Por ejemplo, hay un código erróneo en la dirección 0x7122, tenemos previsto poner parches en la dirección 0x8000. LJMP 0x8000 en código ensamblador 8051 es 0x028000. AJMP 0x8000 en código ensamblador 8051 es 0x81, 0x00. Me gustaría encontrar LJMP primero. En el código posterior, encontré un código ensamblador MOV R7, A en la dirección 0x7208, lo que significa 0xFF. Me estoy sintiendo afortunado al encontrar un 0xFF. Pero muchos otros son códigos ensambladores son adecuados. Por ejemplo, MOV A, @ Ri, MOV @ Ri, A son también códigos con los que se puede trabajar, ya que todo el código pueden ser programados como 0x02. Pero todavía tenemos que comprobar que el código posterior puede ser reprogramado en 0x80 o no. El siguiente byte es 0x83, lo que significa MOV directo, directo. Reprogramé estos tres sitios a 0x028000, porque es códigos de errores y la dirección actual es reprogramada a 0x00, es decir, como operación nula en 8051, estos fragmento de código han de ser copiadas directamente al código revisado insertando LJMP para volver a la dirección actual (PC +1). En este ejemplo, debería ser PC+3 a la dirección de 0x720C, dado que MOV directo, directo necesita dos bytes extra. Así puede actualizar su código ensamblador 8051 y reprogramar el dispositivo lo cual lo debe hacer trabajar ahora. NOP introducirá algunos pequeños retrasos, pero en general no debería importar en si la tarea no es crítica. Disfrute haciendo el hacking ...
Existen algunas limitaciones corrigiendo el código en circuitos de memoria:
- El espacio no utilizado debe mantener su estado no programada como 0xFF;
- Debe haber suficiente espacio no utilizado disponible para parches;
- corrección de errores es No ISR;
- AJMP, SJMP conduce a un dirección de salto relativa, lo que significa que los bytes posteriores están cambiando en el código hexadecimal final;
- Estado del sector de seguridad. Los microcontroladores no pueden ser reprogramados si su sector de seguridad esta programado;
- Detallado conocimiento la plataforma de programación del microcontrolador, especialmente el código ensamblador;
- Absoluta ubicación para ensambladores y compiladores. (Hoy en día más y más proyectos están programados en C, el código hexagonal final cambia mucho dependiendo del sistema operativo, de la versión del compilador, uso de memoria, las variables modificadoras ...).
Hoy en día cada vez más están utilizando microcontroladores de memoria flash, pero los microcontroladores OTP son relativamente baratos, ya que la mayoría de los procesos fabricación son muy antiguos.
- blog de froa0112
- Inicie sesión o regístrese para enviar comentarios
