Forum: Mikrocontroller und Digitale Elektronik MC68HC908AZ60A flash protection


von Paule (Gast)


Lesenswert?

Hallo,

eine Frage an die Experten:
Sehe ich das richtig, daß es keine Möglichkeit gibt, den MC68HC908AZ60A 
komplett zu löschen (ohne Kenntnis der Security Bytes), wenn die Flash 
Block Protection Register entsprechend programmiert sind. Das man den 
nicht auslesen kann ist ja klar, aber kann man den wirklich nichtmal 
komplett löschen ohne Kenntnis der Security Bytes?

von Panzerknacker (Gast)


Lesenswert?

> Note:  Security  Sequence  Auto  search  based  on  analyzing  of
> electrical  current
> noise  on  Motorola  device  power  pins.  So  any  equipment  with  high
> level  of
> electromagnetic radiation must be switched off.
> Note: SS mode implemented for educational purposes only.

von Paule (Gast)


Lesenswert?

Wo kann ich den Programmer kaufen?

von Paule (Gast)


Lesenswert?

Das ist wohl der ETL 908.
Gibt auch viele Klone. Gibt es eine gute Quelle, wo dann auch der 
ss-mode zuverlässig funktioniert?

von AtzeM (Gast)


Lesenswert?

https://www.nxp.com/docs/en/data-sheet/MC68HC908AZ60A.pdf
Seite 153
Chapter 14
Monitor ROM (MON)

Die Prog.-Geräte laufen über die serielle Schnittstelle und sind leicht 
nachzubauen ....
Ein Lesen der FW ohne die SecBytes sollte nicht möglich sein, aber 
Löschen des Bausteins schon...

von Paule (Gast)


Lesenswert?

mmmhhh...
Das habe ich auch gelesen, dann müsste ein flash erase ja trotzdem 
möglich sein.
Wieso kann das aber mein UPA-USB V1.3 (China) nicht?

Werde dann wohl mal einen MON08 Adapter besorgen...

Die Security Bytes herauszubekommen wäre aber noch besser ;)

von APW (Gast)


Lesenswert?

Kann sein dass der ganze Flash-Bereich Protected ist, dann geht wohl nur 
noch Löschen, wenn Hi-Voltage an IRQ angelegt ist.

MC68HC908AS60. pdf / Technical Data Rev1
*************************
Section 5. FLASH-2 Memory:
Section 4. FLASH-1 Memory:
...
The presence of a voltage VHI on the
IRQ pin will bypass the block protection so that all of the memory,
including the block protect register, is open for program and erase
operations.
...
*************************
Section 24. Electrical Specifications
...
High FLASH block protect override (Note 11): VHI VDD + 2V..VDD + 4 V
11. See Section 4. FLASH-1 Memory and Section 5. FLASH-2 Memory for 
further information. VHI on IRQ pin.

von APW (Gast)


Lesenswert?

Mist, in der A-Version gehts wohl nicht mehr!?

von Paule (Gast)


Lesenswert?

29.2.2.5 FLASH Block Protection
...
A further significant change is that high voltage (V HI ) is no longer 
needed on the IRQ pin to program or erase the FLASH block protect 
registers.

von Paule (Gast)


Lesenswert?

"Mass Erase" ist anscheinend doch ohne Wissen der SecBytes möglich. Mit 
Anlegen von VHI an IRQ.
Siehe folgendes Dokument ab Seite 43 die Antworten auf die Fragen 14,15 
und 18.

Programming and Erasing FLASH and EEPROM Memories on the 
MC68HC908AS60A/AZ60A
https://www.nxp.com/docs/en/application-note/AN2156.pdf

Nun weiß ich aber immer noch nicht wie ich den FLASH Mass Erase 
Algorithm" auf Seite 12 aus dem Monitor Mode aufrufen soll.

Kann mir einer Aufklärung verschaffen?



Außerdem spannend auf Seite 8

NOTE: A security feature prevents viewing of the FLASH contents.1
1. No security feature is absolutely secure. However, Motorola’s 
strategy is to make reading orcopying the FLASH difficult for 
unauthorized users.

Anscheinend kann man die SecBytes auch anders ermitteln.
Programmer wie der ETL 908 geben das auch mit dem sogenannten SS-Mode 
an.
Aber wie funktioniert das?

von APW (Gast)


Lesenswert?

Paule schrieb:

> Nun weiß ich aber immer noch nicht wie ich den FLASH Mass Erase
> Algorithm" auf Seite 12 aus dem Monitor Mode aufrufen soll.
>
> Kann mir einer Aufklärung verschaffen?

Mit den HC08 habe ich noch nicht gearbeitet. Nach meinem Verständnis 
hast du 2 Möglichkeiten:

