PDA

Επιστροφή στο Forum : Arduino and fuse bits



info@kalarakis.com
10-03-15, 19:19
Μήπως γνωρίζεται πώς μπορώ μέσα από το πρόγραμμα arduno ver 1.0.5 μετά που θα φορτώσει το πρόγραμμα στη συσκευή να το κλειδώσει
για να μη μπορεί να αντιγραφεί?

Τη μέθοδο να το βάλω στο ISP kai na αλλάξω τις ασφάλειες τη γνωρίζω
αλλά άν το κάνει με το κατέβασμα του προγράμματος θα είναι καλύτερα.

gsouf
10-03-15, 19:34
Πρέπει να πειράξεις την εντολή κατεβάσματος του avrdude που χρησιμοποιεί ο arduino!

info@kalarakis.com
11-03-15, 08:41
Μπορείς να δώσεις περισσότερες λεπτομέρειες

Γιατί ομολογώ οτι δεν κατάλαβα ΤΙΠΟΤΑ

manolena
11-03-15, 11:26
Όλοι οι μ/Ε AVR περιέχουν 2 lockbits με την ονομασία LB1 και LB2. Αν αυτά προγραμματιστούν με "0" θα παράσχουν προστασία στα περιεχόμενα Flash και EEPROM μνημών σύμφωνα με τα παρακάτω:


LB1 LB2


1 1 Καμμία προστασία
0 1 Δεν μπορεί να προγραμματιστεί πλέον, αλλά διαβάζεται
0 0 Πλήρες κλείδωμα απο εγγραφή και ανάγνωση


Είναι δυνατόν να πάει κάποιος απο τη μια εκδοχή στην άλλη αλλά μόνο απο χαμηλό επίπεδο προστασίας προς υψηλό και όχι το αντίθετο. Δηλαδή μπορείς να αλλάξεις έναν άσσο (1) σε 0 αλλά όχι ανάποδα. Μπορείς εντούτοις όμως να κάνεις μια ολική διαγραφή περιεχομένων και τα lockbits θα επανέρλουν σε εργοστασιακή ρύθμιση (1).

Θα χρειαστείς κατ' αρχήν ένα βοήθημα για να δείς τις ρυθμίσεις των fuse bits και τι ακριβώς κλειδώνεις, εδώ:

http://eleccelerator.com/fusecalc/fusecalc.php?chip=atmega8 (http://eleccelerator.com/fusecalc/)

Με βάση αυτό, θα πάρεις ένα αποτέλεσμα για τους 3 τύπους των fuses, HIGH, LOW και EXTENDED

55757, το βλέπεις στο κόκκινο παραλληλόγραμμο.

Μετά θα πάς στη διαδρομή που είναι εγκατεστημένο το Arduino IDE και θα βρείς το φάκελο C:\...\arduino-1.x.x\hardware\arduino και θα κάνεις ένα αντίγραφο απο το αρχείο boards.txt. Θα ανοίξεις το πρωτότυπο boards.txt και θα βρείς τον τύπο του Arduino που χρησιμοποιείς, π.χ.:



uno.name=Arduino Uno
uno.upload.protocol=arduino
uno.upload.maximum_size=32256
uno.upload.speed=115200
uno.bootloader.low_fuses=0xff
uno.bootloader.high_fuses=0xde
uno.bootloader.extended_fuses=0x05
uno.bootloader.path=optiboot
uno.bootloader.file=optiboot_atmega328.hex
uno.bootloader.unlock_bits=0x3F
uno.bootloader.lock_bits=0x0F
uno.build.mcu=atmega328p
uno.build.f_cpu=16000000L
uno.build.core=arduino
uno.build.variant=standard


Στις τρείς γραμμές που φαίνονται, θα αντικαταστήσεις ανάλογα τα 3 είδη των fuse bits με αυτά απο τον calculator παραπάνω.

Εναλλακτικά, πρέπει να γράψεις την εντολή με τον AVRdude:

-U lfuse:w:0xC1:m
-U hfuse:w:0x99:m
-U lock:w:0x0F:m


(παράδειγμα)

Καλό είναι επίσης να διαβάσεις και το datasheet (π.χ. ATMega328, σελίδα 232)

http://www.atmel.com/Images/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf

'Ετσι λοιπόν, όταν το IDE κάνει compiling στον κώδικά σου, αυτόματα ρυθμίζει τα lock bits και αυτά μπαίνουν στο .hex αρχείο. Καίγεται το αρχείο στον μ/ε και είσαι έτοιμος.