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. |
"Verify after programming" kann optional angekreuzt werden. |
Options / Advanced Options |
Im Hauptmenü unter Options > Advanced Options den
|
- |
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 |
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 |
Advanced Options |
Im Reiter Security den Punkt "Protect ISP Code" ankreuzen. |
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:
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:
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.
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.