1)Du hast irgendwelche Entwicklertools, die das alles auf Knopfdruck 
machen.
2)Du machst alles (wirklich alles) selbst:
a)Reset mit VHi an IRQ, Startsequenz (security-Bytes) zum Monitor 
rübersenden.
b)Eigene Flash/EEPROM Lösch- und Programmieralgorithmen und Daten ins 
RAM kopieren. Dabei insbesondere auch auf richtige Timings/Delays 
achten.
c)Stack so manipulieren, dass deine Ram-Routinen angesprungen werden, 
wenn der Monitor-Befehl RUN ausgeführt wird.
d)Monitor-Befehl RUN-> RTI auf dein Ram-Programm, danach nach gemachter 
Arbeit wieder zurück in den Monitor mittels SWI
usw.
Danach bist du fit, wenn du das alles hinbekommst.

von Paule (Gast)


Lesenswert?

Hallo,

das ist ein guter Plan, aber bei Punkt c) hänge ich nun.
Möchte zum testen auf einem unprogrammierten MC68HC908AZ60A im Monitor 
Mode folgendes Programm ins RAM laden und dann ausführen:
1
/* assembler RAM code 
2
main:
3
       ldhx  #$44F
4
       txs            ; init stackpointer
5
       lda   #$04     ; PTA2
6
       sta   DDRA     ; as output
7
main_loop:
8
       sta COPCTL     ; prevent COP counter overflow
9
       eor  #$04
10
       sta  PTA
11
       bra main_loop
12
*/
13
14
/* machinecode 17 bytes */
15
unsigned char ramcode[] = {
16
17
0x45, 0x04, 0x4f, // LDHX #0x044F
18
0x94,             // TXS
19
0xa6, 0x04,       // LDA #$04
20
0xb7, 0x04,       // STA 0x04
21
// label1:
22
0xc7, 0xff, 0xff, // STA 0xFFFF    ; prevent COP counter overflow
23
0xa8, 0x04,       // EOR #0x04
24
0xb7, 0x00,       // STA 0x00
25
0x20, 0xf7        // BRA label1      
26
};

Ich komme in den Monitor Mode und kann das Programm ins RAM laden (hier 
nach 0x200).
Ich kann auch mit dem command readsp den Stackpointer auslesen (0x00FA).
Doch wie manipuliere ich den Stack so, daß nach dem RTI (initiiert vom 
run command) mein Code ausgeführt wird?

von APW (Gast)


Lesenswert?

Monitor Mode: RUN->Executes RTI instruction

Also was macht RTI:
RTI Return from Interrupt
SP ← (SP) + $0001; Pull (CCR)
SP ← (SP) + $0001; Pull (A)
SP ← (SP) + $0001; Pull (X)
SP ← (SP) + $0001; Pull (PCH)
SP ← (SP) + $0001; Pull (PCL)
RTI-Code: 0x80

Der Stack-Aufbau wird wohl so aussehen:
SP:0x00FA //(Free, aktueller SP)
SP:0x00FB //CCR
SP:0x00FC //A
SP:0x00FD //X
SP:0x00FE //PCH
SP:0x00FF //PCL

Wenn dein Programm bei 0x0200 beginnt:
#0x02->0x00FE
#0x00->0x00FF

Dein Programm dann mit einem SWI enden lassen (statt Endlosschleife).
Wenn du VHi an IRQ belässt, ist (meine ich) der COP sowieso (temporär) 
ausgeschaltet.

Kannst du mal 0x00FE/0x00FF auslesen. Es würde mich interessieren, wohin 
der Monitor nach einem RUN-Kommando springen würde.

Alles ohne Gewähr.

von Paule (Gast)


Lesenswert?

bin auf den selben Gedanken gekommen und habe 0xFE,0xFF verwendet.
1
00F0: A5 7E 22 01 F3 FE 93 F5 FE 62 FF 7D F6 FF FE 41

Vielleicht habe ich da auch noch einen Fehler eingebaut. Ist alles 
selber programmiert.
VIH habe ich beim RUN an.

von Paule (Gast)


Lesenswert?

