DALI High Level Treiber


 

1 Einleitung

DALI, das Digital Addressable Lighting Interface, ist der Schlüssel zu moderner, digitaler Lichtsteuerung. Es ermöglicht die einfache Installation robuster, skalierbarer und flexibler Lichtnetzwerke. Als international standardisiertes Protokoll ist DALI in der IEC 62386-Norm definiert und wird durch neue Spezifikationen der DALI Alliance (Digital Illumination Interface Alliance, DiiA) kontinuierlich weiterentwickelt.

Die Entwicklung eines neuen Geräts, das die Anforderungen des DALI-Standards erfüllt und eine DALI-2-Zertifizierung erlangt, kann jedoch zeitaufwändig und komplex sein. Hier setzt der MBS DALI-Stack an: Er vereinfacht den Entwicklungsprozess, verkürzt die Markteinführungszeit erheblich und sorgt dafür, dass alle Anforderungen des Standards erfüllt werden – der Weg zur Zertifizierung wird dadurch deutlich einfacher.

Unser DALI-Stack wurde speziell für den Einsatz in eingebetteten Systemen entwickelt und vollständig in ANSI-C implementiert. Er bietet Entwicklern höchste Zuverlässigkeit und maximale Flexibilität.

Warum sollten man sich für den MBS DALI-Stack entscheiden?

Zeit und Aufwand sparen: Vereinfachter Entwicklungsprozess und reduzierte Markteinführungszeit.

Sicherer Standardkonformität: Müheloses Erfüllen der Anforderungen des DALI-Standards und schnelleres Erreichen der Zertifizierung schneller.

2 Allgemein

Architektur
Dieses Kapitel beschreibt den allgemeinen Aufbau des DALI-Stacks und seine Beziehung zu den notwendigen Komponenten.

µController

Der Mikrocontroller ist die Hardwarebasis für eine DALI-Anwendung und stellt alle notwendigen Ressourcen für die Nutzung des DALI-Stacks bereit. Bei der Auswahl des Mikrocontrollers sollten die Anforderungen an den DALI-Stack berücksichtigt werden.

Persistent Memory

Der DALI-Standard erfordert die Speicherung bestimmter Variablen in einem nichtflüchtigen Speicher. Typischerweise wird dazu ein externer EEPROM verwendet, der z.B. über I²C mit dem Mikrocontroller verbunden ist. Es sind auch andere Implementierungen denkbar, wie z.B. die Emulation des EEPROM im Flash-Speicher des Mikrocontrollers oder die Verwendung anderer Speicherkomponenten. Es ist jedoch zu beachten, dass diese Daten recht häufig gespeichert werden, und der gewählte Speicher muss dies verarbeiten können.

 DALI-Interface Circuit

Die DALI-Schnittstellenschaltung stellt die Signalaufbereitung zwischen dem DALI-Bus und den GPIO-Pins des Mikrocontrollers dar. Sie muss so ausgelegt sein, dass sie die Anforderungen der IEC 62386-101 erfüllt.

I/O

Dieser Block stellt die GPIO-Pins des Mikrocontrollers dar, die mit der DALI-Schnittstellenschaltung verbunden sind. Es werden insgesamt zwei GPIO-Pins benötigt: einer ist als Ausgang und der zweite als Eingang konfiguriert. Bei der Verwendung des DALI-Low-Level-Treibers von MBS ist es wichtig, dass der Eingangspin auch Interrupts unterstützt. Dies können entweder Interrupts bei Pegelwechsel oder Interrupts für fallende und steigende Flanken sein.

Timer

Der DALI-Low-Level-Treiber benötigt einen Timer mit einer Auflösung von 1 µs (und einer Breite von 24 Bits) sowie den entsprechenden Timer-Elapsed-Interrupt. Der Timer dient als Zeitmesseinheit für den DALI-Low-Level-Treiber und wird verwendet, um die Bit-Timings von gesendeten und empfangenen Nachrichten zu erfassen. Der abgelaufene Interrupt ist typischerweise so konfiguriert, dass er alle 10 ms ausgelöst wird.

DALI_ll_hal / Microcontroller-spezifische HAL Funktionen

Da der DALI-Low-Level-Treiber plattformunabhängig ist, hat es sich als nützlich erwiesen, den Zugriff auf die Mikrocontroller-Hardware über eine sogenannte DALI-Low-Level-Hardware-Abstraktionsschicht (dali_ll_hal) einzurichten. Das beinhaltet den Zugriff auf den Ausgangspin über den Funktionszeiger xxx, den Aufruf einer spezifischen Funktion bei einer Pegeländerung des Eingangspins, den Zugriff auf den Timer-Zählerwert und das Setzen des Timers. Um dies effektiv zu tun, werden in der Regel mikrocontrollerspezifische HAL-Funktionen oder vom Hersteller bereitgestellte Bibliotheken verwendet.

