tinysafeboot & soft reset

Gast #5143497
Hallo,

ich benutze schon seit einiger Weile den tinysafeboot auf Attinys.
Nun wollte ich ihn auch auf einem Atmega168 einsetzen.
Problem: Da ich anders auf den verbauten µC nicht zugreifen kann, 
brauche ich einen Soft-Reset, den man ja laut Atmel am besten mit dem 
Watchdog machen sollte.
Der tsb steigt aber sofort aus, wenn er erkennt, dass es ein 
"Watchdog-Reset ist.
Nun bin ich nicht der Assembler-Experte und habe einfach folgendes 
getan:
Bei Zeile ~1200:
1
 
2
; Clear WDRF in MCUSR 
3
ldi tmp4, (0<<WDRF)
4
out MCUSR, tmp4
5
; reset WDT
6
wdr
7
; Write logical one to WDCE and WDE
8
lds r16, WDTCSR
9
ori r16, (1<<WDCE)|(1<<WDE)
10
sts WDTCSR, r16
11
; Turn off WDT
12
ldi r16, (0<<WDE)
13
sts WDTCSR, r16
14

15
;        in tmp4, MCUSR                  ; check reset condition
16
;        sbrc tmp4, WDRF                 ; in case of a Watchdog reset
17
;        rjmp APPJUMP                    ; immediately leave TSB
18

19
        ldi tmp1, low (RAMEND)          ; write ramend low
20
        out SPL, tmp1                   ; into SPL (stackpointer low)
21
.ifdef SPH
22
        ldi tmp1, high(RAMEND)          ; write ramend high for ATtinys
23
        out SPH, tmp1                   ; with SRAM > 256 bytes
24
.endif

Damit wurde der Bootloader um einige Byte zu fett, so dass ich versucht 
habe, "Entbehrliches" an der Passwort-Kontrolle (die ich nicht brauche) 
weg zu schnibbeln:
1
CheckPassword:
2
chpw0:
3
       ser tmp4                        ; tmp4 = 255 enables comparison
4
chpw1:
5
       lpm tmp3, z+                    ; load pw character from Z
6
       and tmp3, tmp4                  ; tmp3 = 0 disables comparison
7
       cpi tmp3, 255                   ; byte value 255 indicates
8
       breq chpwx                      ; end of password -> success
9
;chpw2:
10
;       rcall Receivebyte               ; else receive next character
11
;       cpi tmp1, 0                     ; rxbyte = 0 will branch
12
;       breq chpwee                     ; to confirm emergency erase
13
;       cp  tmp1, tmp3                  ; compare password with rxbyte
14
;      breq chpw0                      ; if equal check next character
15
;       clr  tmp4                       ; tmp4 = 0 to loop forever
16
;       rjmp chpw1                      ; all to smoothen power profile
17
;chpwee:
18
;        rcall RequestConfirm            ; request confirmation
19
;        brts chpa                       ; not confirmed, leave
20
        ;~ rcall RequestConfirm            ; request 2nd confirmation
21
        ;~ brts chpa                       ; can't be mistake now
22
;        rcall EmergencyErase            ; go, emergency erase!
23
;       rjmp  Mainloop                  ; return to main loop
24
;chpa:
25
;       rjmp APPJUMP                    ; else start application
26
chpwx:
27
       rjmp SendDeviceInfo             ; go on to SendDeviceInfo

Das hat nicht geklappt - Beim Reset bleibt der µC hängen. 
Watchdog-Timeout ist 1s. Bis zum nächsten Timeout sollte der tsb den 
Watchdog also längst deaktiviert haben.
Warum hängt er?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 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.