Der Monitor
1
Disassemble without labels
2
FE20:      LDHX    #$FFF6          
3
FE23:      STX     $50             
4
FE25:      CBEQX   #$FE,$FE33      
5
FE28:      JSR                     
6
FE2B:      CBEQ    ,X+,$FE31       
7
FE2D:      CLR     $50             
8
FE2F:      BRA     $FE25           
9
FE31:      BRA     $FE2F           
10
FE33:      LDX     #$FF            
11
FE35:      LDA     $50             
12
FE37:      BEQ     $FE3A           
13
FE39:      STX     ,X              
14
FE3A:      LDX     ,X              
15
FE3B:      BRSET   0,$00,$FE40     
16
FE3E:      JMP     $51             
17
FE40:      SWI                     
18
FE41:      BCLR    0,$04           
19
FE43:      PSHH                    
20
FE44:      BCLR    0,$00           
21
FE46:      BSR     $FE9A           
22
FE48:      BSR     $FEB2           
23
FE4A:      PSHA                    
24
FE4B:      LSLA                    
25
FE4C:      BPL     $FE55           
26
FE4E:      BSR     $FEB2           
27
FE50:      PSHA                    
28
FE51:      PULH                    
29
FE52:      BSR     $FEB2           
30
FE54:      TAX                     
31
FE55:      PULA                    
32
FE56:      TAP                     
33
FE57:      BCS     $FE75           
34
FE59:      BSR     $FE8E           
35
FE5B:      TAP                     
36
FE5C:      BHCC    $FE69           
37
FE5E:      LDA     $01,X           
38
FE60:      BSR     $FEC5           
39
FE62:      AIX     #$02            
40
FE64:      LDA     ,X              
41
FE65:      BSR     $FEC5           
42
FE67:      BRA     $FE48           
43
FE69:      BEQ     $FE64           
44
FE6B:      BMI     $FE86           
45
FE6D:      EOR     #$28            
46
FE6F:      BEQ     $FE73           
47
FE71:      BSR     $FE9A           
48
FE73:      PULH                    
49
FE74:      RTI                     
50
FE75:      BHCS    $FE7E           
51
FE77:      BSR     $FEB2           
52
FE79:      BSR     $FE8E           
53
FE7B:      STA     ,X              
54
FE7C:      BRA     $FE48           
55
FE7E:      BSR     $FEB2           
56
FE80:      BSR     $FE8E           
57
FE82:      AIX     #$01            
58
FE84:      BRA     $FE7B           
59
FE86:      TSX                     
60
FE87:      PSHH                    
61
FE88:      PULA                    
62
FE89:      BSR     $FEC5           
63
FE8B:      TXA                     
64
FE8C:      BRA     $FE65           
65
FE8E:      PSHA                    
66
FE8F:      LDA     #$0B            
67
FE91:      BSR     $FEEB           
68
FE93:      BCC     $FE99           
69
FE95:      DBNZA   $FE91           
70
FE97:      PULA                    
71
FE98:      RTS                     
72
FE99:      PULA                    
73
FE9A:      BRCLR   0,$00,$FE9A     
74
FE9D:      LDX     #$B8            
75
FE9F:      DBNZX   $FE9F           
76
FEA1:      BSET    0,$04           
77
FEA3:      DECX                    
78
FEA4:      CBEQX   #$19,$FEA9      
79
FEA7:      BRA     $FEA1           
80
FEA9:      BCLR    0,$04           
81
FEAB:      AIS     #$02            
82
FEAD:      LDA     $FFFF           
83
FEB0:      BRA     $FE48           
84
FEB2:      BRSET   0,$00,$FEB2     
85
FEB5:      BSR     $FEEB           
86
FEB7:      BCS     $FEB2           
87
FEB9:      LDA     #$80            
88
FEBB:      BSR     $FEEB           
89
FEBD:      RORA                    
90
FEBE:      NOP                     
91
FEBF:      BCC     $FEBB           
92
FEC1:      BSR     $FEEB           
93
FEC3:      BCC     $FE9A           
94
FEC5:      PSHX                    
95
FEC6:      PSHA                    
96
FEC7:      BCLR    0,$00           
97
FEC9:      LDA     #$0A            
98
FECB:      BRCLR   0,$00,$FECB     
99
FECE:      LDX     #$B8            
100
FED0:      DBNZX   $FED0           
101
FED2:      SEC                     
102
FED3:      BRA     $FEDE           
103
FED5:      ROR     $01,SP          
104
FED8:      BCC     $FEDE           
105
FEDA:      BCLR    0,$04           
106
FEDC:      BRA     $FEE2           
107
FEDE:      BSET    0,$04           
108
FEE0:      BRA     $FEE2           
109
FEE2:      LDX     #$58            
110
FEE4:      DBNZX   $FEE4           
111
FEE6:      DBNZA   $FED5           
112
FEE8:      PULA                    
113
FEE9:      PULX                    
114
FEEA:      RTS                     
115
FEEB:      PSHX                    
116
FEEC:      PSHA                    
117
FEED:      LDA     #$11            
118
FEEF:      LDX     #$19            
119
FEF1:      BRCLR   0,$00,$FEF4     
120
FEF4:      SBC     #$00            
121
FEF6:      DBNZX   $FEF1           
122
FEF8:      ROLA                    
123
FEF9:      PULA                    
124
FEFA:      PULX                    
125
FEFB:      RTS

von Paule (Gast)


Lesenswert?

FE28:      JSR FEB2

von Paule (Gast)


Lesenswert?

Hallo APW,

vielen Dank, nun funktioniert es.
Ich hatte noch einen Fehler in der iwrite Routine und ein Timing 
Problem.

Der PCH befindet sich im RAM an 0xFE und der PCL an 0xFF.
Nach korrektem Überschreiben der Werte auf die Startadresse meiner RAM 
Routine und ausführen von command RUN springt die MCU nun in meine RAM 
Routine.

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.