Forum: Mikrocontroller und Digitale Elektronik Maskenprogrammierten 80c51BH auslesen?


von Christian K. (dxrz)


Lesenswert?

Hallo,
ich möchte das EPROM eines 80C51 auslesen. Die genaue Bezeichnung ist 
80C51BH-3 von Philips. Sieht aus, als wäre er maskenprogrammiert. Ob die 
Fusebits gesetzt sind oder nicht muss man halt sehen. Jetzt ist meine 
Frage, wie kann ich auf das EPROM zugreifen, also es auslesen? Ich stehe 
noch ziemlich am Anfang, was Mikrocontroller angeht. Habe mich durch das 
AVR-Tutorial gearbeitet, allerdings habe ich BASCOM AVR zur 
Programmierung benutzt...

Aus dem Datenblatt werde ich nicht so recht schlau:

 http://www.keil.com/dd/docs/datashts/intel/80x1bh_87c51_ds.pdf

Auf Seite 15 steht dass ich die jeweilige Adresse angeben muss und dann 
über Port.0 die Daten raus kriege, wobei P2.7 auf low liegen muss. Wie 
weise ich jetzt die Adresse zu? Was ist sonst noch zu beachten und wie 
mache ich aus den Daten, die ich da raus bekomme wieder ein .hex-File 
oder wie kriege ich sie beispielsweise in einen 89S51 oder 87c51?

von Codecracker (Gast)


Lesenswert?

Ein Maskenprogrammierter 80c51 hat kein Eprom. Das Programm wurde bei
der Herstellung mit einer speziellen Maske im Silizium "verewigt".
Hier dürfte es kaum eine Möglichkeit geben von "außen" auf das Programm
zuzugreifen, da fehlt m.E. die ganze dazunötige "Hardware" im Chip 
selber,
wozu auch? Bzw. es sicd halt die entsprechenden "Fuse-Bits" in der Maske
gesetzt.......

von Sigint 112 (sigint)


Lesenswert?

Also: Wenn die FUSE-Bits nicht gesetzt sind, dann könntest du eventuell 
auf den internen Speicher zugreifen. Es sollte so funktionieren:
Du legest /EA auf Masse und führst ein eigenes kleines Programm aus dem 
externen Speicher aus. Dieses Programm liegt über dem Speicherbereich, 
der vom internen ROM belegt wird. (/EA auf Masse, damit die 
Resetvektoren auf dein Programm zeigen) Danach muss dein Programm /EA 
auf Vcc legen, was den internen Speicher wieder einschalten sollte. Nun 
müsstest du ganz normal auf den internen Speicher zugreifen können. Sind 
die FUSE-Bits gesetzt, so wird  der Zustand von /EA beim Reset 
gespeichert und kann nicht verändert werden. (siehe Datenblatt)

Gruß,
  SIGINT

von Christian K. (dxrz)


Lesenswert?

Hallo SIGINT,

vielen Dank für Deine Antwort.

Könntest Du mir einige Schritte vielleicht noch etwas detaillierter 
erklären?

Das eigene Programm, von dem Du gesprochen hast, soll dann auf ein 
externes (E)EPROM oder wie verstehe ich das?
Dazu bräuchte ich dann wohl noch ein Latch (welches?)? Was genau soll 
das Programm machen außer /EA wider auf Masse zu legen?
Ich habe leider keine Möglichkeit EPROMs zu brennen. Ginge es auch mit 
einem  AVR-µC (STK 500 ist vorhanden). Also praktisch dass der AVR-µC 
dem 80C51  ein EPROM  vorgaukelt?

Mit „ganz normal auf den Speicher zugreifen“ können meinst du so wie im 
Datenblatt unter verification beschrieben?

