Forum: Mikrocontroller und Digitale Elektronik tinysafeboot & soft reset


von tsb-User (Gast)


Lesenswert?

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?

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.