Forum: Mikrocontroller und Digitale Elektronik LPC21xx flash Problem


von Plumps (Gast)


Lesenswert?

Hallo µC- community,

ich hab das Forum schonmal durchsucht, aber nicht`s zu meinem Problem
gefunden, darum eröffne ich nen neuen thread.

Ich hab mir ein Evolution Board (LPC-2132) gebaut, und das ganze mit
einem Seriellen-Kabel an den Rechner angeschlossen. (bis jetzt keine
Problem)
Nun hab ich den Flasher von Philips gestartet und die ID ausgelesen,
blank- check und hex-file überspielt. (immer noch kein Problem)
Aber nun wollt ich den Flash vergleichen (compare), kommt aber eine
Fehlermeldung (nicht erfolgreich), und auf dem Board blink auch keine
LED. :(

Hat jemand ne Idee ???

von Christian (Gast)


Lesenswert?

Hi Jens,

funktioniert dein Programm denn im Simulator? Wenn du die Device-ID
auslesen kannst und das Flashen auch zu klappt, scheint dein Board ja
aus Sicht der Hardware zu funktionieren.

Christian.

von Jens M. (plumps)


Lesenswert?

Hallo,

@Christian: Ich hab µVision3 und hab da irgendwie keine ordentliche
Simulation zu stande bekommen. Mein Quelltext is auch nicht gerade sehr
kompliziert.
------------------------------------------------
#include "LPC213x.h"
int main (void) {

IODIR0 = 0x00000001b;     // P0.27 als output
IOCLR0 |= 0x0000001b;     // LED on

}
------------------------------------------------
die header datei hab ich von der keil Seite runtergeladen.
Ich denk mal der Code ist in ordnung, oder?
Den Startcode hab ich auch erzeugt, und die hex datei erstellen
lassen.
Gibt`s vielleicht noch ein bequemeres Programm? Ich hab mal WinARM
ausprobiert, komm ich aber (ganz ehrlich) nicht mit zurecht.

Jens

von roty (Gast)


Lesenswert?

Jens ,

ich weiss nicht ob das dir hilft. Ich hatte anfangs ein ähnliches
Problem mit dem ISP Tool. Flashen war ok, aber Verify ging nicht.
In einem LPC21xx Forum habe ich auf meine Nachfrage folgende Antwort
bekommen und das half bei mir:

>> In the flash buffer screen download your HEX file, perform a
>> vector calc, and save the hex file back. It should then verify OK.

von Christian G. (Gast)


Angehängte Dateien:

Lesenswert?

Also,

dein Code macht im Augenblick folgendes:
-setzte Portpins 0,1,3 und 4 als Ausgang
-setzte eben diese Pins auf 0

Wenn deine LED per Widerstand auf +3.3V liegt, sollte was leuchten,
wenn sie gegen Masse geht, leuchtet natürlich nichts. Das ist aber
wahrscheinlich in beiden Fällen nicht das, was du willst. Versuchs mal
mit:

#include "LPC213x.h"
int main (void) {

IODIR0 = 0x08000000;     // P0.27 als output
IOSET0 = 0x08000000;     // Pin geht auf 1

}

Die IODIR Register repräsentieren mit jedem Bit einen Portpin, wobei
das MSB, also Bit31, links steht und das LSB Bit0 rechts. Schreib
0x08000000 mal binär mit MSB links, dann wirds klar.
Die Register IOSET/IOCLR funktionieren genauso, wobei das eine Register
immer für das Setzen eines Pins und das andere fürs Löschen zuständig
ist. Das mit dem Verodern kannst du dir dort also sparen.
Verodern müsstest du nur wenn du direkt ins jeweilige IOPIN Register
schreibst (die Details kannst du sehr gut im LPC213x User Manual
nachlesen).
Der Simulator vom uV3 ist gar nicht so schwer zu bedienen, vor allem
hilft er dir zu kontrollieren, ob dein Programm überhaupt über den
Startup-Code hinauskommt.
Vorausgesetzt, daß du des Englischen ausreichend mächtig bist, kann ich
dir nur folgendes Tutorial empfehlen:

"The Insider's Guide To The Philips ARM7-Based Microcontrollers"
http://www.hitex.co.uk/arm/

Das Ding ist wirklich gut, angefangen bei den nötigen Details über den
Prozessor, bis zur Anleitung, wie die Keil Entwicklungsumgebung
einzurichten und zu bedienen ist, was im Startup Code und den
Linkerscripts steht und vieles mehr.
Ich habe dir mal ein Binary des Blinky-Examples hier angehängt. Das
macht auf P0.16..23 ein Lauflicht. Läuft bei mir einwandfrei im
Simulator (LPC2132 Target) und genauso auf dem Evalboard (LPC2138).
Die Source sollte bei dir unter <DRV:>\keil\arm\examples\Blinky
stehen.

Viel Spaß,
Christian.

von Wiesi (Gast)


Lesenswert?

Falls das:

#include "LPC213x.h"
int main (void) {

IODIR0 = 0x08000000;     // P0.27 als output
IOSET0 = 0x08000000;     // Pin geht auf 1

}

der ganze Source ist, sehe ich sowieso ein Problem, denn
es werden die beiden Instruktionen ausgeführt und dann -
dann läuft der Instruction pointer weiter, aus dem main raus
ins Niemandsland.

Sollte zumindest so sein:

#include "LPC213x.h"
int main (void) {

IODIR0 = 0x08000000;     // P0.27 als output
IOSET0 = 0x08000000;     // Pin geht auf 1

while(1);

}

von Christian G. (Gast)


Lesenswert?

Womit du natürlich vollkommen recht hast, wenn das der ganze Code wäre
und der Compiler das nicht abfängt.

von Jens M. (plumps)


Lesenswert?

JUHU es blinkt wie wild auf meinem Board.
Danke Jungs, für die Starthilfe.
Ich hab zwar schon den Guide von hitex runtergeladen, aber nur mal kurz
überflogen. Werd mich jetzt mal intensiver damit zu beschäftigen.

Nochmal danke für all eure Beiträge.

Schöne Grüße aus einem dunklen (aber grün blinkendem) Zimmer in Jena.
Jens

von Mattias (Gast)


Lesenswert?

Hallo,
ich habe jetzt auch ein Problem mit meinem LPC2138.
Folgendes:

Es treten immer wieder Probleme beim Betrieb auf, die nicht immer
nachvollziehbar sind. Daraufhin habe ich auch ein file-compare
ausprobiert. Habe es genauso gemacht, wie es roty beschrieben hat.
Ergebnis aber immer compare failed.
Habe dann ein File vergleich gemacht und gesehen, dass immer der
gleiche Unterschied besteht, wie im Bild zu sehen ist. Das sich die
erste Zeile unterscheidet, will ich mal so glauben. Aber der
Unterschied in der 2. bzw. 3. Zeile (letztes Zeichen) macht mich
stutzig. Sonst sind die Dateien absolut gleich. Weiss zufällig jemand
was das sein kann ? oder ob das nicht wirklich ein Unterschied ist ???

Noch was zu meiner Hardware:
ich verwende den gnu compiler und die Philips download software vers.
2.2.1
Ich habe alle Baudraten versucht. Es liegt immer der selbe Unterschied
vor.

Mattias

von Mattias (Gast)


Angehängte Dateien:

Lesenswert?

Hm....
Bild vergessen.
hier der Unterschied.
Mattias

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.