Abschließend habe ich noch eine allgemeine Frage zur Programmierung von 
89C51 bzw. 52 Controllern:  Wenn ich einen 89C52 24PC programmieren 
möchte. Welche Software (möglichst freeware) eignet sich am besten 
dafür, das .hex-file auf den Chip zu übertragen und es auch wieder 
auszulesen, falls das mal nötig sein sollte. Laut Datenblatt gibt es 
wohl je nach Typ die Möglichkeit ihn high-voltage zu programmieren oder 
mit 5 Volt seriell (über RS232?). Könnte man das STK 500 für eine 
high-voltage Programmierung der 89C52 benutzen und wie müsste man es 
beschalten?

Vielen Dank allen, die antworten!
Christian

von Peter D. (peda)


Lesenswert?

Standard 8051 benötigen einen richtigen Prommer, wie EPROM/Flash, d.h. 
alle Adressen, Daten, Steuersignale werden angeschlossen.

Früher wurden oft auch 8051 mit veralteter Programmierung als ROM-less 
8031 verkauft. Man kann also auch von 8031 manchmal etwas auslesen, was 
wie ein Programm aussieht.

Nur neuere 8051 erlauben auch ein serielles Proggen oder haben einen 
Bootloader. Das steht dann im Datenblatt.


Peter

von Codecracker (Gast)


Lesenswert?

Der Trick mit dem EA-Pin funktioniert nicht,
wäre doch zu einfach den Code auszulesen!

Der EA-Pin wird beim Reset(-Ende) gelatcht und dann ist der Pinzustand 
egal.


Und wenn es nicht so wäre, nach dem Umschalten auf's interne Programm
läuft dieses und das externe ist dann vollkommen egal!

von Route_66 (Gast)


Lesenswert?

Hallo!

Wenn man ein eigenes Programm im externen Speicher unterbringt 
(Minimalmonitor), kann man versuchen durch EMV (Spannungseinbrüche, 
Störungen auf Signal- und Betriebsspannungsleitungen...) das interne 
Programm "abstürzen" zu lassen. Wenn man Geduld und Glück hat, rennt der 
Controller manchmal in das externe Programm. Und dann hat man Ihn!

von Sigint 112 (sigint)


Lesenswert?

@Codecracker:  Siehe Datenblatt:
"External Access Enable/Programming Supply Voltage: EA must be 
externally held low
to enable the device to fetch code from external program memory 
locations 0000H and
0FFFH. If EA is held high, the device executes from internal program 
memory unless the
program counter contains an address greater than 0FFFH. This pin also 
receives the
12.75V programming supply voltage (VPP) during EPROM programming. If 
security bit 1 is
programmed, EA will be internally latched on Reset."

Interesannt ist der letzte Satz. EA wird nur gelatcht, wenn das Security 
Bit gesetzt ist. Ich meine mich erinnern zu können, daß ohne gesetzem 
Security Bit der interne Speicher ohne Probleme ein- und ausgeschaltet 
werden kann. Zudem werden Programme ab 1000H aus dem externen Speicher 
ausgeführt, auch bei gesetztem Security Bit. (unabhängig von EA, soweit 
ich mich erinnere)

Gruß,
  SIGINT

von Michael L. (hasimaus)


Lesenswert?

Hallo,

können wir da nochmal kurz zurückspulen.
Die Rede ist von einem 80C51BH, also nicht 80C31 (ROM.Less) oder 87C51 
(EPROM/OTP).

Der 80C51BH ist somit ein maskenprogrammierter ROM Baustein. 
Maskenprogrammiert bedeutet üblicherweise, in der Fabrik, während der 
Produktion werden bestimmte Verbindungen durch Metallmasken festgelegt 
und damit die Bits im ROM auf "1" oder "0" gelegt. Theoretisch ist es 
auch möglich zu diesem Zeitpunkt ein Sicherheitsbit zu setzten, welches 
das Auslesen verhindert.

Gruß

von Christian K. (dxrz)


Lesenswert?

Hallo,

