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
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
@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
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
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
>> ...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
@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
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
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
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
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
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
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
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