DALI-LL

Der DALI-Low-Level-Treiber verarbeitet die Pegeländerungen am GPIO-Eingangspin und überprüft die Bit-Timings. Das Ergebnis ist ein DALI-Frame, der an das DALI-Framework der Benutzeranwendung weitergegeben wird.

 DALI-Framework

Das DALI-Framework fungiert als Schnittstelle zwischen der DALI-Bibliothek und dem DALI-Low-Level-Treiber. Die Aufgabe des DALI-Frameworks ist es, die vom DALI-Bus empfangenen DALI-Nachrichten/Befehle an die DALI-Bibliothek weiterzuleiten und die DALI-Nachrichten/Befehle von der DALI-Bibliothek an den Low-Level-Treiber zur Übertragung zu übergeben. Darüber hinaus bietet das Framework die Schnittstelle zwischen der Benutzerapplikation und der DALI-Bibliothek.

User Application

Die Benutzerapplikation umfasst alle zusätzlichen Funktionalitäten des Gerätes, die die Grundfunktionalität des DALI-Stacks erweitern, sowie DALI-unabhängige Funktionalitäten.

DALI-LIB

Die DALI-LIB bezieht sich auf die Implementierung einzelner Teile des DALI-Standards und vereinfacht die Einhaltung seiner Anforderungen durch die Verwendung des Stacks. Die folgende Abbildung zeigt einen Überblick über die implementierten Teile innerhalb der DALI-LIB.

Allgemeiner Überblick über die Schnittstelle

Informationsfluss

Die Abbildung zeigt den allgemeinen Informationsfluss zwischen den verschiedenen Modulen.

Das Konzept des DALI-Stacks erlaubt es dem Anwender, einen eigenen Low-Level-Treiber entsprechend seiner Hardware-Anforderungen zu entwickeln oder zu nutzen, sofern er über die entsprechende Schnittstelle verfügt. Für viele Mikrocontroller hat es sich bewährt, den von MBS entwickelten plattformunabhängigen DALI-Low-Level-Treiber zu verwenden. Das offene Konzept hat allerdings dazu geführt, dass zwischen dem Low-Level-Treiber und der DALI-LIB eine Zwischenschicht existiert, die die Übertragung von Nachrichten zwischen diesen Modulen ermöglicht, die sich DALI-Framework nennen und die vom Anwender implementiert werden muss.

Funktionstypen

Der DALI-Stack bietet verschiedene Arten von Interface-Funktionen, um die Kommunikation mit der Benutzeranwendung und dem DALI-Framework herzustellen.

Es gibt zwei Typen:

  • direkt aufrufbare Funktionen und

  • Callback-Funktionen.

Direkt aufrufbare Funktionen dienen dazu, eine Instanz der DALI-LIB zu erzeugen, sie zu initialisieren, zu bedienen und Informationen abzufragen.

Im Gegensatz dazu dienen die Callback-Funktionen dazu, die Anwenderapplikation über bestimmte Ereignisse oder Anforderungen für weitere Aktionen zu informieren.

Direkt aufrufbare Funktionen

Function nameDescription
dalilib_createinstanceCreates a new DALI-LIB instance and provides the corresponding reference, which is used for further actions.
dalilib_initThe DALI-LIB instance is configured by calling this function. The information about what type of device it is, such as a control gear, control device, or input device, as well as the associated parameters, are passed as function parameter.
dalilib_startStarts the DALI-LIB instance by changing the respective state-variables.
dalilib_stopStops the DALI-LIB instance by changing the respective state-variables and deletes all assosiate instance variables.
dalilib_infoGetReturns the Vendor ID.
dalilib_versionGetReturns the version number of the DALI stack.
dalilib_receiveThe call to this function is located in the DALI framework. If a DALI message or a status message is passed from the low-level driver to the DALI framework, it is forwarded to the DALI-LIB using this function.
dalilib_timingHelperThis function is necessary for processing the messages passed from the low-level driver, as well as for the overall functionality of the DALI-LIB. It must be called in a 10ms cycle (see Requirements).
dalilib_create_other_membankIn order to create a new memory bank, the DALI-LIB requires memory to be provided by the user application / DALI framework. This function serves as a direct interface for this purpose.
dalilib_actionThe DALI-LIB provides a variety of additional functions available through a mechanism called ACTION. The usage of ACTIONS is covered in the respective chapter.

Callback Funktionen