richtig. Es geht um den 80C51BH. Leider ist es in diesem Forum so, dass 
wenn man diesbezüglich eine Frage stellt, man immer von Antworten 
erschlagen wird in denen x-mal drin steht: Das geht eh nicht wegen der 
FUSEBITS, genau wie der vorherige... Das wusste ich von Anfang an. 
Deshalb habe ich auch geschrieben dass man halt probieren muss ob sie 
gesetzt sind oder nicht. Solche Beiträge halte ich für vollkommen 
wertlos weil sie auch nichts zum Thema beitragen.

Umso mehr freut es mich dass hier ein paar Leute mal mit wirklichen 
Ideen eingebracht haben. Nur leider reichen meine Fähigkeiten (noch) 
nicht aus um das ganze um zu setzen.

Deshalb noch mal die Frage (ausgehend davon, dass die Fusebits NICHT 
gesetzt sind):
Dieses Programm von dem die Rede ist, was genau soll das machen und wie 
lese ich dann den Code aus? Schließe ich das externe EPROM mit dem 
Programm an und gleichzeitig eine EEPROM-Programmer zum Auslesen oder 
schließe ich zum Auslesen led’s an und gucke mir die einzelnen gesetzten 
oder nicht gesetzten bits an? Oder was könnte man sonst noch machen?

Man bräuchte dann wohl auf jeden Fall einen E(E)PROM Progammer?
Worauf sollte man bei so einem Gerät achten ( es sollte 8xc51 und 8xc52 
und „normale“ EEPROMs auslesen bzw. vor allen beschreiben können)? Ließe 
sich sowas auch selber bauen? Was ist von den diversen Angeboten aus 
China zu halten? Ich stehe denen eher skeptisch gegenüber. Habe aber 
schon von Leuten gehört die damit richtig gute Erfahrungen gemacht haben 
und lasse mich gern eines Besseren belehren.

Gruß
Christian

von Pieter (Gast)


Lesenswert?

moin moin,

mach mal die Pinbelegung so wie auf S.14 in der Doku angegeben. Alle 
Adresspins legste auf 0. Nur wenn Du dann nach Enable etwas anderes als 
0FFH an P0 auslesen kannst, macht es Sinn weiterzugehen..

Mit Gruß
Pieter

von Sigint 112 (sigint)


Lesenswert?

@Christian: Vielleicht kann man den 8051, wie Pieter andeutet, mit einem 
EPROM-Brenner auslesen. Ich gehe aber nicht davon aus, da es sich ja um 
ein maskenprogrammierten Chip handelt. Deshalb zu meiner Idee:

Du benötigst einen externen Speicher, den du an den 8051 anschließt. 
(als Programmspeicher) Dieser Speicher sollte größer sein als der 
interne ROM, damit die Adressierung einfacher ist. Der AT28C64 (EEPROM) 
sollte passen. Diesen kannst du ohne EPROM-Brenner, wie ein normales 
SRAM beschreiben.
Du springst beim Resetvektor in dein Programm, das im Speicher hinter 
dem
internen Speicher stehen. Also:

$0000-$0FFF bei /EA=1 interner Speicher, bei /EA=0 externer Speicher
$1000-$1FFF dein Programm im externen Speicher

Nun muss wie folgt vorgegangen werden:

1) /EA auf 0,der 8051 startet dein Programm aus dem externen Speicher
2) Dein Programm muss /EA auf 1 setzen, wodurch der interne Speicher 
wieder eingeschaltet wird
3) Dein Programm kann nun mit movc den internen Speicher auslesen und 
z.B. auf der seriellen Schnittstelle ausgeben.
4) fertig.

Gruß,
  SIGINT

von Peter D. (peda)


Lesenswert?

Christian Kl schrieb:
> Dieses Programm von dem die Rede ist, was genau soll das machen und wie
> lese ich dann den Code aus? Schließe ich das externe EPROM mit dem
> Programm an und gleichzeitig eine EEPROM-Programmer zum Auslesen oder
> schließe ich zum Auslesen led’s an und gucke mir die einzelnen gesetzten
> oder nicht gesetzten bits an?

