Forum: Mikrocontroller und Digitale Elektronik LPC2368 Problem mit ISP Bootloader


von Borger (Gast)


Angehängte Dateien:

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

von W.S. (Gast)


Lesenswert?

Du solltest den Pin, der für VBUS vom USB dienen kann, auf low legen. 
4k7 sollte ausreichen.

W.S.

von Borger (Gast)


Lesenswert?

Habe ich gerade probiert, hilft aber leider nichts, danke.

von ./. (Gast)


Lesenswert?

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

von Jim M. (turboj)


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.

von Borger (Gast)


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.

von ./. (Gast)


Lesenswert?

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

Brilliant beobachtet.

von Martin M. (capiman)


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

von Borger (Gast)


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

von Herbert (Gast)


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.

von Borger (Gast)


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.

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.