numéro de serie atmega328

Bonjour, Je me pose une question :

y a til un nuémro de serie propre a chaque boitier atmega (328 en loccurence) ?

Un "code" chiffré qui serait unique, inchangeable, dans chaque boitier ?

AU quel cas, comment le récupérer ?

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 ?

Merci pour votre aide !

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 http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2903 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

Ok merci fdufnews pour tes réponses toujours aussi claires et précises !

j'ai plus de pins dispo du coup je vais pas pouvoir utliser ce composant mais je vais cogité ! 8-)

Salut,

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.

Churchill

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.

Tu as une grosse série à faire??

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...

Churchill

"il suffit de protéger le code en positionnant les fusibles comme il faut pour empêcher la copie"

c'est a dire ? je ne comprends pas...

Merci !

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.

Tu peux aller jeter un coup d'?il sur : http://www.atmicroprog.com/cours/atmega/fuses.php

A manier avec beaucoup de précaution !

Franssoa

sérieux, on ne peut pas empêcher la lecture sans bloquer la programmation à tout jamais ???? :-/

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

sérieux, on ne peut pas empêcher la lecture sans bloquer la programmation à tout jamais ????

Non, la seule chose que l'on peut encore faire c'est effacer complètement le composant. Toute la mémoire est alors vierge comme à la sortie d'usine.

ah ok, il n'est donc pas définitivement figé, ça me rassure :)

Bonjour,

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 1) j'ai brancher mon Arduino à l'ordinateur avec le cable USB. 2) 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. 3) Ensuite j'ai sélectionné dans le menu Device->AVR micro->ATmega32. 4) Après j'ai choisi l'option Command->Security and Configuration Bits... pour modifier les valeurs des fusibles de protection.

5) 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?

Merci

Eric a écrit un article à ce sujet :

http://www.pobot.org/Comment-peter-correctement-les.html

Pose-lui des questions si ça n’est pas satisfaisant.

Merci Luj06 pour ce lien! :)

Je vais pouvoir poser mes questions à l'auteur de cet article!

Bonjour, j'ai fait des recherche sur les fusible de l'ATmega328 sur la datasheet: http://www.atmel.com/dyn/resources/prod_documents/doc8161.pdf

Dans ce fichier arduino-0018\hardware\arduino\boards.txt il y a ce code pour l'Arduino Duemilanove avec un ATmega328:

##############################################################

atmega328.name=Arduino Duemilanove or Nano w/ ATmega328

atmega328.upload.protocol=stk500
atmega328.upload.maximum_size=30720
atmega328.upload.speed=57600

atmega328.bootloader.low_fuses=0xFF
atmega328.bootloader.high_fuses=0xDA
atmega328.bootloader.extended_fuses=0x05
atmega328.bootloader.path=atmega
atmega328.bootloader.file=ATmegaBOOT_168_atmega328.hex
atmega328.bootloader.unlock_bits=0x3F
atmega328.bootloader.lock_bits=0x0F

atmega328.build.mcu=atmega328p
atmega328.build.f_cpu=16000000L
atmega328.build.core=arduino

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: 000011*11*

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:

atmega328.bootloader.lock_bits=0x0C

Ensuite je veux brancher l'ISP en parallèle ce cette manière: http://arduino.cc/en/Hacking/ParallelProgrammer

Voici mes questions: 1) 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.

2) 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?

Merci

1) selon moi oui, puisque ce fichier semble être la configuration pour programmer le bootloader. En tout cas c'est spécifique à Arduino.

2) 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.

Indications en anglais ici: http://support.atmel.no/bin/customer?action=viewKbEntry&id=351

Bon, a priori rien pour les locks bits. Prend un nouvel Atmel et te casse pas la tête.

A la rigueur un autre article pour programmer deux AVR, un bon et un à problèmes : http://www.societyofrobots.com/member_tutorials/node/239