Das ist Quatsch.

Hol Dir von Atmel das Datenblatt des AT89C51:

http://www.atmel.com/dyn/resources/prod_documents/doc0265.pdf

Da steht drin, wie Du den MC anschließen mußt und das Timing für "Read 
Code Data" (Seite 7). So kannst Du auch einen ungelockten 80C51BH 
auslesen.
Die Programmierfunktionen gehen natürlich alle nicht.

Am besten Du nimmst nen 2.MC, der die vielen Leitungen ansteuert. Mußt 
natürlich erst ein Programm dafür schreiben.

Oder wie schon gesagt, gehst zu einem, der ein Programmiergerät hat 
(z.B. ein Galep).


Peter

von Michael_ (Gast)


Lesenswert?

> Was ist von den diversen Angeboten aus
>China zu halten? Ich stehe denen eher skeptisch gegenüber. Habe aber
>schon von Leuten gehört die damit richtig gute Erfahrungen gemacht haben
>und lasse mich gern eines Besseren belehren.
Ich habe einen TOP2005 (China) und bin zufrieden. 80C51 auslesen geht 
sicher.
Jetzt gibt es neuere, TOP2007.... für weniger als 100,-EUR.

von Christian K. (dxrz)


Lesenswert?

Hallo,
vielen Dank für eure Antworten. Habe gar nicht damit gerechnet. Es ist 
wirklich schön wie viele Leute sich hier mit konkreten Vorschlägen 
einbringen…

Nachdem ich mir ein 6 MHz-Quarz besorgt habe, habe ich jetzt den 
Vorschlag von Pieter ausprobiert. Adressen auf  low gesetzt und an P.0 
mittels Transistoren LED’s angeschlossen. Leider gingen sie, nach dem 
ich /EA mit Hilfe eines Tasters auf 5V gesetzt habe, aus und blieben es 
auch. D.h. P.0  ist komplett auf low.

Mit den anderen beiden Vorschlägen werde ich mich morgen näher befassen. 
Auf jeden Fall habe ich vieles gelernt über die 8051er und alleine das 
ist es schon wert es weiter zu versuchen.

@Michael:
Wie hast Du das dann mit dem Zoll geklärt und was kommt dann noch an 
Formalitäten auf einen zu?

Gruß
Christian

von Gerd M. (gerd_m)


Lesenswert?

Hi Christian,

ich fürchte es ist genau so wie Codecracker in der ersten Antwort schon 
geschrieben hat.
Im Microcontrollerkochbuch von Andreas Roth steht, ich zitire:
1
Während bei den Vertretern der 48iger Familie das interne ROM auslesbar war, ist das in der 51iger Familie aus Gründen des Softwareschutzes nicht mehr möglich.


Beim 80C52 AH-Basic konnte man den kompletten Basicinterpreter der im 
ROM lag auslesen und über die serielle Schnittstelle ausgeben.
Das lag aber daran, das man die internen Routinen vom Basicinterpreter 
selbst genützt hat.

Gruß Gerd

von Michael_ (Gast)


Lesenswert?

>@Michael:
>Wie hast Du das dann mit dem Zoll geklärt und was kommt dann noch an
>Formalitäten auf einen zu?
Vor einigen Jahren habe ich gesucht, und bei Eb.. Angebote auch aus DE 
gefunden. Eines für ca. 230,- EUR (Firma) und eines privat für 130,- 
EUR.
Das billigere habe ich genommen, es steckte ein Chinese aus Köln 
dahinter.
Heute würde ich aus China bestellen und abwarten ob sich der Zoll für 
die Umsatzsteuer (19%) meldet. Selbst dann ist es noch günstig.
Ab 22 EUR Umsatzsteuer (Einfuhrsteuer) und ab ca. 130,- EUR 
Zollgebühren.
Auf dem Finanzamt habe ich einmal gefragt, aber die hatten gar keine 
Ahnung!

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.