Forum: Mikrocontroller und Digitale Elektronik AT89C51RD2 und zusätzlicher Programmspeicher


von Koopi (Gast)


Lesenswert?

Hallo,

ich habe eine bestehende Applikation ( 80C32 u. uVision ) und möchte 
gerne den Controller ohne Redesign durch einen AT89C51RD2 ersetzen. Kann 
ich dann mit uVision III das externe EPROM und das interne Flash über 
Banking nutzen? Kann ich die EA-Leitung von "Innen" steuern?

Koopi

von Ralf (Gast)


Lesenswert?

Nix zu machen, es gibt nur entweder internen Flash, oder externes EPROM. 
Da der RD2 64kB hat, kannst du dir das EPROM also komplett sparen, musst 
dafür aber die EA-Leitung entsprechend umbiegen.

Andersrum kannst du es auch wie bisher laufen lassen, ohne irgendwas zu 
ändern, aber es sei aufs Errata Sheet verwiesen, in dem steht, welche 
Konstellationen zu einem Fehlverhalten führen können...

Ralf

von Koopi (Gast)


Lesenswert?

@Ralf,
>> kannst du dir das EPROM also komplett sparen
Ich brauche über 64K; das ist mein Problem. Ich habe heute mit Atmel 
telefoniert und erfahren das der ...RE2 erst Ende Q1/2007 kommt.

>>Nix zu machen, es gibt nur entweder internen Flash, oder externes EPROM.
Eigentlich unplausibel. Warum hat man dann die EA- und vor allem die 
PSEN - Leitung noch. 64K intern durch 64K estern ersetzen?

Meine Alternatividee war, dass ich die EA-Leitung beim Banking über ein 
Portpin umschalte. Oder kann man die Leitung von innen "bewegen"?

Geht? Geht nicht? G...

Koopi



von Ralf (Gast)


Lesenswert?

Ach so, jetzt wirds dann natürlich klarer...

Also, wegen PSEN und EA, der originale 8031 (von dem der 8032 abstammt) 
konnte nur über externen Programmspeicher versorgt werden. In 
Wirklichkeit sind immer nur 8051/8052 produziert worden, also mit 
internem EPROM. Diejenigen, die fehlerhaften EPROM hatten, wurden dann 
eben 8031/8032 getauft. Deswegen gibts bei beiden EA und PSEN, und auch 
bei Derivaten wie dem ED2, denn es könnte ja sein, dass man einen 8032 
gegen einen ED2 tauschen will, weils den alten Chip nicht mehr gibt. 
Also muss die Möglichkeit gegeben sein, dass sich der neue wie der alte 
verhält...

Nun zu deinem eigentlichen Problem: Ich würde nicht den EA Pin schalten, 
da dieser in einigen Konfigurationen (Stichwort Leseschutz) beim PowerUp 
gelatcht wird. Wenn du ohne Leseschutz arbeitest, geht das natürlich 
THEORETISCH, von praktischen Anwendungen weiss ich leider nichts, dass 
das jemand schon mal so gemacht hat...

Du müsstest halt einen Teil deiner Applikation in beide Programmspeicher 
laden... Falls Fragen dazu sind, her damit...

BTW: Wofür brauchst du soviel? Sind das Daten, die da Platz fressen, 
oder wirklich Applikation?

Ralf

von Koopi (Gast)


Lesenswert?

Hallo Ralf,

>>BTW: Wofür brauchst du soviel? Sind das Daten, die da Platz fressen,
>>oder wirklich Applikation?
Ich habe eine Applikation die sowohl viel Code wie auch Daten hat. Es 
sind alleine 11 Sprache, u.a.japanisch und russisch, implementiert. Ich 
möchte nun noch einige dringende Erweiterungen einbringen ohne das 
gesamte Design umzuwerfen.
Mit der nächsten Generation wird ein ARM7 einzuhalten. Dafür ist es aber 
noch etwas zu früh.

>>Du müsstest halt einen Teil deiner Applikation in beide Programmspeicher
>>laden...
Dafür kann uVision das Banking. Das ist ja meine Überlegung.

Koopi

von Ralf (Gast)


Lesenswert?

>> ...sowohl viel Code wie auch Daten hat

Wärs dann nicht geschickter, die Daten in ein serielles EEPROM o.ä. 
auszulagern? Braucht nur zwei Pins...

Ralf

von Peter D. (peda)


Lesenswert?

Nimmste eben den AT89C51RC2, da kannste in die oberen 32kB den externen 
EPROM reinbanken.


Peter

von Koopi (Gast)


Lesenswert?

