Das Flashen

Der ARM Controller ist sehr leicht zu programmieren. Zum Übertragen der Firmware auf den Controller wird das Programmierkabel an Programmer/Debugger sowie der Programmier-Pinleiste auf dem Selfbus-Gerät angeschlossen. Der Debugger/Programmer wird anschließend mit dem USB-Port des Rechners verbunden. Dann kann die Firmware übertragen werden. Geeignete Software sind FlashMagic (Fokus: User) oder die NXP IDE "MCU XPresso" (Fokus: Entwickler).  

Während des Flashvorgangs darf das Modul / der Controller nicht mit dem KNX-Bus verbunden sein (keine galvanische Trennung im Debugger/Programmer vorhanden!), außer zwischen Programmer und Rechner wurde ein Isolator gesteckt (z.B. bei AliE:https://de.aliexpress.com/w/wholesale-Power-Isolator-USB-to-USB-.html?spm=a2g0o.home.search.0 ).

Man sollte unbedingt auf die richtige Orientierung des Programmierkabels beim Selfbus Modul/Controller achten (Pin1 ist meist am quadratischen Pad zu erkennen - an der Buchsenleiste des Kabels befindet sich bei Pin1 eine dreieckige Markierung). Nicht auf allen Layouts ist genügend Platz für einen verpolsicheren Wannenstecker. Solange der Debugger / Programmer den angeschlossenen Controller nicht mit Strom versorgt, wird zwar höchst wahrscheinlich nicht viel passieren, es kann aber nicht immer davon ausgegangen werden, dass der verwendete Debugger / Programmer eine entsprechende Schutzbeschaltung enthält.

 

Software

Eine der einfachsten Möglichkeiten zum Flashen des Mikrocontrollers (egal ob LPC1115 oder LPC922) mit einer Firmware ist die Verwendung von Flash Magic in Verbindung mit einem Selfbus-Progger.

Das Programm ist für private Anwender kostenlos und kann von www.flashmagictool.com heruntergeladen werden.
Bis zur Version 11.20 wird auch der 89LPC922 unterstützt, neuere Versionen bringen bessere Voreinstellungen für die ARMs, bieten jedoch eben keine Unterstützung mehr für den alten LPC922.

  

LPC11xx (ARM)

Flash Magic konfigurieren

Bevor es losgehen kann müssen in Flash Magic einige Parameter korrekt gesetzt werden:

  Flashmagic 11.20 Flashmagic >= 12.00

Step 1

Device: LPC1115/303 oder bspw. LPC 1114/302 - je nachdem, welches Modell man verwendet hat.
COM Port: Die serielle Schnittstelle, an die der Programmer angeschlossen ist.
Baud Rate: 115200 (oder weniger)
Interface: None (ISP)
Oscillator Freq. (Mhz): 12.0000

 Device: LPC1115/303 einstellen

 

Step 2 "Erase all Flash" anhaken  "Erase all Flash" anhaken

Step 3

 

"Verify after programming" kann optional angekreuzt werden.
Da der Fehler immer wieder im Forum auftaucht: nicht "Fill unused Flash" ankreuzen! Das führt zu Problemen!

 "Verify after programming" kann optional angekreuzt werden.
Options / Advanced Options

Im Hauptmenü unter Options > Advanced Options den

  • Reiter Hardware Config wählen. Den ersten Punkt "Use DTR and RTS to enter ISP mode" wählen.
  • Reiter Security den Punkt "Protect ISP Code" ankreuzen.
 -
Step 4

Mit Browse das gewünschte HEX File suchen. Zum Beispiel direkt eines aus den Release-Builds im Git-Repo --> Link

 -

Step 5

 Start drücken  -

 

Im Gegensatz zum LPC922 muss man dem LPC1115 hier keine Konfiguration mitgeben - man kann es auch nicht.


 

LPC922 (LPC)

Flash Magic konfigurieren

Bevor es losgehen kann müssen in Flash Magic einige Parameter korrekt gesetzt werden:

 

Flash Magic 11.20

Step 1 -Communications 

Select Device: 89LPC922
COM Port: Die serielle Schnittstelle, an die der Programmer angeschlossen ist.
Baud Rate: 14400 (oder weniger)
Interface: None (ISP)
Oscillator Freq. (Mhz): 7.3728

Step 2 - Erase

"Erase all Flash" anhaken

Step 3 - Firmware

 Mit Browse das gewünschte HEX File suchen. Zum Beispiel direkt eines aus den Release-Builds im Git-Repo 

Step 4 - Options

 "Verify after programming" kann optional angekreuzt werden.

Da der Fehler immer wieder im Forum auftaucht: nicht "Fill unused Flash" ankreuzen! Das führt zu Problemen!

Nichts ankreuzen
Da der Fehler immer wieder im Forum auftaucht: auch nicht "Fill unused Flash" ankreuzen! Das führt zu Problemen!
Im Hauptmenü unter Options > Advanced Options den Reiter Hardware Config wählen. Den erste Punkt "Use DTR and RTS to enter ISP mode" wählen und als Hardware Keil MCB 900 auswählen. T1=250ms und T2=120ms.

Advanced Options

Im Reiter Security den Punkt "Protect ISP Code" ankreuzen. 
Den erste Punkt „Use DTR and RTS to enter ISP mode“ wählen und als Hardware Keil MCB 900 auswählen. T1=250ms und T2=120ms.

 Step 5

Start drücken

 

LPC konfigurieren

Man kann dem LPC ein paar Optionen setzen. Dazu geht man im Flash Magic in das Menü ISP > Device Configuration. Beim Öffnen des Dialogs werden die aktuellen Einstellungen des LPC angezeigt.

Den Watchdog sollte man nur aktivieren wenn in der installierten Firmware die Watchdog-Unterstützung eingebaut ist. Sonst resettet der LPC alle paar Sekunden.

Wenn die Schaltung einen Oszillator eingebaut hat (das kleine Ding mit den vier Pads), dann aktiviert man den Oszillator in diesem Dialog indem man "Clock" auf "External Clock on XTAL1" stellt, wie hier zu sehen:

Bei alten Schaltungen mit Quarz (also nicht Oszillator) stellt man "High Frequency Crystal/Resonator" ein, wie in diesem Bild zu sehen:

89LPC9xx Configuration 068

Achtung: Vorsicht beim Verändern der "Clock" Einstellung. Wenn man hier eine falsche Einstellung macht dann ist der LPC klinisch tot bis man ihn in einer Schaltung mit genau dazu passendem Bauteil wieder konfiguriert. Also hier auf keinem Fall experimentieren!

 

Hardware

Debug- und Programmierschnittstelle

Zum Übertragen der Software auf den Mikrocontroller befindet sich auf den Selfbus Controllern / Modulen mit LPC11xx eine modifizierte Cortex Debug-Schnittstelle (SWD + NXP ISPInterface - JTAG wird vom LPC11xx nicht unterstützt) mit folgender Pinbelegung: 

SelfbusTS_ARM_JTAG.jpg

Abweichend vom Standard wurde für die Debug- und Programmierschnittstelle auf den Selfbus-Controllern eine Pinleiste mit größerem Pinabstand von 2,00mm gewählt. Diese ist deutlich günstiger und lässt sich leichter von Hand löten.

Die Modifikation gegenüber dem ARM Cortex Standard besteht in den Pins ISP_RXD, ISP_TXD und ISP_Enable. Diese unterstützen die Programmierung mit dem Programm Flash Magic. Da diese Pins standardmäßig mit GND verbunden sind, müssen alle Selfbus Module / Controller (mindestens an den Pins ISP_RXD und ISP_TXD) Schutzwiderstände enthalten!

 

Geeignete Programmer / Programmier-Hardware

Selfbus USB-Programmer: Um die Firmware auf den ARM Controller zu laden, können die Selfbus-eigenen USB Programmer verwendet werden. Ein Debugging ist mit ihnen allerdings nicht möglich.
Die neuen Modelle (ab Version 3.7) haben einen 5x2-poligen ARM Cortex Debug Stecker mit größerem 2,00mm Pin-Abstand. Dadurch lassen sie sich direkt und ohne Adapter mit den Selfbus Modulen/Controllern verbinden. Außerdem wird das/der (vom KNX-Bus getrennte!!!) Modul/Controller während der Programmierung mit Strom versorgt.
Die RM2,00mm Stecker/Header gibt es z.B. bei Reichelt. Das passende Flachbandkabel in einem der verlinkten Selfbus-Shops.

Selfbus DAP-Debugger: Mit diesem CMSIS DAP kompatiblen Debugger kann sowohl die Firmware auf den ARM Controller geladen, als auch der ARM Controller debugged werden. Er kann das (vom KNX-Bus getrennte!!!) Modul/ den Controller während der Programmierung/des Debuggers mit Strom versorgen. Außerdem besitzt er bereits den SB-Link Header (5x2-poliger, modifizierter Cortex Debug Header mit 2,00mm Pin-Abstand).
Neben der DAP Funktionalität bietet er außerdem einen Virtuellen COM Port, der über den SB-Link Header mit dem LPC UART verbunden ist und z.B. für Debug-Ausgaben genutzt werden kann.

NXP MCU-Link: Dieser recht neue CMSIS DAP Debugger ist bereits für etwa 12€ erhältlich. Der Vorteil besteht in der nahtlosen Integration in die NXP Entwicklungsumgebung. Hiermit sind Programmierung und Debugging möglich. Eine Versorgung des (vom KNX-Bus getrennten!!!) Moduls/Controllers ist damit aber nicht möglich, d.h. man muss das Modul/ den Controller anderweitig mit Strom versorgen.

LPC-Link 2: Dieser bewährte CMSIS DAP Debugger kostet etwa 20€. Er integriert sich ebenfalls in die NXP Entwicklungsumgebung. Auch mit ihm sind Programmierung und Debugging möglich. Eine Versorgung des (vom KNX-Bus getrennten!!!) Moduls/Controllers ist damit möglich.

LPCxpresso: Dieses kleine Board (Herstellernummer OM13087UL) enthält einen CMSIS DAP kompatiblen Debugger/Programmer sowie einen Experimentier-Prozessor. Der Debugger/Programmer lässt sich vom Prozessorteil trennen und kann dann auch zum Programmieren/Debuggen externer Controller verwendet werden. Da das Board aber relativ teuer ist und nicht out-of-the-Box an die Selfbus Module / Controller zum Flashen angesteckt werden kann, ist es vorrangig für Entwickler interessant, die sich auf diesem Wege einen zusätzlichen Debugger/Programmer sparen können.


LPCXpresso_DevelopmentBoard_PIN_Belegung_TS_ARM_.jpg


Andere USB Programmer:
Prinzipiell eignet sich jeder CMSIS DAP kompatible Debugger/Programmer. Es gibt diese Preisbereich von 10 bis mehrere hundert Euro von diversen Herstellern. In jedem Fall muss das Verbindungskabel selbst hergestellt oder ein Adapter verwendet werden, da durchweg Programmier-Pin-Leisten nach dem ARM Cortex Standard im 1,27mm Raster verwendet werden. Eine Versorgung des (vom KNX-Bus getrennten!!!) Moduls/Controllers ist damit i.d.R. nicht möglich.

 

Programmer/Debugger Programmieren Debuggen Target Power Selfbus Connector Integration MCUXpresso IDE Preis
SB USB-Programmer × × ×  ca. 6,50 €
SB DAP Debugger × × × × × ca. 10€
NXP MCU-Link × × × 12€
LPC-Link 2 × × × × 20€
LPCxpresso Board × × (×) × 35€
Sonstige CMSIS DAP × × (×) (×) 10 - 800€

 

Verbindungskabel: Auf jeden Fall braucht man ein Selfbus-kompatibles Programmierkabel. Die passenden Stecker mit Rastermaß 2,00mm gibt es z.B. bei reichelt.de: "PL 2X05G 2,00". Das passende Flachbandkabel muss entsprechend Streifenraster 1mm haben. Die Steckerleiste für den USB-Programmer ist als "WL 2X05G 2,00" ebenfalls bei reichelt.de zu finden. Dies fehlt im Selfbus USB-Programmer-Warenkorb.