Lockbits per Software setzen

Gast #731243
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.
Gast
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.
@ 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
Gast
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
(Firma: TravelRec.) Persönliche Seite
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
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
(Firma: TravelRec.) Persönliche Seite
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.