Forum: Mikrocontroller und Digitale Elektronik Lockbits per Software setzen


von af (Gast)


Lesenswert?

Hallo Leute, ich möchte zum Programmstart eines Atmegas die Lockbits 
überprüfen und falls die nciht dem entsprechen, was ich brauche, setzen.
1
void check_lockbits()
2
{
3
  #ifdef CHECK_LOCK_BITS
4
  if(boot_lock_fuse_bits_get(GET_LOCK_BITS) != 0xC0)
5
  {
6
       boot_lock_bits_set(0xC0);
7
  }
8
  #endif
9
}

Die Abfrage funktioniert wunderbar, leider werden die lockbits mit der 
Funktion boot_lock_bits_set nicht gesetzt und bleiben bei 0xFF.

Ich finde leider keine Ausführliche Information dazu und muss euch um 
eure Hilfe fragen :)

Vielen Dank.

von Gast (Gast)


Lesenswert?

Soweit ich weiß, musst du den set-Befehl aus der Bootloader-Sektion 
heraus aufrufen. Sicher bin ich mir aber nicht. Guck diesbezüglich 
besser mal im Datenblatt nach.

von Falk B. (falk)


Lesenswert?

@ af (Gast)

>Hallo Leute, ich möchte zum Programmstart eines Atmegas die Lockbits
>überprüfen und falls die nciht dem entsprechen, was ich brauche, setzen.

Lesen geht, schreiben geht AFAIK nur per ISP-Adapter.

MFg
Falk

von Gast (Gast)


Lesenswert?

Doch, Schreiben geht auch aus der Software heraus. Allerdings nur bei 
den Bootloader-Lockbits.

von spess53 (Gast)


Lesenswert?

Hi

• Bit 3 – BLBSET: Boot Lock Bit Set
If this bit is written to one at the same time as SPMEN, the next SPM 
instruction within four clock cycles sets Boot Lock Bits, according to 
the data in R0. The data in R1 and the address in the Z-pointer are 
ignored. The BLBSET bit will automatically be cleared upon completion of 
the lock bit set, or if no SPM instruction is executed within four clock 
cycles.

Vielleicht stimmt das Timing nicht?

MfG Spess

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Wie sieht denn die Funktion: boot_lock_bits_set im Detail aus?

>Ich finde leider keine Ausführliche Information dazu und muss euch um
>eure Hilfe fragen :)

Im Datenblatt steht´s! Zwar nicht fix und fertig als Code, aber 
funktionsmäßig klar beschrieben.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

In ASM schaut´s so aus:
1
;-------------------------------------
2
Write_BLB:          ;write LockBits
3
 sbic  EECR,EEPE        ;wait, if EEPROM-Write is running
4
 rjmp  Write_BLB
5
 clr  ZH
6
 ldi  ZL, 1
7
 ldi    Temp, 0b11101100      ;Lock bit pattern to program
8
 mov  r0, Temp
9
 ldi  SPMCRVAL, (1<<BLBSET) + (1<<SELFPRGEN)
10
 out  SPMCSR, SPMCRVAL
11
 spm
12
 ret

von af (Gast)


Lesenswert?

@  Travel Rec: Tut es bei dir auch funktionieren? Bei mir funktioniert 
es nicht.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Klar geht das, sonst würde ich´s doch nicht posten ;-)
Muß dazusagen, daß dies für einen ATMEGA128 gilt, bei anderen 
Controllern gibt es eventuell Abweichungen in der Registerbelegung und 
bei den Bezeichnern. Das steht aber in den einzelnen Datenblättern - wie 
gesagt.

von Peter D. (peda)


Lesenswert?

1.
SPM-Befehle können nur in der Bootsektion ausgeführt werden, aus dem 
unteren Flash werden sie als NOP ausgeführt.

2.
Self programming muß enabled sein, sonst SPM = NOP


3.
Es können nur die Bootloaderlockbits gesetzt werden.
D.h. ohne Bootloader ist das vollkommen sinnfrei.

Mit Bootloader ist das auch nur dann sinnvoll, wenn der Bootloader sich 
allzeit aussperren soll.
Also z.B. es ist nur eine bestimmte Anzahl Updates beim Kunden erlaubt.
Oder nach einer bestimmten Laufzeit werden keine Updates mehr 
zugelassen.


Peter

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Oder der Bootloader wird geschrieben und das Produkt soll dem Endkunden 
übergeben werden. So kann man nie vergessen, den Chip gegen Auslesen zu 
schützen, siehe unten.

>Es können nur die Bootloaderlockbits gesetzt werden.
>D.h. ohne Bootloader ist das vollkommen sinnfrei.

Das stimmt so nicht ganz, beim Mega168 und einigen anderen neueren AVRs 
lassen sich auch die Flash-Lock-Bits schreiben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.