LPC2368 Problem mit ISP Bootloader

Gast #3276348
Lesenswert?

Hallo liebes Forum,

hat jemand Erfahrung mit den LPC2300gern?
Bei dem angehängten Schaltplan ist ein LPC2368 verwendet.
Ich hatte bei der allerersten Inbetriebnahme über einen USB zu seriell 
Wandler mittels FlashMagic schon Verbindung mit dem µC (ISP).
Konnte Device Signature auslesen und Blank check machen.
Konnte ihn genau einmal flashen, seitdem bekomme ich keine Verbindung 
mehr (Habe als Test das angehängte Programm benutzt).
Kommt immer dieser Autobaud Fehler, der glaub ich auch kommt, wenn man 
keine Kabel angeschlossen hat.
DTR und RTS kommen an und auch auf der Sendeleitung vom PC kommt was, 
nur der µC antwortet nicht.

Kann da was mit dem Startupcode falsch sein?
Hab ich irgendwas im Controller verändert, was jetzt die ISP sperrt?
Kann man den Bootloader löschen??
Muss ich bei Keil was beachten (bei diesen Targetoptions, von wegen IROM 
und sowas)??

Ich hoffe jemand kann mit helfen, vielen Dank erstmal und einen schönen 
Sonntagabend.

Gruß Borger
Angehängte Dateien:
#3276430
Lesenswert?

Ziehe mal P2.10 manuell auf LOW. Der Bootloader startet bei HIGH nur 
solage kein gültiges Programm geflasht wurde.

Außerdem sehen Deine AND-Gatter nicht so aus, als dürften die mit 
offenen Eingägen betrieben werden.

Deine main() enthält keine Endlosschleife.

Man kann sich aus diesen Chips auch selbst aussperren, wenn CRP auf eins 
der magischen Werte gesetzt wurde - insbesondere CRP 3. Das passiert 
i.d.R. aber nicht zufällig.
Gast #3276527
Lesenswert?

Ha, ihr seid die Besten!!!!
Danke!

Also das mit dem "Der Bootloader startet bei HIGH nur
solage kein gültiges Programm geflasht wurde."

Hat mich dazu gebracht ein Mikroskop zu besorgen und siehe da, P2.10 
hing in der Luft.

Eine Frage noch, die Prog.Zeile von CRP befindet sich im StartupCode???

Besten Dank nochmal.
#3276548
Lesenswert?

Schreib deinen Source-Code nächstes Mal als Text ins Posting rein,
macht die Sache kleiner und man kann sie direkt per
Cut&Paste übernehmen und ausbessern...

void main(void)
{
  IODIR0 |= 0x0001;
  IOSET0  = 0x0001;
  while(1);
}

Wenn ich mich richtig erinnere,
ist IOSETx/IOCLRx kein RMW (Read-Modify-Write).
Schreib den Wert direkt rein (ohne |).
Alle Bits die 1 sind, werden gesetzt/gelöscht.
Bei IODIRx schon | benutzen, da passt es!

In deinem Code wird der Pin (nach Behebung der Fehler)
gesetzt und gelöscht, dann siehst du nicht,
ob das Programm funktioniert.
Nimm vielleicht 2 Pins, setze den 1. Pin, lösche den 2. Pin.

Das Ende der main darf das Programm nicht erreichen.
Je nachdem, ob main per Sprung oder Unterprogrammaufruf
angesprungen wurde, läuft er chaotisch, stürzt ab, resetted sich
oder läuft endlos im Startup-Code.
Daher lieber gleich in main eine while(1) o.ä.
Was soll er sonst auch machen, wenn er fertig ist...
Gast #3279360
Lesenswert?

Hey!

Hab eure Tips berücksichtig.
Wie gesagt, war der Pin nicht richtig angelötet.

Allerdings habe ich jetzt ein anderes Problem.
Nun kann ich ihn flashen, aber scheinbar wird das Programm nicht 
ausgeführt.

Hab daraufhin nochmal alle Pins nachgelötet.

Die Main sieht jetzt so aus:

int main(void)
{
   IODIR0 |= 0x1;
   while(1)
   {
       IOSET0 = 0x1;
   }
}

Pin ist auf 2,3 V

nächster Versuch:

int main(void)
{
   IODIR0 |= 0x1;
   while(1)
   {
       IOCLR0 = 0x1;
   }
}

Pin ist immernoch auf 2,3 V
Und die meisten anderen IOs auch.
Habs auf Kürzschlüsse untersucht, aber nicht gefunden, die ganzen Vcc 
spannung haben alle 3,3 V und auch der Gesamtstrom der Schaltung ist mit 
ca 18 mA bei 3 LEDs nicht groß.
Den Transistor an P0.0 hab ich auch rausgenommen, vorher noch den 
Basiswiderstand auf 1K erhöht, aber alles nichts gebracht.

Habe ich Softwaremäßig irgendwas nicht bedacht?
Oder kann sich jemand auf Hardwareebene vorstellen, wo da ein Fehler 
liegt?
Sind vielleicht irgendwelche Interrupts schon aktiv, die ich abschalten 
müsste?

Vielen Dank schonmal.
Gruß Borger
Gast #3279368
Lesenswert?

Hättest vielleicht auch einfach auf einen anderen PIN wechseln können...
(z.B. P0.1, P0.2, ...)
Oder probiere einfach mal andere Pins, ob diese gehen.
Aufpassen bei den I2C Pins: Diese brauchen einen Pull-Up oder Pull-Down
(habe ich gerade nicht im Kopf), damit man sie als Ausgang benutzen 
kann.
Gast #3279394
Lesenswert?

Ich hab folgende andere Pins auch noch getestet.
P0.23..24..25..26

P1.18..19..20..21..23

Alle sind ob SET ob CLR auf 2,3 V
für den Port 1 habe ich natürlich auch IODIR1 uns IOSET1 benutzt, auch 
wenn ich vorher natürlich die 0 stehen lassen hab.

Aber es tut sich nix.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren