LPC2368 Problem mit ISP Bootloader

Gast #3276348
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:
Gast
Vielleicht hast Du den CRP-Key gesetzt.

So sieht es beim 1768 aus. Sollte beim 2368 aehnlich sein.

    AREA    |.ARM.__at_0x02FC|, CODE, READONLY
CRP_Key    DCD     0xFFFFFFFF
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
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.
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.