Hallo,
Ich spiele mich schon länger mit dem AtMega32U4 Arduino Bootloader und
habe eine modifizierte Version erstellt mit der es möglich ist ein
Arduino Sketch Update zu sperren bzw. explizit mit Kommandos
freizuschalten. Das funktioniert eigentlich ganz gut.
Zusätzlich soll mittels Lock Bits das Auslesen der SW bzw. der EEPROM
Daten verhindert werden.
Ich habe nun schon seit vielen Monaten immer wieder herumgesucht weil
ich auch aus dem Datenblatt (Kapitel 27.4 Boot Loader Lock Bits) nicht
so recht schlau werde.
Setzen kann ich folgende Bits: LB1 (0), LB2 (1), BLB01 (2), BLB02 (3),
BLB11 (4), BLB12 (5)
Bei meiner aktuellen Konfiguration scheint die Lock Bit Konfiguration
0x0C vielversprechend zu sein. Dabei wird BLB01 und BLB02 programmiert
was theoretisch die "Application Section" betrifft. Fragt mich nicht wie
ich auf diese Konfiguration gekommen bin weil es hauptsächlich durch
herumprobieren war. Aber so scheint es nur noch möglich sein mit einem
Chip Reset die Kontrolle über den Chip von außerhalb zu übernehmen.
Dadurch wird alles gelöscht und weder die SW noch die EEPROM Daten
können ausgelesen werden. Genau das will ich.
Mein AVR Dude aufruf:
1 | -c arduino -p m32u4 -P COM8 -b 19200 -e -U flash:w:"bootloader.hex":i -U lfuse:w:0xFF:m -U hfuse:w:0xF8:m -U efuse:w:0xC8:m -U lock:w:0x0C:m
|
Aber wie gesagt: Keine Ahnung was ich da mache und ich hoffe jemand von
euch kann mir das "deppensicher" erklären welche Lock Bit Konfiguration
ich brauche.
Intuitiv hätte ich die Anforderungen so beschrieben:
1.) Fuse Bits oder Lock Bits sollen nicht mehr änderbar sein.
2.) Flash r/w, EEPROM r/w sollen vom Bootloader aus möglich sein.
3.) Wenn möglich soll es möglich sein aus der Application Area: Flash
r/w, EEPROM r/w weil ich vl später mal auch im Flash Applikationsdaten
speichern will. Ist aber noch Zukunftsmusik.
Ein Chip Reset macht natürlich alle Änderungen rückgängig und löscht
alle Daten.
Im Prinzip würde das für mich bedeuten, dass ich nur das Schreiben der
Fuse Bits und der Lock Bits unterbinden muss. In den Fuse Bits gebe ich
ja bereits vor, dass man weder über Serial (SPIEN=0), noch über JTAG
(JTAGEN=0) oder (HWBE=0) zugreifen kann. Das heißt aus meiner Sicht,
dass weder auf den Flash, noch auf den EEPROM Speicher von außen
zugegriffen oder verändert werden kann. (außer nach Chip Reset)
Vermutlich ist also meine Lock Bit Konfiguration falsch.
Ich kapier auch nicht was ein "LB Mode" ist und ein "BLB0 Mode" ist.
1 | Further programming and verification of the Flash and EEPROM is disabled in Parallel and Serial Programming mode. The Boot Lock bits and Fuse bits are locked in both Serial and Parallel Programming mode.
|
Nach diesem Text hätte ich erwaretet, dass ich nur LB1 und LB2
programmieren muss?
In diesem Fall bekomme ich aber immer eine Fehlermeldung mit AvrDude:
hfuse: 0xd8 != 0xf8
Was soviel bedeutet wie, dass Serial programming noch immer aktiv ist?!
Oder ist das nur ein Fehler von AvrDude weil er die fuse bytes nicht
mehr lesen kann?
Was ist der Unterschied zwischen "Lock bits" und "Boot Lock bits"?
Ich hoffe jemand kann mir Klarheit verschaffen weil ich scheine mich nur
immer mehr zu verwirren.
Danke.