Hallo zusammen, ein Programm für AT89C51ED2 soll auf AT89LP51ED2 portiert werden. Minimale Anpassungen waren nötig. Flashen mit FLIP funktioniert. "Start Application" im FLIP startet das Programm. Programm läuft ohne Probleme, macht bis ins Detail alles genauso wie gewünscht. Soweit eigentlich alles erledigt. Aber: Ich kann nur genau 1x flashen. Wird danach Erase - Blank Check - Program - Verify mit demselben HEX-File durchgeführt, dann geht es nicht mehr. Im Flash steht überall 0xFF. Verify geht logischerweise schief. Schalte ich das Target aus, verbinde neu und führe anschließend Program - Verify durch, so klappt das. Im Flash stehen die richtigen Bytes. Das Programm läßt sich aber nicht starten. Wieso? Hat jemand ein Idee? Was ist nach dem ersten Programmiervorgang anders? Irgendwelche Fuses? Da gibts ja nicht viel im Flip. Viele Grüße Bernie
Bernhard B. schrieb: > Hat jemand ein Idee? Ja. Laut Datenblatt müssen Vcc, Reset und PSEN in bestimmter Reihenfolge auf verschiedene Pegel gesetzt werden, um korrekt zu flashen. Wurde das beachtet?
Ich muss auch demnächst was mit AT89LP51ED2 machen und hätte Fragen: Braucht es für das erstmalige FLIP flashen einen externen Quarz? Oder nutzt der Bootloader den internen 8 MHz Oszillator? Ab Wert ist laut Datenblatt die Fuse für externen 12 MHz Quarz gesetzt und die kann nicht mit FLIP auf den internen 8 MHz Oszillator geändert werden. Es ist also ein Programmer erforderlich? Kennst Du diesen Arduino "Programmer"? https://petervanhoyweghen.wordpress.com/ Soweit ich das sehe braucht der aber auch erst mal einen externen Quarz.
Lothar schrieb: > Ich muss auch demnächst was mit AT89LP51ED2 machen und hätte Fragen: Falls Du mich meinst: Ich weiß von den LP-Typen erst seit diesem Thread. Ich habe nur vor ca. einem Jahr zeitgleich einen 80C51 und einen 80S51 programmiert, daher kenne ich noch die grundlegenden Unterschiede und worauf man achten muß. Ich hatte nur noch dunkel in Erinnerung, daß da was mit Reset und PSEN war und hab daraufhin ins Datenblatt geschaut. Im Kapitel 23 "Flash Memory Programming" steht eigentlich Alles drin. > Es ist also ein Programmer erforderlich? "Programmer" ist ein Universalwort wie Dongle oder Dingsbums. Es ist sinnvoll, genauer zu spezifizieren, wenn man Klarheit möchte. Um das vom "Programmierer" geschriebene und vom Compiler/Assembler übersetzte "Programm" in den Flash-Speicher des uC zu bekommen, braucht es immer einen "Programmer". Da hat der AT89LP51ED Laut Datenblatt mehrere Möglichkeiten. Entweder nutzt man als "Programmer" den im ROM befindlichen Bootloader, dann muß man diesen mit der passenden Pegelfolge an Reset und PSEN aktivieren und per Programm Flip (oder einem anderen Programm) die passenden Kommandos über den UART an den uC schicken. Dazu muß die CPU arbeiten und benutzt den in den Fuses eingestellten Takt. Ist der auf extern gestellt, muß man eben einen externen Takt bereitstellen. Oder man nutzt den von Atmel ISP genannten Modus über MISO/MOSI/SCK, der kommt ohne CPU und deren Takt aus, SCK ist der Takt. Dazu braucht man dann externe Hardware, die diese Signale erzeugt. Dazu muß der uC das Resetsignal aktiviert haben. Das scheint der folgende Aufbau zu machen: > Kennst Du diesen Arduino "Programmer"? > https://petervanhoyweghen.wordpress.com/ Ich kenne ihn nicht, aber aus kurzem Durchlesen scheint mir klar zu sein, daß es ein ISP-Programmer ist. Damit kann man dann auch die Fuses setzen und den internen Oszillator für den Betrieb auswählen. Jetzt darfst Du aussuchen, was Dir lieber ist. Gruß Klaus (der soundsovielte)
Hallo Klaus, das Problem ist, daß das Programm beim AT89LP51ED2 nicht startet. Nicht nach click auf "Start Application" und auch nicht nachdem die Spannung weggenommen wurde. Das Programm wird in den Flash geschrieben. Das wurde mit Read oder auch Verify geprüft. Ich kann es nur starten nachdem es im fabrikneuen Zustand geflasht wurde. Beim AT89C51ED2 hingegen funktioniert alles wie es soll. Die Sequenz bezüglich PSEN und RST über die Leitungen DTR und RTS macht FLIP beim AT89C51ED2 offensichtlich richtig. Der LP scheint sich hier anders zu verhalten. Zumindest nach dem ersten flashen. Grüße Bernie
Wenn Programm korrekt im Flash steht, aber nicht startet, prüfe ob BLJB richtigen Status hat. (Vermutung: Die Fuse wurde beim ersten Flashen geändert.)
Bernhard B. schrieb: > Der LP scheint sich hier > anders zu verhalten. Zumindest nach dem ersten flashen. Dazu kann ich wohl wenig beitragen. Wie ich schon schrieb, kenne ich die LP-Serie erst, seit ich Deine Anfrage gelesen habe. Zur Sicherheit würde ich nochmal mit einem Oszilloskop nachprüfen, ob die Folge Resetaktiv/PSENauf0/Resetpassiv korrekt abläuft, aber das ist wohl nur sinnvoll, wenn der 89LP51 auf einer anderen Platine sitzt als der 89C51, davon schreibst Du ja nichts. Und wenn das Verify Deinen Programmcode bestätigt, sollte eigentlich auch Alles okay sein. Einzige Möglichkeit außer einem Hardwarefehler scheint mir nur noch ein im LP-Typ neu eingeführter Bootmode zu sein, den es im C-Typ nicht gibt. So genau habe ich mir das Datenblatt noch nicht durchgelesen. Ein Erratasheet scheint es noch nicht zu geben, von daher hilft dann wohl nur der Umstieg auf einen ISP-Programmer. Gruß Klaus (der soundsovielte)
Hallo Bernhard S, Die AT89LP... Serie verfügt über zwei mögliche Reset-Verfahren: 1. Der Standard-Reset aller 8051 Controller funktioniert mit einem active-High Reset-Impuls. 2. Die LP-Serie lässt sich über eine Fuse alternativ auch auf einen active-Low-Impuls einstellen. 3. Des Weiteren verfügt die LP-Serie auch über einen automatischen Power-on-Reset. Hier gilt es das gewünschte Reset-Verfahren über die richtige Fuse-Einstellung auszuwählen. Wahrscheinlich liegt hier das Problem, warum die AT89C... Serie startet und die AT89LP... Serie nicht, weil der falsche Reset-Impuls eingestellt ist. Ich hoffe geholfen zu haben Grüße von Lothar
> von HolgerT > Wenn Programm korrekt im Flash steht, > aber nicht startet, prüfe ob BLJB > richtigen Status hat. > (Vermutung: Die Fuse wurde beim ersten Flashen geändert.) BLJB ist laut FLIP gesetzt. Das ist aber auch egal, solange im BSB 0x00 steht springt er spätestens bei dieser Abfrage auch zu User Application. Siehe Seite 206 im Datasheet. Einwände? > von Klaus S. > Oszilloskop nachprüfen, ob die Folge > Resetaktiv/PSENauf0/Resetpassiv korrekt abläuft werde ich mal machen. > 89LP51 auf einer anderen Platine sitzt als der 89C51 Ich habe von beiden Versionen beliebig viele Leiterplatten zur Verfügung. Diese sind identisch bis auf den getauschten LP-Typ. > LP-Typ neu eingeführter Bootmode nur warum soll das dann beim ersten mal gehen und dann nicht mehr? Ich forsche... > Umstieg auf einen ISP-Programmer das wird wohl nicht ausbleiben und ich muß ein paar Leitungen anbringen Grüße Bernie
Hallo Bernhard B, ich habe hier noch eine Ergänzung für dich, aus einem Kommentar, den ich auf meinem Platinenlayout hinterlassen habe, um diese Information bei jeder Bearbeitung immer sofort zur Verfügung zu haben. Ich gebe sie dir hier unbearbeitet wieder: Achtung! - Der Reset arbeitet mit wechselnder Polarität, abhängig von der Beschaltung des POL Pins: - POL = +Vcc bedeutet einen Reset mit Active-High - POL = GND bedeutet einen Reset mit Active-Low Der Controller verfügt über einen internen Power-On-Reset (POR), so dass eine Klassische Reset-Beschaltung nicht unbedingt erforderlich ist. - Dieses Board kann primär mit folgenden Controllertypen bestückt werden: a) AT89LP51RB2 b) AT89LP51RC2 c) AT89LP51RD2 d) AT89LP51ED2 e) Es sind auch noch (evtl. mit Einschränkungen) folgende Controller möglich: - AT89C51RB2, AT89C51RC2, AT89C51RD2, AT89C51ED2 (Nur per Bootloader, z.B. mit Atmel FLIP programmierbar). - AT89S8253 (Nur per SPI programmierbar, z.B. mit LSISP). - AT89S52, AT89LS52 (Nur per SPI programmierbar, z.B. mit LSISP). Für diese "klassischen" AT89-Controller ist die Reset-Beschaltung aus C7 und R8 installiert, die nur dann arbeitet, wenn mit J4 = 1 - 2 ein positiver Reset eingestellt ist. - Wenn der Quarzoszillator mit den Jumpern J1 und J2 stillgelegt wird, können die beiden frei werdenden Pins P4.6 und P4.7 über eine Fuse-Bit Einstellung als normale Pins betrieben werden betrieben werden. Per weiterer Fuse-Bit muss dann auf den internen 8 MHz RC-Oszillator umgeschaltet werden. - Der Controller kann auch per Bootloader über RXD und TXD programmiert werden. - Um in den Bootloader-Modus zu gelangen, muss folgender Ablauf durchgeführt werden: 1. RST-Taster drücken und halten 2. PSEN-Taster drücken und halten 3. RST-Taster loslassen 4. PSEN-Taster loslassen Der Controller ist jetzt bereit über TXD und RXD Programmdaten zu empfangen, z.B. von der Atmel-Software FLIP. Vielleicht hilft Dir das weiter. Grüsse von Lothar
Bernhard B. schrieb: > Diese sind identisch bis auf den getauschten LP-Typ. Da kann ich nur kichern. Gleich sind sie nur, wenn auf derselben Platine die CPU getauscht wurde. Ansonsten hängt es von der Qualität der Endtests ab, ob alle Abweichungen gefunden wurden. Und auch danach können noch Fehler eingebracht werden. Da aber inzwischen die Experten aufgetaucht sind, die die LP-Typen zu kennen scheinen, würde ich erstmal auf die hören. Ich bin nur ein kleiner Physiker, der mit zwanzig verschiedenen CPU-Typen gearbeitet hat und zusätzlich ein bißchen von den Grundlagen der Fehlersuche versteht. Grundsatz eins: Traue niemandem, am wenigsten Dir selber! Grundsatz zwei: Miß alles mindestens zweimal nach! Ab und an erlebst Du eine ungeahnte Überraschung. Gruß Klaus (der soundsovielte)
Bernhard B. schrieb: > BLJB ist laut FLIP gesetzt. Nimm ihn (von mir aus testweise) raus, denn im Manual heißt es: "Unprogrammed (‘1’ value) to start the user’s application on next reset at address 0000h. Programmed (‘0’ value) to start the boot loader at address F800h on next reset (Default)." Du weißt nicht, ob der Haken "Programmed" bedeutet oder "1-Unprogrammed" (und ich kann mich nicht mehr erinnern, wie es war, als ich ähnliche Probleme hatte. Beitrag "Re: Probleme mit einer Charge AT89C51CC03") Gut, der ..CC03 hat kein SBV, ich würde es an Deiner Stelle trotzdem probieren...
Hallo!
@Lothar: Danke für die ausführliche Info.
Hier ist POL = +Vcc, also Reset = Active-High
RST ist im Betrieb auf 0.
Pin 4.6 und 4.7 sind mit einem 12MHz Quarz beschaltet. Der schwingt.
RST-PSEN-Sequenz stimmt.
@HolgerT: Ich bin mir nicht mehr sicher, ob FLIP alles korrekt ausgibt.
Es gibt zwar Checkboxes für BLJB und X2, die lassen sich aber nicht
beliebig an- und abwählen.
Clicke ich z.B. auf BLJB, so kommt in der Statuszeile unten "BLJB fuse
disabled", aber der Haken bleibt drin. Abwählen geht nicht.
Im Debug Fenster wird die Message :030000030A0401EB ausgegeben.
@Klaus S:
> Gleich sind sie nur, wenn auf derselben Platine die CPU getauscht wurde.
Ja, so war's. Bin also in die Produktion und habe mir ein paar geholt,
getestet und erst anschliessend mit dem neuen Controller versehen. Das
Programm läuft sowohl auf dem 89C51 als auch auf dem 89LP51. Bei
letzterem eben nur wenn er frisch aus dem Werk geflasht wird.
Grüße
Bernie
Bernhard B. schrieb: > Clicke ich z.B. auf BLJB, so kommt in der Statuszeile unten "BLJB fuse > disabled", aber der Haken bleibt drin. Abwählen geht nicht. Das Datenblatt sagt eindeutig: die CPU kommt nicht an die Fuses, also Flip ebenfalls nicht, da Flip über die CPU programmiert. Ist wohl Zeit, einen Arduino als ISP-Programmer einzusetzen. Hat bei mir gut funktioniert, als PonyProg mit STK200-Dongle nicht funktionieren wollte. Geht natürlich mit jedem anderen uC ebenfalls, den man selbst programmieren kann. Gruß Klaus (der soundsovielte)
Klaus S. schrieb: > Das Datenblatt sagt eindeutig: die CPU kommt nicht an die Fuses, also > Flip ebenfalls nicht, da Flip über die CPU programmiert. Lt. Datenblatt kann der Bootloader sehr wohl das BLJB ändern. Table 23-20. Bootloader Command Summary, Command 03h, 0Ah, 04h Nach dem Häckchen setzen noch das Return drücken.
Peter D. schrieb: > kann der Bootloader sehr wohl das BLJB ändern Soweit ich verstanden habe startet der Bootloader aber nur ab Werk und nach dem ersten Flashen nur nochmal wenn BLJB dabei gesetzt wurde. Wenn also jetzt der Botloader nicht mehr startet, geht nur noch Programmer, oder?
Peter D. schrieb: > Lt. Datenblatt kann der Bootloader sehr wohl das BLJB ändern. In Kapitel 23.2 steht: Note that the bootloader only has limited access to the fuses. For full device configuration an external ISP programmer is required. Das habe ich wohl etwas überinterpretiert. Mein Fehler! In Fig.23.9 steht, wie der Bootvorgang abläuft und BLJB, ENBOOT und BSB gesetzt sein müssen. Gruß Klaus (der soundsovielte)
Hallo! Derzeit habe ich noch keine Lösung und habe das Thema erstmal auf die Seite gelegt, bis ich einen neuen GALEP habe. Mein alter GALEP kann mit dem Controller nicht umgehen. Der ist noch aus einer Zeit in der das Fernsehen schwarz-weiß war. Über den Bootloader kommt man nicht an alles ran. So macht das keinen Sinn. Ich melde mich wieder. Danke und Grüße Bernie
Hallo Bernhard B., Mit dem Bootloader kannst Du den Controller schon in seinen Kompatibilitätsfunktionen in Betrieb nehmen, z.B. als Ersatz für den AT89C51ED2. Das funktioniert mit Flip. Habe ich selbst vor ein paar Tagen aus Interesse ausprobiert. Willst Du allerdings das neue Feature der LP-Serie, den single cycle Mode aktivieren, so geht das nur mit einem ISP-Programmer und einer entsprechenden Software, da Du die Fuses verändern musst und an die kommt man mit dem Bootloader nicht heran. V.G. von Lothar
Hallo Lothar, ja, der LP-Typ ist als Ersatz für den C-Typ vorgesehen, weil der eben lieferbar ist. Benötige keine neuen Features. Das Programm läuft auch einwandfrei nach dem ersten mal flashen. Ich könnte mich damit zufrieden geben, da im Service-Fall sowieso die ganze Elektronik getauscht wird. Außerdem werden in der Produktion nur die Bootloader-Commands genutzt. Andere Möglichkeiten sind auf der Leiterplatte nicht vorgesehen. Redesign will man auch nicht. Also wird es sowieso darauf hinauslaufen das zu akzeptieren. Da ich aber die letzte Instanz bin, gebe ich mich damit nicht zufrieden und will es ganz genau wissen. Ich sehe den Tag schon kommen, daß man irgendeine neue Funktion implementieren will und ich dann aber erklären muß, daß vorhandene Geräte nicht Update-fähig sind. Wenn du das probiert hast, dann sag mir bitte mal, ob das bei dir auch so ist? Es scheint so, daß bei mir zu irgendeinem Zeitpunkt das XRAM config bit geändert wird. Nach dem ersten mal flashen steht im Hardware-Byte noch 0xB7 drin. Damit funktioniert alles. Später, nach einem weiteren erase/flash-Vorgang steht dann nur noch 0xBF drin. Damit funktioniert das Programm nicht mehr. Dabei ist das XRAM Config bit nur über programmer tools zugänglich. Nur eine Vermutung. Wie schon geschrieben, ich brauche jetzt erstmal geeignetes Werkzeug. Grüße Bernie
Bernhard B. schrieb: > brauche jetzt erstmal geeignetes Werkzeug Wie geschrieben es sollte auch mit Arduino gehen: https://petervanhoyweghen.wordpress.com/ https://github.com/PeterVH/ArduinoISP/tree/at89 const unsigned char fuses[] = { ... };
Hallo Bernhard B., ich arbeite auf Hobby Ebene seit Jahren mit dem AT89LP51RC2 ohne Probleme. Ich habe mir dafür meine ISP-Hardware als USB -> RS232 Umsetzer für unter 5,00 € in China gekauft und die Programmiersoftware in VB6 selbst geschrieben. Das funktioniert seit ca. 2009 für meine Bedürfnisse zufriedenstellend. Die Software kann sowohl im ISP, als auch im Bootloader Betrieb arbeiten. Ich habe mich erst jetzt, aufgrund Deines Problems, aus Interesse mal wieder seit Jahren mit FLIP beschäftigt. Ich kann Dein Problem allerdings nicht nachvollziehen. Das einzige Problem, dass sich mir stellte, war das BLJB Bit. Da muss halt das Häkchen in FLIP herausgenommen werden, wenn der Controller nach einem Spannungsreset nicht im Anwendungsprogramm starten will, sondern in den Bootloader springt und nichts tut. Aber ich habe noch einen anderen Hinweis für Dich. Du sprachst davon, dass Du zum Testen beliebig viele Boards aus der Produktion bekommen kannst und dass die Boards dort mit FLIP programmiert werden. Also handelt es sich um ein kommerzielles Produkt und ich gehe davon aus, dass alle 3 Lock-Bits in der Produktion gesetzt werden, damit niemand an das Programm herankommen kann. Möglicherweise liegt in dieser Tasache Dein Problem begründet, warum sich der Controller Deiner Meinung nach seltsam verhält. Ich selbst habe als Hobbymensch noch keine Versuche mit den Lock-Bits gemacht. Vielleicht lohnt es sich, darüber mal im Datenblatt nachzulesen? L.G. von Lothar
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.