y a til un nuémro de serie propre a chaque boitier atmega (328 en loccurence) ?
Non
Ou si ca n'existe pas, comment créer un "numero de serie" une fois pour toute, inchangeable et incopiable d'un boitier a un autre ?
En fait, je crois qu'il n'y a pas vraiment de solution qui réponde à toutes tes exigences. L'atMega n'a pas été conçu pour répondre à ce type de besoin. Tu peux protéger le code en flash mais alors tu ne sais plus le relire.
Si tu veux identifier de manière unique une réalisation tu peux éventuellement y ajouter un composant comme celui-ci Mixed-signal and digital signal processing ICs | Analog Devices le prix est ridiculement faible. La mise en oeuvre n'est pas très compliqué et il y a des exemples sur le playground http://www.arduino.cc/playground/Learning/OneWire. Ces mémoires contiennent un code unique (garantie par le constructeur). Tout dépend de ton besoin de protection et de l'investissement (temps, coût) que tu est prêt à consentir pour en assurer la protection
Tu peux aussi, selon tes besoins et si cela te suffit, inscrire dans l'Eprom de l'Atmega un code que tu auras généré pour l'occasion et que tu changeras à chaque chargement du programme sur une carte différente.
Ou coller à la cyano' sur le composant une barrette avec un numéro de série (?).
En fait, comme le dit fdufnews, tout dépend du niveau de protection et des moyens financiers. Par exemple pour de la petite série il est possible de demander à un fabriquant une version OEM avec un numéro de série gravé sur le composant.
Il y a une possibilité de faire une variable avec ton n° de série et de bloquer la reprogrammation en réglant les fuses, mais ensuite tu ne pourras pas refaire de mise à jour.
Tu peux aussi, selon tes besoins et si cela te suffit, inscrire dans l'Eprom de l'Atmega un code que tu auras généré pour l'occasion
Il n'y a là aucun niveau de protection possible on peut le copier comme on veut.
Par exemple pour de la petite série il est possible de demander à un fabriquant une version OEM avec un numéro de série gravé sur le composant.
Il faut déjà en commander un beau paquet pour que cette solution soit rentable. D'autant qu'on peut le faire assez facilement à la Dremel et au stylo graveur.
Si on va par là, il suffit de protéger le code en positionnant les fusibles comme il faut pour empêcher la copie. Et graver un numéro de série sur la carte (ou le processeur) au stylo graveur.
Quote:
Tu peux aussi, selon tes besoins et si cela te suffit, inscrire dans l'Eprom de l'Atmega un code que tu auras généré pour l'occasion
Il n'y a là aucun niveau de protection possible on peut le copier comme on veut.
C'est clair ! Mais comme je ne connais pas le besoin, cela aurait pu tout aussi bien être pour un usage interne où le besoin de protection n'existe pas, par exemple pour différencier plusieurs cartes d'acquisition, ou plusieurs cartes effectuant quasiment la même tâche...
L'atmega a des fusibles pour le configurer. En positionnant certains d'entre eux aux bonnes valeurs, tu peux empêcher que le code soit relu de l'extérieur... mais alors plus de programmation possible après.
Churchill: +1
C'est ce que j'ai fait pour une application où l'Arduino est contrôlé par une application externe. Dans l'EEPROM j'ai enregistré un n° de série, le code de l'application et son code de version.
En fonction du niveau de protection souhaité, tu peux éparpiller ces codes dans les 512 bytes de mémoire EEPROM, utiliser un encodage pour éviter une lecture directe trop intuitive.
Sinon, la soluce Maxim/Dallas semble (je ne l'ai pas testée mais je l'ai étudiée un moment donné) assez simple et robuste.
HTH
Je veux protéger le code de mon ATmega328 sur mon Arduino Duemilanove.
J'ai utilisé PonyProg2000 Version 2.07c, mais je suis incapable de faire quoi que ce soit.
Voici ce que j'ai fait
j'ai brancher mon Arduino à l'ordinateur avec le cable USB.
Dans PonyProg je suis allé dans le menu Setup->Interface Setup... et j'ai sélectionné Serial et SI Prog API et j'ai choisi le bon port COM.
Ensuite j'ai sélectionné dans le menu Device->AVR micro->ATmega32.
Après j'ai choisi l'option Command->Security and Configuration Bits... pour modifier les valeurs des fusibles de protection.
ensuite il y a une fenêtre qui est affiché et dans la fenêtre c'est écrit Reading Security Bits et le pourcentage reste à 0% pendant environ 5 minutes et après il y a une autre fenêtre qui est afficher et c'est écrit ce message d'erreur "Device missing or unknown device -24".
Je doit faire quoi pour modifier les valeurs des fusibles de protection avec PonyProg?
Selon la Datasheet je peux protéger mon code en modifiant le Lock bits.
Voici le Lock bits non modifier. Il est = 00001111 en Binaire. (0x0F en Hexadécimal).
atmega328.bootloader.lock_bits=0x0F
Seule les 6 premier bits peuve être modifier pour un ATmega328.
Voici les deux premier bits: 00001111
LB2, LB1: Il s'agit d'une paire de fusibles destinés à contrôler les droits d'accès aux mémoires FLASH et EEPROM.
11 = Aucune restriction d'acces aux mémoires.
10 = Aucune programmation possible de la FLASH ou de l'EEPROM par programmation série et parallèle. La programmation des fusibles est désactivée.
00 = Aucune programmation et vérification possible de la FLASH ou de l'EEPROM par programmation série et parallèle. La programmation des fusibles est désactivée.
Alors si le Lock bits est = 00001100 mon code va être protégé!
Alors j'écris:
si je vais dans le programme Arduino dans le menu Tools->Burn Bootloader->w/ Parallel Programmer le Bootloader de mon arduino va t-il ce modifier tout seule?
Ils en parle un peu ici: http://arduino.cc/en/Hacking/Bootloader?from=Main.Bootloader mais j'ai pas tous comprit même avec le traducteur Google.
Que doit t-on faire quand l'ATmega est protégé et qu'on veut effacer complètement le composant. Pour que toute la mémoire soit vierge comme à la sortie d'usine?
selon moi oui, puisque ce fichier semble être la configuration pour programmer le bootloader. En tout cas c'est spécifique à Arduino.
selon moi la réponse est non par les méthodes ISP classiques, mais le mode "haute tension" est faite pour. Si tu as le programmateur ISP qui va bien, mettre 12 volts sur la patte reset permet d'utiliser ce mode spécial.