Futaba S-Bus Protokoll

Anfangs 2010 hat Futaba ein neues Bussystem für den Anschluss von Servos an den Empfänger vorgestellt. Über einen einzigen Empfängerausgang werden alle daran angeschlossenen S-Bus fähigen Servos mit Daten gesteuert. Welches Servo zu welchem Kanal gehört wird am Servo über den Programmer SBC-1 oder CIU-2 eingestellt.

Protokollstruktur

Das Protokoll ist 25 Byte lang und wird alle 14ms (analog) oder 7ms (highspeed) gesendet.

Ein Byte = 1 Startbit + 8 Databit + 1 Paritybit + 2 Stopbit (8E2), Baudrate = 100’000 bit/s

Es wird zuerst das höchste Bit gesendet. Die Logik ist intertiert (Pegel High = 1)

Nachtrag – 20.03.2012: Die Datenrate kann auch 9600 bit/s betragen. Dazu sind andere Timings anzupassen. Begründung: das USB-Interface CIU-2 arbeitet mit 9600 bits/s. Damit sind einfachere Controller auch in der Lage S-Bus Daten zu senden, wenn auch einiges gemächlicher.

futaba_s-bus_7ms.gif futaba_s-bus_ch1-6_starts_at_same_time.gif futaba_s-bus_dataframe.gif

[Startbyte] [Data1] [Data2] .... [Data22][Flags][Endbyte] 



Startbyte    = 11110000b (0xF0) 

Data 1-22    = [ch1, 11bit][ch2, 11bit] .... [ch16, 11bit] (ch# = 0 bis 2047) 

               Kanal 1 benutzt 8 Bits von Data1 und 3 Bits von Data2 

               Kanal 2 benutzt restliche 5 Bits von Data2 und 6 Bits von Data3 usw.



Flags        = Bit7 = ch17 = Schaltkanal (0x80) 

               Bit6 = ch18 = Schaltkanal (0x40) 

               Bit5 = Frame lost, entspricht roter LED am Empfänger (0x20) 

               Bit4 = Failsafe aktiviert (0x10) 

               Bit3 = unbekannt 

               Bit2 = unbekannt 

               Bit1 = unbekannt 

               Bit0 = unbekannt 



Endbyte      = 00000000b

Servos programmieren

Vor dem Einbau muss jedem Servo eine ID zugewiesen werden. Das kann man mit dem kleinen SBC-1 machen, oder komfortabler, weil mehr Parameter verfügbar, mit dem USB-Adapter CIU-2.

Gemessen habe ich es mit dem SBC-1, in einem Empfängergehäuse integriertes Modul, sendet periodisch Frames mit 17 Bytes aus. Das Servo antwortet unmittelbar darauf mit einem gleich langen Frame.


Das SBC-1 sendet für eine Überprüfung des Servos folgende Daten:

F9 07 03 79 F9 00 00 00 00 00 00 00 00 01 00 07 7C



Das Servo antwortet mit:

A0 07 03 79 F9 0C 0C 0F 15 64 64 00 00 00 01 08 77



Bei beiden Frames repräsentiert Byte 2 die ID des Servos, das letzte Byte ist eine Checksumme.



Soll das Servo eine neue ID bekommen sendet das SBC-1 folgendes Frame:

F9 00 03 79 F9 00 00 00 00 00 00 00 00 01 00 4D 3D



Wieder steht Byte 2 für die (diesmal neue) ID, das zweitletzte Byte hat den Wert 4D. Das Servo sendet dabei keine Daten zurück.