Callback function nameDescription
fAppReadySignal to User Application that DALI stack instance is ready to operate.
fAppSendThis function is called when a message needs to be sent by the DALI-LIB. In the DALI framework, the callback is usually invoked and then the corresponding DALI low-level driver routine (dalill_pushSendQueue) is used to pass the message to the low-level driver.
fAppReActionThis callback is always invoked when the DALI-LIB needs information from the user application or a response to an event that cannot be handled by the DALI stack itself, such as controlling the PWM for the light output of an LED
fAppLoadMemThis callback is typically invoked at power-up of the device or when specifically requested to load the persistent variables from NVM.
fAppSaveMemThis callback is always invoked, when at least one persistent variable has been changed and the specified time has passed. User Appliction is responsible to save the data in a non volatile memory.
fAppLogIn case an error occurs during processing within the DALI-LIB, the corresponding error message and description are communicated to the user application through this callback.

Die Zuweisung der Callbacks erfolgt in der Instanz Konfiguration.

3 Anforderungen

Hardware Anforderungen

Allgemein

  • Signal-Konditionierung / DALI-Interface-Schaltung

  • Nichtflüchtiger Speicher z.B. EEPROM mit mindestens 526 Bytes

Microcontroller

  • Taktfrequenz mindestens 32Mhz

  • 32Bit-CPU-Architektur (empfohlen)

  • zwei GPIO Pins:

    • 1x Eingang (DALI_RX) - muss in der Lage sein, eine Unterbrechung entweder bei Pegelwechsel oder bei Erkennung einer fallenden und steigenden Flanke zu erzeugen

    • 1x Eingang (DALI_TX).

  • ein Timer mit einer Auflösung von 1µs (Breite von mindestens 24 Bit) und der entsprechende Timer-Interrupt

  • Die Interrupts (DALI_RX) des Low-Level-Treibers müssen die gleiche und die höchste Priorität im System haben.

  • Speicher (R.A.M and FLASH) Anforderungen siehe unten:

CapabilityCPU 32 BitCPU 16 Bit
FlashRAMFlashRAM
All features active including D4i extensions88 kB11 kB34 kB9 kB
All features active without D4i extensions (Delivery status)81 kB81 kB30,2 kB8 kB
Device turned off (No more application controller possible only gears)62 kB81 kB22 kB7,2 kB
Device turned off, no colour support (DT8)55 kB81 kB9 kB7 kB

Software Anforderungen

  • System-Stack-Größe zwischen 1 und 1,5 kByte.

  • Der DALI-Stack (dali-lib) benötigt einen Low-Level-Treiber, um die DALI-Frames zu senden und zu empfangen.

  • MBS stellt dazu einen freien, plattformunabhängigen Low-Level-Treiber zur Verfügung.

  • Bei Verwendung des MBS DALI Low-Level-Treibers muss die Funktion dalill_processQueues mindestens alle 5ms von der Anwenderapplikation aufgerufen werden und darf nicht blockiert werden (z.B. durch Speicherung von persistenten Daten).

  • Der DALI-Stack stellt die Funktion dalilib_timingHelper zur Verfügung, die alle 10ms aufgerufen werden sollte, um die Funktionalität zu gewährleisten.

  • Bei Verwendung des MBS DALI Low-Level-Treibers gibt es eine Funktionalität, die diese Aufgabe unterstützt.

4 Lizenzierung und Lieferung

Lizenzierung

ModelDescription
Library Leasing p.a.The program library is provided for use for a limited time.
Library BuyoutThe program library is provided for permanent use.
Source BuyoutThe source code is provided for permanent use.

Lieferung
DALI stack

ModelDescription
Static library
(1
The customer receives the header file “libdali.h” as well as the pre-compiled object files of the DALI stack in the library file “xxx_dali_lib.a”.
Source files
(2 (3
The customer receives the complete source code of the DALI stack.
1) Driver is delivered as header file “dali_ll.h” and library file “xxx__dali_lowlevel.a” 2) Driver is delivered as source code 3) source code can be altered by the customer

Beispielprojekte
Jede Lieferung enthält einfache Beispielprojekte, die die Anwendung des DALI-Stacks veranschaulichen und z.B. die Implementierung eines DT6-LED-Betriebsgeräts demonstrieren. Es handelt sich um vorgefertigte Beispiele. Die Beispielprojekte sind nicht für jeden Mikrocontroller-Typ geeignet.

5 Weiterführende Informationen für Anwendungsentwickler

Detaillierte Informationen über Stack Instance und API werden in der MBS Confluence Developer Area dokumentiert. Der Zugang wird in Kürze hier verfügbar sein.