www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Lockbits per Software setzen


Autor: af (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute, ich möchte zum Programmstart eines Atmegas die Lockbits 
überprüfen und falls die nciht dem entsprechen, was ich brauche, setzen.
void check_lockbits()
{
  #ifdef CHECK_LOCK_BITS
  if(boot_lock_fuse_bits_get(GET_LOCK_BITS) != 0xC0)
  {
       boot_lock_bits_set(0xC0);
  }
  #endif
}

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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In ASM schaut´s so aus:
;-------------------------------------
Write_BLB:          ;write LockBits
 sbic  EECR,EEPE        ;wait, if EEPROM-Write is running
 rjmp  Write_BLB
 clr  ZH
 ldi  ZL, 1
 ldi    Temp, 0b11101100      ;Lock bit pattern to program
 mov  r0, Temp
 ldi  SPMCRVAL, (1<<BLBSET) + (1<<SELFPRGEN)
 out  SPMCSR, SPMCRVAL
 spm
 ret


Autor: af (Gast)
Datum:

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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.