Autor Tema: Firmware actualizable por el cliente  (Leído 1366 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Automata78

  • PIC12
  • **
  • Mensajes: 61
Firmware actualizable por el cliente
« en: 02 de Septiembre de 2015, 13:14:42 »
   Hola, quería comentarles cual es la finalidad de mi consulta.
 -  Resulta que vengo trabajando con un bootloader (TINY-BLD) el cuál funciona muy lindo en mi PIC16F876A con la idea original de permitir a mi cliente poderle enviar en un futuro si se encontrara algún inconveniente una actualización, pero es aquí donde quiero detenerme, que esa actualización contenga parte del código (podrían ser una zona de la flash donde solo se encuentran las funcionalidades de mi programa) y de esta manera no entregar todo el firmware.  ¿se entiende hasta aquí ?

 - Todavía no he leído a fondo como se escribe la flash (desde mi propio código) por lo que mi pregunta es mas bien general..... ¿Lo que quiero hacer, lo puedo hacer con un bootloader o no ? (obviamente teniendo el resto del código protegido de lectura)  :lol:

  Espero que entiendan mi cuestión.

  Muchas gracias.

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re: Firmware actualizable por el cliente
« Respuesta #1 en: 02 de Septiembre de 2015, 13:27:23 »


Se podría hacer, siempre y cuando modifiques el código fuente del bootloader para que no borre la página que quieres proteger, y que el firmware a grabar no ocupe la misma página que el resto del código.

Pero si tocas el bootloader, nunca más podrás volver a regrabar la página protegida a distancia. Lo ideal si quieres hacer algo así, sería que encriptaras el código que le das al cliente, e incluyeras la correspondiente rutina de desencriptación en el bootloader.


Desconectado vixctor

  • PIC16
  • ***
  • Mensajes: 109
Re: Firmware actualizable por el cliente
« Respuesta #2 en: 02 de Septiembre de 2015, 16:32:11 »
Es bien fácil, yo hago eso de hecho:

Lo que yo hago es que divido el programa en 2:

La parte que normalmente voy a actualizar y la parte que no (tablas de datos, strings) etc...

Obvio la 1ra vez programo TODO tal cual, y una vez que tengo el pic programado, pongo END entre la parte 1 y la parte 2 y recompilo.

Lo que va a pasar, es que la nueva compilación unicamente va a abarcar hasta adonde finalice el programa con end, y luego, cuando lo reprograme con el tiny, pues este solo reescribirá lo nuevo que le llegue, lo anterior lo va a dejar intacto...  :-/

Obvio hay algunas cosas a considerar, por ejemplo:

Si la parte que ya no vas a actualizar son tablas, y tu programa hace referencia a ellas, debes declarar los ORG y las etiquetas de las localidades de memoria  antes del END o si no el compilador te generará errores.

Eso es muy fácil de hacer en ensamblador y lo de las tablas en las series 18, pero no sabría decirte si te va a funcionar en otro lenguaje como C o basic.


Algo relativamente sencillo que puedes hacer, es poner en la parte que vas a "ocultar", alguna cadena de verificación de firmware o alguna rutina dummy que haga un goto inicio por ejemplo, así, aunque tu entregues una actualización, si tu cliente decidiera "copiarla" en un pic nuevecito, pues si va a poder pero el pic nuevo, al carecer de ese codigo faltante, pues nomas no va a correr.

Aunque pensandolo un poco más, fijate que no intrinsecamente ya está protegido, checa el porque:

1.- El tiny bootloader normalmente se guarda en las últimas localidades de la flash del PIC, algo así como Max Flash - 250 bytes...

2.- Cuando grabas el tiny en el micro, es cuando proteges al pic contra lectura, en este paso es cuando se hace, no después porque los settings ya no los puede cambiar el bootloader.

3.- Cuando el tiny programa tu archivo HEX, reescribe la primera instrucción del vector de reset que normalmente es GOTO MAIN y la cambia por GOTO MAX_Flash - 250 automaticamente   (Eso lo he más que comprobado, si quitas la protección de lectura, y lees tu micro despues de programarlo con el tiny, veras que la primera instrucción fue modificada... 

4.- De hecho en el punto anterior no esta de más que tu mismo le des la localidad de origen del tiny aunque el compilador se ponga nena y te diga que en tu programa "ahí" no hay "nada"

5.- Si el usuario quiere copiar tu programa en un pic nuevo, este nuevo pic, al carecer del tiny, pues se irá a la localidad Max Flash - 250 y encontrará puro NOP y no hará nada....

Bueno, espero te sirvan estos tips, a mi me han servido mucho para proteger mis códigos entregando solo las partes que pudieran ser actualizadas.

Saludos