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?
> 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.
Das ist wohl der ETL 908. Gibt auch viele Klone. Gibt es eine gute Quelle, wo dann auch der ss-mode zuverlässig funktioniert?
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...
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 ;)
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.
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.
"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?
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.
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?
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.
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.
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 |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.