taskit Port-8 – Protokollbeschreibung¶
Port-8 ist das Befehls- und Datenkodierungsformat der taskit gpio.net Module. Es überträgt Kommandos und Datenwörter in drei Frame-Größen (4 / 8 / 16 Bit) über einen 8-Bit-orientierten seriellen Bus (TSB) oder UART.
1. Einführung¶
Port-8 ist ein selbstsynchronisierendes, längenkodiertes Protokoll, eng an das UTF-8-Prinzip angelehnt: jedes Frame beginnt mit einem Lead-Byte, dessen führende Bits die Gesamtlänge angeben, gefolgt von Continuation-Bytes mit dem Präfix 10.
Anwendung: GPIO-Steuerung (PADs setzen/lesen/togglen) und Konfiguration (Direction, PullUp/PullDown, Notification).
2. Frame-Formate¶
Port-8 kennt drei Frame-Größen, identifiziert über das Bitmuster des ersten Bytes (Lead-Byte). Continuation-Bytes beginnen analog zu UTF-8 immer mit 10.
2.1 Übersichtstabelle¶
| Bytes | Lead-Byte-Muster | Command-Bits | Daten-Bits | Frame-Typ |
|---|---|---|---|---|
| 1 | 0CCCDDDD |
3 (C2–C0) | 4 | 4 Bit |
| 2 | 110CCCDD 10DDDDDD |
3 (C2–C0) | 8 | 8 Bit |
| 4 | 1110CCCC 10CCDDDD 10DDDDDD 10DDDDDD |
6 (C5–C0) | 16 | 16 Bit |
2.2 Legende¶
| Symbol | Bedeutung |
|---|---|
D |
Databit (Nutzdaten) |
C |
Command-Bit (Befehlscode) |
0/1 |
Festes Bitmuster zur Frame-Identifikation |
2.3 Bit-Layouts¶
Jede Zelle entspricht einem Bit des Bytes. Die Beschriftung unter jedem Byte gibt die Byte-Bit-Position an (7 = MSB, 0 = LSB).
2.3.1 · 4 Bit — 1 Byte — 0CCCDDDD¶
Byte 0:
┌───┬───┬───┬───┬───┬───┬───┬───┐
│ 0│ C2│ C1│ C0│ D3│ D2│ D1│ D0│
└───┴───┴───┴───┴───┴───┴───┴───┘
7 6 5 4 3 2 1 0
3 Command-Bits (C2–C0) → Codes 0–7. 4 Daten-Bits.
2.3.2 · 8 Bit — 2 Bytes — 110CCCDD 10DDDDDD¶
Byte 0:
┌───┬───┬───┬───┬───┬───┬───┬───┐
│ 1│ 1│ 0│ C2│ C1│ C0│ D7│ D6│
└───┴───┴───┴───┴───┴───┴───┴───┘
7 6 5 4 3 2 1 0
Byte 1:
┌───┬───┬───┬───┬───┬───┬───┬───┐
│ 1│ 0│ D5│ D4│ D3│ D2│ D1│ D0│
└───┴───┴───┴───┴───┴───┴───┴───┘
7 6 5 4 3 2 1 0
3 Command-Bits (C2–C0) → Codes 0–7. 8 Daten-Bits.
2.3.3 · 16 Bit — 4 Bytes — 1110CCCC 10CCDDDD 10DDDDDD 10DDDDDD¶
Byte 0:
┌───┬───┬───┬───┬───┬───┬───┬───┐
│ 1│ 1│ 1│ 0│ C5│ C4│ C3│ C2│
└───┴───┴───┴───┴───┴───┴───┴───┘
7 6 5 4 3 2 1 0
Byte 1:
┌───┬───┬───┬───┬───┬───┬───┬───┐
│ 1│ 0│ C1│ C0│D15│D14│D13│D12│
└───┴───┴───┴───┴───┴───┴───┴───┘
7 6 5 4 3 2 1 0
Byte 2:
┌───┬───┬───┬───┬───┬───┬───┬───┐
│ 1│ 0│D11│D10│ D9│ D8│ D7│ D6│
└───┴───┴───┴───┴───┴───┴───┴───┘
7 6 5 4 3 2 1 0
Byte 3:
┌───┬───┬───┬───┬───┬───┬───┬───┐
│ 1│ 0│ D5│ D4│ D3│ D2│ D1│ D0│
└───┴───┴───┴───┴───┴───┴───┴───┘
7 6 5 4 3 2 1 0
6 Command-Bits (C5–C0) → Codes 0–63. 16 Daten-Bits – kein Padding nötig, die Bits gehen exakt auf (4+2 Command-Bits, 4+6+6 Daten-Bits).
4 der 6 Command-Bits (
C5–C2) passen in Byte 0 (nach dem festen1110-Präfix bleiben 4 Bit frei); die restlichen 2 Bits (C1 C0) stehen am Anfang von Byte 1, direkt vor den Daten. Dadurch stehen im 16-Bit-Frame achtmal so viele Befehlscodes zur Verfügung wie im 4-/8-Bit-Frame (0–63 statt 0–7).
3. Befehle¶
| Code | Name | Daten | Nutzbar in |
|---|---|---|---|
| 0 | Read/Write Value | PAD Data | 4 / 8 / 16 Bit |
| 1 | Read-Command | Read-Frequencies | 4 / 8 / 16 Bit |
| 2 | Set Output | PAD Mask | 4 / 8 / 16 Bit |
| 3 | Clear Output | PAD Mask | 4 / 8 / 16 Bit |
| 4 | Toggle Output | PAD Mask | 4 / 8 / 16 Bit |
| 5 | Notification | PAD-Nr + Pegel | 4 / 8 / 16 Bit |
| 6 | I2C Read/Write | 8-Bit-Mode | 4 / 8 / 16 Bit |
| 7 | Return Code | Error / Code | 4 / 8 / 16 Bit |
| 8 | Set Direction | PAD Mask | nur 16 Bit |
| 9 | Clear Direction | PAD Mask | nur 16 Bit |
| 10 | Set PullEnable | PAD Mask | nur 16 Bit |
| 11 | Clear PullEnable | PAD Mask | nur 16 Bit |
| 12 | Set Notification | PAD Mask | nur 16 Bit |
| 13 | Clear Notification | PAD Mask | nur 16 Bit |
| 14 | Pull Direction | 0/1 pro PAD | nur 16 Bit |
| 15 | Delay | Delay in ms | nur 16 Bit |
| 16 | Set LED | LED Mask | nur 16 Bit |
| 17 | Clear LED | LED Mask | nur 16 Bit |
| 18 | Toggle LED | LED Mask | nur 16 Bit |
| 19 | — reserviert — | – | nur 16 Bit |
| 20 | — reserviert — | – | nur 16 Bit |
| 21 | — reserviert — | – | nur 16 Bit |
| 22 | — reserviert — | – | nur 16 Bit |
| 23 | — reserviert — | – | nur 16 Bit |
| 24 | — reserviert — | – | nur 16 Bit |
| 25 | Config UART | siehe UART Mode | nur 16 Bit |
| 26 | Config SPI | Konfigurationswort | nur 16 Bit |
| 27 | Config I2C | Konfigurationswort | nur 16 Bit |
| 28 | Config Port | Konfigurationswort | nur 16 Bit |
| 29 | Config ADC | Konfigurationswort | nur 16 Bit |
| 30 | Config DAC | Konfigurationswort | nur 16 Bit |
| 31 | — reserviert — | – | nur 16 Bit |
| 32 | — reserviert — | – | nur 16 Bit |
| 33 | — reserviert — | – | nur 16 Bit |
| 34 | — reserviert — | – | nur 16 Bit |
| 35 | — reserviert — | – | nur 16 Bit |
| 36 | — reserviert — | – | nur 16 Bit |
| 37 | — reserviert — | – | nur 16 Bit |
| 38 | — reserviert — | – | nur 16 Bit |
| 39 | — reserviert — | – | nur 16 Bit |
| 40 | — reserviert — | – | nur 16 Bit |
| 41 | — reserviert — | – | nur 16 Bit |
| 42 | — reserviert — | – | nur 16 Bit |
| 43 | — reserviert — | – | nur 16 Bit |
| 44 | — reserviert — | – | nur 16 Bit |
| 45 | — reserviert — | – | nur 16 Bit |
| 46 | — reserviert — | – | nur 16 Bit |
| 47 | — reserviert — | – | nur 16 Bit |
| 48 | — reserviert — | – | nur 16 Bit |
| 49 | — reserviert — | – | nur 16 Bit |
| 50 | — reserviert — | – | nur 16 Bit |
| 51 | — reserviert — | – | nur 16 Bit |
| 52 | — reserviert — | – | nur 16 Bit |
| 53 | — reserviert — | – | nur 16 Bit |
| 54 | — reserviert — | – | nur 16 Bit |
| 55 | — reserviert — | – | nur 16 Bit |
| 56 | — reserviert — | – | nur 16 Bit |
| 57 | — reserviert — | – | nur 16 Bit |
| 58 | — reserviert — | – | nur 16 Bit |
| 59 | — reserviert — | – | nur 16 Bit |
| 60 | — reserviert — | – | nur 16 Bit |
| 61 | — reserviert — | – | nur 16 Bit |
| 62 | — reserviert — | – | nur 16 Bit |
| 63 | — reserviert — | – | nur 16 Bit |
- PAD Mask: Bitfeld, jedes gesetzte Bit adressiert ein PAD (Breite = Datenbreite des Frames: 4 / 8 / 16 Bit).
- Codes 0–7 passen in 3 Bit und sind daher in allen drei Frame-Größen nutzbar.
- Codes 8–63 benötigen mehr als 3 Command-Bits und sind daher ausschließlich im 16-Bit-Frame verfügbar (6 Command-Bits, Codes 0–63). Codes 16–63 sind aktuell reserviert/unbelegt.
- Pull-Konfiguration: Erfordert zwei Befehle – erst
Set PullEnable(10), dannPull Direction(14) zur Auswahl von PullUp/PullDown.
4. Querverweise¶
- UTF-8 Kodierung – Grundlagen der UTF-8-Kodierung