ARM Entwicklung: Verwendung der sblib

Version 13.2 by Olli S. on 2016/08/17 21:04

In diesem Dokument soll beschrieben werden, wie man die Daten für ein erstes eigenes (nachgebautes) KNX Gerät zusammenträgt und in ein Programm für den sogenannten „ARM“ Controller auf Basis des LPC1115 bzw. 1114 einträgt.
Mit diesen Daten, der sblib, der passenden Produktdatenbank und der ETS Software ist es dann möglich dem Gerät die physikalische Adresse und das Applikationsprogramm zu übermitteln.

Erster Schritt: ein Gerät bestimmen, welches nachgebaut werden soll. Beispielsweise nehmen wir hier mal den „Glas Raumtemperaturregler“ (SCN-RT1GS.01) von MDT. Für dieses Gerät kann die Produktdatenbank in Form einer *.knxprod Datei herunter geladen werden. Diese Datei lässt sich z.B. mit dem Tool 7-ZIP öffnen und es erscheint folgende Ansicht:

knxprod_hauptverzeichnis.png

Abbildung 1: Dateistruktur der *.knxprod Datei

Hier ist der Ordner „M-0083“ auszuwählen und es wird folgender Inhalt angezeigt:

knxprod_unterverzeichnis.png

Abbildung 2: Dateistruktur des Ordners „M-0083“

Die Datei „M-0083_A-007-12-AADB.xml“ lässt sich gut mit z.B. dem Notepad++ öffnen.

Nun sollte man sich klar machen, welche Daten überhaupt für ein KNX Gerät zur Identifizierung benötigt werden:
Hersteller Code (manufacturer)
Gerätetyp (deviceType)
Version
Hardware Version
Typ des Busankopplers

Für den Start kann man sich am besten ein bestehendes Programm aus dem Repository von selfbus laden und dieses verändern. Um eine lauffähige Umgebung zu bekommen sollte dieses Tutorial durch gearbeitet werden: http://selfbus.myxwiki.org/xwiki/bin/view/Selfbus/Eclipse_ARM
Anschließend kopiert man sich ein Projekt in LPCXpresso und kann loslegen:
In der Datei „app_main.cpp“ findet sich die Routine „void setup()“ in der sich wiederrum der Aufruf der Routine „bcu.begin“ befindet.

app_main_cpp.png

Abbildung 3: Setup eines KNX Gerätes

Diese hat die Übergabeparameter
void BcuBase::begin(int manufacturer, int deviceType, int version)

Der Hersteller Code (manufacturer), der Gerätetyp (deviceType) und die Version ist aus dem Dateinamen der bereits erwähnten Datei „M-0083_A-007-12-AADB.xml“ zu entnehmen.
In diesem Fall ist
0x0083 der Hersteller Code (manufacturer),
0x0047 der Gerätetyp (deviceType) und
0x12 die Version

Analog dazu sind die entsprechenden Stellen für andere Geräte auszuwerten.

Die Hardware Version, die wie in Abbildung 3 abgebildet ist, in einem Array abgelegt und anschließend in das userEeprom kopiert wird, lässt sich aus der Datei „M-0083_A-007-12-AADB.xml“ entnehmen. Sie ist unter dem Parameter „LdCtrlCompareProp“ zu finden. In der Datei ist in diesem Fall der Eintrag
<LdCtrlCompareProp ObjIdx="0" PropId="78" InlineData="00000000004800000000" />
zu erkennen. Dieser wird folgerndermaßen ausgewertet:
Die Angabe ist Hexadezimal und 6 Byte lang. Angefangen wird hier bei der linken Stelle (MSB) und dann entsprechend 6 Bytes hinunter. Diese Daten werden dann in das Array übertragen.

Für die Wahl des korrekten Busankopplers, für die die sblib kompiliert werden muss und an den auch die Parameter des Projektes in LPCXpresso angepasst werden müssen, ist der Parameter „MaskVersion“ wichtig. In der Datei „M-0083_A-007-12-AADB.xml“ ist der Eintrag MaskVersion="MV-0701" zu finden.
Ist dort *70*, so wie hier zu finden, handelt es sich um ein BIM112 Busankoppler.
*01* steht für eine BCU1, *02* für eine BCU2.
Die Parameter in LPCXpresso für das neu erzeugte Projekt müssen an folgenden Stellen angepasst werden:

Preprocessor_BCU_settings.png

Abbildung 4: Projekteinstellungen C++ Compiler für den Busankoppler

 

BCU1 -> BCU_TYPE=10
BCU2 -> BCU_TYPE=20
BIM112 -> BIM112

Libraries_BCU_settings.png

Abbildung 5: Projekteinstellungen C++ Linker für den Busankoppler

BCU1 -> "${workspace_loc:/sblib/Debug_BCU1}"
BCU2 -> "${workspace_loc:/sblib/Debug_BCU2}"
BIM112 -> "${workspace_loc:/sblib/Debug_BIM112}"

Wenn nun noch die sblib in der korrekten Busankoppler Version kompiliert wurde, sollte ich das Projekt übersetzen lassen und das Gerät sich mittels ETS mit einer physikalischen Adresse und dem Applikationsprogramm versehen lassen.
Natürlich passiert (wenn überhaupt etwas passiert) nicht das richtige, aber man hat der ETS glaubhaft gemacht, dass ein entsprechendes Gerät am Bus angeschlossen ist.

Nun sollte auch das Programm im Gerät auf die entsprechenden Daten zugreifen können, die mittels ETS in das Gerät geschrieben wurden. Diese Daten werden im sogenannten userEeprom abgelegt und können dort ausgelesen werden. Nun muss man für das Auslesen eine bestimmte Adresse angeben, an der sich die gewünschten Daten verbergen. Wie kommt man also an die Informationen, an welcher Adresse sich welche Daten befinden?

Dafür nimmt man sich wieder die Datei „M-0083_A-007-12-AADB.xml“ vor und hält nach einer Sektion Ausschau, die die Anfangsparameter <Parameter… und in der nächsten Zeile <Memory… hat. In diesem Fall ist das ab Zeile 1309: