Short Protokoll Befehle

1. Befehle / Daten zum Display senden

Dieser Protokoll-Befehl überträgt Daten zum Display. Es können mehrere Grafikbefehle in ein Protokollpaket verpackt werden. Sind die Daten größer als die maximale Paketgröße können die Daten auf mehrere Pakete aufgeteilt werden. Das Modul fügt die einzelnen Datenpakete wieder zusammen.

Das Modul arbeitet mit little-endian (Intel-Format), das niederwertige Byte wird zuerst übertragen.


Modul empfängt

DC3

0x13

Länge (16 Bit)

0xXX 0xXX

Data.......

0x....

crc (16 Bit)

0xXX 0xXX

Modul sendet

ACK

0x06




Beispiel: #XCB20 ändert z.B. die Helligkeit auf 20%. Dazu gehört am Ende ein [LF] bzw. 0x0A als Abschlusskennung

Das Paket beginnt also mit DC3 und einer Längenangabe der Nutzdaten. Am Ende steht eine Prüfsumme (CRC16/CCITT) über das komplette Paket. Hier finden Sie einen Online-CRC-Calculator.

In Hex: 13 07 00 23 58 43 42 32 30 0A 3D CD (hier als Datei zum Download; diese kann z.B. per Drag-and-Drop einfach auf terminal.exe geschoben werden)


Beispiel: #XCB80 ändert z.B. die Helligkeit auf 80%.

In Hex: 13 07 00 23 58 43 42 38 30 0A FC 0A (hier als Datei zum Download)

2. Inhalt des Sendepuffers anfordern

Fallen Daten im Modul an, werden diese im Sendepuffer des Moduls gespeichert. Über die seriellen Schnittstellen können die Daten angefordert werden. Ob Daten verfügbar sind kann über den Pin 20 SBUF herausgefunden werden, oder aber die übergeordnete Steuerung fragt zyklisch die Daten ab (polling).


Modul empfängt

DC4

0x14

Länge (16 Bit)

0x01 0x00

'S'

0x53

crc (16 Bit)

0x30 0x08

Modul sendet

ACK

0x06





Modul sendet

DC3

0x13

Länge (16 Bit)

0xXX 0xXX

Data.......

0x....

crc (16 Bit)

0xXX 0xXX

3. Letztes Datenpaket wiederholen

Ist ein Empfangenes Packet des Moduls fehlerhaft (falsche Länge oder Prüfsumme) kann es erneut angefordert werden:


Modul empfängt

DC4

0x14

Länge (16 Bit)

0x01 0x00

'R'

0x52

crc (16 Bit)

0x11 0x18

Modul sendet

ACK

0x06




Modul sendet

DC3

0x13

Länge (16 Bit)

0xXX 0xXX

Data.......

0x....

crc (16 Bit)

0xXX 0xXX

4. Pufferinformationen anfordern

Mit diesem Befehl wird nachgefragt, ob Nutzdaten zur Abholung bereit stehen (= Pin20 SBUF) und wie voll der Empfangspuffer des Displays bereits ist.


Modul empfängt

DC4

0x14

Länge (16 Bit)

0x01 0x00

'I'

0x49

crc (16 Bit)

0x4B 0xBB

Modul sendet

ACK

0x06




Modul sendet


DC4

0x14

Länge (16 Bit)

0x04 0x00

Sendepuffer Bytes ready (16 Bit)

0xXX 0xXX

Empfangspuffer Bytes free (16 Bit)

0xXX 0xXX

crc (16 Bit)

0xXX 0xXX

5. Protokolleinstellungen

Hierüber lässt sich die maximale Paketgröße welche das Display senden darf begrenzen. Voreingestellt ist eine Paketgröße mit bis zu 2042 Byte Nutzdaten. Weiterhin lässt sich der Time-out in 1/1000s einstellen. Der Time-out spricht an, wenn einzelne Bytes verloren gegangen sind. Danach muss das gesamte Paket nochmals übertragen werden.


Modul empfängt

Defaultwerte

DC4

0x14

Länge (16 Bit)

0x05 0x00

'D'

0x44

Paketgröße Sendepuffer (16 Bit)

0xFA 0x07 (=2042 Byte)

Time-out (16 Bit) in ms

0xD0 0x07 (=2 Sekunden)

crc (16 Bit)

0x98 0xF5

Modul sendet

ACK

0x06




6. Protokollinformationen

Abfrage der Protokolleinstellungen (siehe 5.).


Modul empfängt

DC4

0x14

Länge (16 Bit)

0x01 0x00

'P'

0x50

crc (16 Bit)

0x53 0x38

Modul sendet

ACK

0x06




Modul sendet


DC4

0x14

Länge (16 Bit)

0x06 0x00

Maximale Paketgröße Sendepuffer (16 Bit)

0xFA 0x07 (=2042 Byte)

Paketgröße Sendepuffer (16 Bit)

0xXX 0xXX

Time-out (16 Bit) in ms

0xXX 0xXX

crc (16 Bit)

0xXX 0xXX

7. RS485 Adresse selektieren / deselektieren

Mit diesem Befehl lässt sich ein Modul am RS485-Bus selektieren oder deselektieren. Per Default ist ein Modul mit der Adresse 7 immer aktiv.


Modul empfängt


Defaultwerte

DC4


0x14

Länge (16 Bit)


0x03 0x00

'A'


0x41

'S' (=Selektieren)

'D' (=Deselektieren)

0x53 oder 0x44

RS485-Adresse


0xXX

crc (16 Bit)


0xXX 0xXX

Modul sendet


ACK

0x06

----

Selektieren


Deselektieren



8. RS485 Verzögerung Enable Signal

Einige RS485 benötigen eine gewisse Zeit um das Enable-Signal zu verändern und z.B. vom schreibenden in den lesenden Modus umzuschalten. Um eine erfolgreiche Kommunikation mit diesen Geräten zu ermöglichen kann mit diesem Befehl die Umschaltung in den schreibenden Modus verzögert werden.


Modul empfängt

Defaultwerte

DC4

0x14

Länge (16 Bit)

0x03 0x00

'T'

0x54

Verzögerung in 10 us

0x00 0x00

crc (16 Bit)

0xE9 0x7E

Modul sendet


ACK

0x06



9. Schnittstelle exklusiv anfordern

Alle 4 seriellen Schnittstellen werden parallel und gleichwertig behandelt. Um zu gewährleisten, dass eine Abfolge von Protokollpaketen ohne Unterbrechung durchgeführt wird, können die anderen seriellen Schnittstellen deaktiviert werden und die Schnittelle exklusiv angefordert werden. Dies ist zum Beispiel bei einem Projektupdate über USB sinnvoll.


Modul empfängt

DC4

0x14

Länge (16 Bit)

0x02 0x00

'G'

0x47

0x00 = Freigabe

0x01 = Anfordern

crc (16 Bit)

0xXX 0xXX

Modul sendet

ACK

0x06




Modul sendet


DC4

0x14

Länge (16 Bit)

0x01 0x00

Aktiv (16 Bit)

0x00 = alle

0x01 = RS232

0x02 = SPI

0x03 = I²C

0x04 = USB

crc (16 Bit)

0xXX 0xXX

10. Break-Kommando, Ausführung Unterbrechen / Beenden

Falls in einem Makro eine Dauerschleife programmiert wurde oder eine Unterbechung des normalen Ablaufs gewünscht wird, kann mit diesem Befehl gezielt unterbrochen und beendet werden. Auch dieser Befehl eignet sich vor allem für Update-Vorgänge.


Modul empfängt

Defaultwerte

DC4

0x14

Länge (16 Bit)

0x02 0x00

'C'

0x43

break

0x01 = Wait command

0x02 = aktuelles Makrofile

0x04 = Sendepuffer löschen

0x08 = Empfangsbuffer leeren

0x10 = Makrodefiniton (z.B. Portmakros)

0xFF = Alles Unterbrechen und Beenden

crc (16 Bit)

0xXX 0xXX

Modul sendet

ACK

0x06




11. Hardware Reset

Das Modul wird mit diesem Protokollbefehl neu gestartet. Je nach Parameter wird nach dem Reset eine andere Startoption gewählt.


Modul empfängt

Defaultwerte

DC4

0x14

Länge (16 Bit)

0x02 0x00

'B'

0x42

Option

0x00 = Normaler Neustart

0x01 = Neustart im Testmode

0x02 = Neustart ohne 'start.emc'

0x03 = Neustart ohne default Styles

0x04 = Bootmenü anzeigen (Projektauswahl)

0x05 = Reserved

0x06 = Mass Storage Mode (ab V1.2)

crc (16 Bit)

0xXX 0xXX

Modul sendet

ACK

0x06




CRC-Berechnung

Für die Berechnung der Prüfsumme wird eine zyklische Redundanzprüfung (CRC) eingesetzt. Eine gängige und bekannte CRC-Prüfung ist die CRC-CCITT. Als Startwert wird 0xFFFF verwendet. Im Folgenden sehen Sie eine typische C-Implementierung. Die Funktionen müssen extern aufgerufen werden. Die Prüfsumme muss mit dem Startwert vorbelegt werden.


//----------------------------------------------------------------------------

//Funktion: buffer2crc16()

//input:    ptr Datum, ptr auf CRC, Blocklänge

//output:   ---

//Beschr:   CRC-CCITT eines Speicherbereichs

//----------------------------------------------------------------------------

void buffer2crc16(UBYTE *dat, UINT16 *pCRC, UINT32 anz)

{

 while(anz--)

   crc16(*dat++, pCRC);

}


//----------------------------------------------------------------------------

//Funktion: sp_crc16()

//input:    Datum, ptr auf CRC

//output:   ---

//Beschr:   CRC_CCITT (x^16+x^12+x^5+1 = 1 0001 0000 0010 0001 = 0x1021

//----------------------------------------------------------------------------

void crc16 (UBYTE dat, volatile UINT16 * crc)

{

 register UINT16 lcrc = *crc;

 lcrc = (lcrc >> 8) | (lcrc << 8);

 lcrc ^= dat;

 lcrc ^= (lcrc & 0xFF) >> 4;

 lcrc ^= lcrc << 12;

 lcrc ^= (lcrc & 0xFF) << 5;

 *crc = lcrc;

}