Futaba S-BUS协议解析

原创 2016年12月22日 00:11:41

一、协议说明

  1. S-BUS协议实际上通过串口进行数据发送。但是需要注意的是,S-BUS的逻辑电平是反的,需用如下电路对电平反相,再接到串口接收的管脚。
    SUBS反相器

  2. 串口配置为波特率100kbps( 100000 ),8位数据,偶校验(even),2位停止位,无流控。

  3. 每帧25个字节,帧格式如下【参考https://mbed.org/users/Digixx/notebook/futaba-s-bus-controlled-by-mbed/】:
    [Start Byte] [Data0] [Data1] …. [Data21] [Flags][End Byte]
    两帧之间的时间间隔4ms(高速模式),约7ms一帧。
    其中:
    Start Byte = 0x0F。中间22个字节为16个通道的数据,每个通道用 11 bit表示,范围是0-2047。
    End Byte根据S-BUS协议版本不同而不同。
    Flags的定义:
    bit7 = ch17 = digital channel (0x80)
    bit6 = ch18 = digital channel (0x40)
    bit5 = Frame lost, equivalent red LED on receiver (0x20)
    bit4 = failsafe activated (0x10)
    bit3 = n/a
    bit2 = n/a
    bit1 = n/a
    bit0 = n/a
    数据部分:
    如果把22个字节看作一个数的话,则数据部分采用小端模式。即若把数据按照[Data21][Data20]…[Data1][Data0]的顺序排列,则[Data21]的 bit 7 为MSB,[Data0]的 bit 0 为LSB,每 11 bit 为一个通道的数据。Data[21]和[Data20]的高3位为通道16的值,以此类推。
    借用一张图,改了改:
    各通道数据的排列方式
    下面是一组数据的例子(来自 R7008SB):
    0F 01 04 20 A8 01 08 16 50 83 1A 80 00 04 20 00 01 08 07 38 00 10 80 00 04
    0F 01 04 20 A8 01 08 16 50 83 1A 80 00 04 20 00 01 08 07 38 00 10 80 00 14
    0F 01 04 20 A8 01 08 16 50 83 1A 80 00 04 20 00 01 08 07 38 00 10 80 00 24
    0F 01 04 20 A8 01 08 16 50 83 1A 80 00 04 20 00 01 08 07 38 00 10 80 00 34
    0F 01 04 20 A8 01 08 16 50 83 1A 80 00 04 20 00 01 08 07 38 00 10 80 00 04
    0F 01 04 20 A8 01 08 16 50 83 1A 80 00 04 20 00 01 08 07 38 00 10 80 00 14
    0F 01 04 20 A8 01 08 16 50 83 1A 80 00 04 20 00 01 08 07 38 00 10 80 00 24
    0F 01 04 20 A8 01 08 16 50 83 1A 80 00 04 20 00 01 08 07 38 00 10 80 00 34

二、S-BUS解析程序

void Process(uint8_t* raw,uint16_t* result)
{
  uint8_t bitsToRead=3; // bitsToRead表示需要从下一个字节中读取多少bit。规律:bitsToRead 每次总是增加 3
  uint8_t bitsToShift;
  uint8_t startByte=21;
  uint8_t channelId=15;

  do
  {
    result[channelId]=raw[startByte];

    if(bitsToRead<=8)
    {
      result[channelId]<<=bitsToRead;
      bitsToShift=8-bitsToRead;
      result[channelId]+=(raw[startByte-1]>>bitsToShift);
    }
    else
    {
      result[channelId]<<=8;
      result[channelId]+=raw[startByte-1];
      startByte--;
      bitsToRead-=8;
      bitsToShift=8-bitsToRead;
      result[channelId]+=(raw[startByte-1]>>bitsToShift);
    }

    result[channelId]&=0x7FF;

    channelId--;
    startByte--;
    bitsToRead+=3;

  }while(startByte>0);  
}

感谢来自
taogashi【http://www.eefocus.com/taogashi/blog/14-05/303577_f140d.html
以及
Uwe Gartmann【https://developer.mbed.org/users/Digixx/notebook/futaba-s-bus-controlled-by-mbed/
的有关S-BUS协议的介绍。

SBUS协议:SBUS解析与合成

在说协议之前,我想强调一点:信号要取反,硬件取反!!!!!至于为什么强调,我会在后面解释,你们先记住。 SBUS协议:使用的是串口的通讯,直接可以用串口发出,但有几点仍需要注意: 1.串口配置:10...
  • peach_orange
  • peach_orange
  • 2016年10月28日 17:46
  • 1669

Futaba SBUS协议解析

Futaba SBUS协议解析 S-bus为futaba使用的串行通信协议。实际上为串口通信。但是有几点需要注意: 在大端小端上,网上资料都说的不是很清楚;跟TTL串口信号相比,S...
  • mytt2013
  • mytt2013
  • 2016年10月08日 15:27
  • 2890

飞控信号SBUS信号解析为PWM信号输出

飞控信号SBUS信号解析为PWM信号输出  1.修改STM32时钟频率:  static void SetSysClockTo72(void)  {  __IO uint32_t StartU...
  • hexiechina2010
  • hexiechina2010
  • 2016年06月16日 17:00
  • 3565

sbus18通道

遥控器接收模块R7008SB就只用了一根先来做通讯,它其实是100k的串口信号。 25个字节表示18路信号,0x0f--16*11(22字节)----flag(包含17-18二进制信号)-----e...
  • hxchuan000
  • hxchuan000
  • 2017年01月12日 17:46
  • 669

sbus协议解析代码

  • 2016年07月04日 16:35
  • 6KB
  • 下载

Futaba S-BUS controlled by mbed(使用mbed控制Futaba S-BUS)

IntroductionThe Futaba S-BUS protocol is a serial protocol to control servos. Up to 16 proportional ...
  • hxiaohai
  • hxiaohai
  • 2016年12月08日 15:57
  • 2975

STM32 解析futaba S-bus协议

转自:http://www.eefocus.com/taogashi/blog/14-05/303577_f140d.html S-bus为futaba使用的串行通信协议。实际上为串口通信。但是有几...
  • haozi0_0
  • haozi0_0
  • 2015年12月21日 11:49
  • 2586

SBUS的解析与合成

  • 2016年10月28日 17:41
  • 2KB
  • 下载

解析 STM32 的启动过程(写的不错)

解析STM32的启动过程 当前的嵌入式应用程序开发过程里,并且C语言成为了绝大部分场合的最佳选择。如此一来main函数似乎成为了理所当然的起点——因为C程序往往从main函数开始执行。但一个经常会被...
  • slj_win
  • slj_win
  • 2013年11月23日 20:47
  • 3659

(测试通过)飞控通过SBUS接收FUTABA遥控信号

最近做了一个开发板接收sbus传出的遥控信号测试,将流程记录在下:1)硬件取反,淘宝上买电平取反器,大概3块多一个;2)配置串口、管脚、中断、DMA,中断可配置传输完成中断和串口空闲中断,目前使用串口...
  • linkcian
  • linkcian
  • 2018年01月11日 14:53
  • 239
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Futaba S-BUS协议解析
举报原因:
原因补充:

(最多只允许输入30个字)