@Ralf,
ich habe sogar ein I2C-EEPROM im System. Ich müßte nur einen größeren 
einsetzen. Da ich aber sehr viele Menüs habe, wären die Ladezeit aber 
sehr lang. Und genug SRAM als Zwischenspeicher habe ich nicht.
Es ist trotzdem die beste Lösung, wenn der AT89C51RE2 nicht schnell 
genug kommt und der ...RD2 nicht internen und externen Programmspeicher 
in einem System beherrscht.

@Peter,

wir diskutieren hier über die eventuelle Nutzung des internen und eines 
externen Speichers beim AT89C51R'D'2. Bis auf den größeren Speicher sehe 
ich aber keinen Unterschied zum AT89C51R'C'2. Hast Du den AT89C51RC2 
schon einmal sowohl mit internem wie auch mit externem Programmspeicher 
genutzt?

Koopi

von Peter D. (peda)


Lesenswert?

Koopi wrote:

> wir diskutieren hier über die eventuelle Nutzung des internen und eines
> externen Speichers beim AT89C51R'D'2. Bis auf den größeren Speicher sehe
> ich aber keinen Unterschied zum AT89C51R'C'2.

Doch, es gibt einen großen Unterschied

Da intern nur 32kB sind, kannst Du ohne Probleme auch externen Speicher 
verwenden, indem Du ihn einfach über 0x8000 adressierst.
Es müssen dann nur die Interrupts und die Bankumschaltung unter 0x8000 
liegen.

Ich würde allerdings extern Flash-Chips nehmen statt EPROM, dann kannst 
Du im internen Flash einen Bootloader reinschreiben, der auch den 
externen Flash programmiert.


> Hast Du den AT89C51RC2
> schon einmal sowohl mit internem wie auch mit externem Programmspeicher
> genutzt?

Nein, ich habe bisher nur max 40kB benötigt.


Peter

von Bernhard K. (koopi)


Lesenswert?

Hey,

das Problem läßt sich leider auch nicht mit dem AT89C51RC2 lösen, da man 
nur den internen oder externen Programmspeicher ansprechen kann.

Ich habe aber heute 2 Chips AT89C51RE2 von Atmel bekommen. Somit kann 
ich bis zum liefern von Stückzahlen alles vorbereiten.

Koopi

von Peter D. (peda)


Lesenswert?

Bernhard Koopmeiners wrote:

> das Problem läßt sich leider auch nicht mit dem AT89C51RC2 lösen, da man
> nur den internen oder externen Programmspeicher ansprechen kann.

???

EA auf VCC, dann ist 0000-7FFF intern und 8000-FFFF extern.

Und in 8000-FFFF blendest Du dann soviel Bänke ein, wie Du brauchst.


Peter

von Koopi (Gast)


Lesenswert?

Hallo Peter,

das ist richtig, nur möchte ich, wie oben angeführt, die bestehende 
Applikation nicht ändern. Die Freigabe einer HW-Änderung ist immer sehr 
aufwändig. Ein Bauteil ersetzen ist dagegen sehr einfach.

Eigentlich ist es schade das Atmel die EA-Leitung bei diesen Typen nicht 
von innen schaltbar gemacht hat. Ob es von aussen über ein Portpin 
verdrahtet gehen wird, werde ich noch irgendwann testen.

Koopi

von Peter D. (peda)


Lesenswert?

Koopi wrote:

> Eigentlich ist es schade das Atmel die EA-Leitung bei diesen Typen nicht
> von innen schaltbar gemacht hat. Ob es von aussen über ein Portpin
> verdrahtet gehen wird, werde ich noch irgendwann testen.

Ne, das ist doch gerade der Trick am RC2, über den internen 32kB wird 
immer extern gelesen, völlig egal wie der EA-Pin steht.

Also EA nicht umschalten, sondern fest auf VCC legen !


Peter

von Koopi (Gast)


Lesenswert?

Der Trick wäre, eine alte Applikation die externen 64K hatte, mit dem 
RC2 ohne Hardwareänderung auf 96K zu erweitern.

Aber ich höre schon, dass es auch eine Frage der Anwendung ist.

Koopi

von Peter D. (peda)


Lesenswert?

Sobald Du 64kB überschreiten willst, mußt Du Banking nehmen oder ein 
Derivat mit erweiterter Adressierung.

Du brauchst als in jedem Fall ne Hardwareänderung und den banked Linker, 
dem Du dann das Banking-Schema angeben mußt.

Die externen 64kB kann man z.B. in 2 Bänke a 32kB aufteilen, mit A15 
über einen freien Portpin umgeschaltet.

Die Umschaltroutine muß als Assemblerobjekt in den unteren 32kB 
einbinden.


Peter

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.