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.
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
unsignedcharramcode[]={
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.
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.