Vous n'avez pas spécifié de puce, ce qui suit est principalement adapté aux appareils atmega 8 bits, mais il s'agit d'informations générales. Lisez la section «Programmation de la mémoire» pour la fiche technique de votre puce spécifique pour des informations plus spécifiques!
Cela étant dit, et comme vous l'avez dit, tous les appareils AVR contiennent deux bits de verrouillage nommés LB1 et LB2. La programmation de ceux-ci (à 0, faible) ajoutera une protection au contenu écrit dans les mémoires Flash et EEPROM conformément au tableau ci-dessous. Le niveau de protection est divisé en trois modes, où le mode 1 n'offre aucune protection et le mode 3 offre une protection maximale. Il est possible de passer à un mode de protection supérieur simplement en reprogrammant les bits de verrouillage.
L'AVR permet de changer les bits "hauts" en "bas", mais pas l'inverse. Il n'est pas possible de changer un bit de verrouillage "bas" en un bit "haut", il n'est donc pas possible d'abaisser le niveau de protection. Pour effacer les bits de verrouillage, un effacement de puce complet est requis, ce qui efface la mémoire flash.
Ces 2 bits de verrouillage seuls (LB1 et LB2) lorsqu'ils sont bas empêcheront 99,9% des gens de voler votre firmware! Probablement plus de 99,9%. Il serait presque toujours plus facile de rétroconcevoir votre code.
Il n'y a donc aucun moyen de laisser l'utilisateur mettre à jour le firmware par un chargeur de démarrage personnalisé et protéger le flash de la lecture en même temps?
À ma connaissance (je pourrais me tromper mais je pense que j'aurais eu des problèmes avec cela auparavant) sur les appareils qui ont les fusibles de protection du chargeur de démarrage (BLB12 et BLB11), vous pouvez verrouiller votre section de chargeur de démarrage personnalisé , désactiver SPI et être protégé de 97 à 98% des personnes.
Cependant, quand aucun des bits de verrouillage n'est programmé, aucune fonction de verrouillage de la mémoire n'est activée !!! La désactivation du FAI ne suffit que pour bloquer 70% des personnes.
Pour quelques informations supplémentaires, les bits de verrouillage et les fusibles ne sont pas situés dans l'espace flash ou EEPROM normal, ni accessibles depuis le logiciel, à l'exception des bits de verrouillage liés au chargeur de démarrage dans les appareils dotés de la fonction d'auto-programmation. Le tableau 2 de cette note d'application vous aidera à identifier ce que vous pouvez faire pour votre appareil particulier!
La gamme AVR d'Atmel ne sont pas des appareils de haute sécurité (sauf indication explicite!) Et en tant que tels, ils ne sont absolument pas accompagnés d'une garantie de sécurité de code, et ils ne devraient pas non plus! Comme tous les appareils non sécurisés (et malheureusement même certains sécurisés), ils sont sujets aux attaques courantes!
Éditer
Je mettrai l'en-tête de l'interface de programmation HV à bord. Mais quelqu'un peut-il utiliser le programmateur HV pour LIRE le flash? Je sais que le programmeur HV peut effacer les puces même si les FAI / Jtag sont désactivés.
Je ne pense pas que vous devriez inclure le programmateur HV dans la conception de votre carte, sauf si cela est absolument nécessaire et vous savez avec certitude que cela ne causera aucun problème avec quoi que ce soit. Les programmateurs HV (signaux 12 volts) ne sont disponibles que par mesure de sécurité pour programmer des puces verrouillées (verrouillées en erreur, principalement). En théorie, cela ne vise qu'à programmer l'appareil pour ne rien lire. Et je n'ai jamais entendu parler d'un exploit qui permettrait de lire.
Pour mettre à niveau le chargeur de démarrage (occasionnellement), je mettrai l'en-tête de l'interface de programmation HV à bord. Mais quelqu'un peut-il utiliser le programmateur HV pour lire le flash? Je sais que le programmeur HV peut effacer les puces même si les FAI / Jtag sont désactivés.
Je pense qu'il peut y avoir un moyen de mettre à jour le flash verrouillé via le chargeur de démarrage, (quelque chose à voir avec un indicateur d'écriture interne et / ou un ISR peut-être ???) Mais je vais devoir rechercher mes notes et peut-être devoir le tester. Je ne pourrai pas le faire pendant environ 20 heures; Je recommande donc fortement de poser une nouvelle question axée uniquement sur cela et pour le processeur que vous avez mentionné. C'est une très bonne question !
LB1
etLB2
, que j'ai également décrit dans ma question comme une option limitante pour utiliser le chargeur de démarrage à des fins de mise à niveau. Ce n'est donc pas une option. Quant àBLB12
etBLB11
- c'est ce que je ne comprends pas. (à suivre)Vous pouvez utiliser les bits de verrouillage sur certains appareils ATMega et toujours mettre à jour votre code avec le chargeur de démarrage.
J'ai programmé LB1 et LB2 sur un ATMega 328. Puis j'ai appelé le chargeur de démarrage, mis à jour le programme principal - tout fonctionnait parfaitement.
Le FAI ne peut ni lire ni écrire de flash / eeprom / fusibles mais le chargeur de démarrage peut toujours écrire la section d'application.
Un effacement de puce avec le FAI effacera les bits de verrouillage (LB1 et LB2), mais efface également l'intégralité du flash / eeprom, vous pouvez donc protéger votre code (cependant vous devez vous assurer que votre chargeur de démarrage ne peut pas être piraté)
la source