文档章节

FrSky D16 protocol (X series TX/RX compatible)

涂Sir
 涂Sir
发布于 2016/01/27 10:08
字数 1687
阅读 58
收藏 0

I didn't find any information about FrSky D16 protocol. Inspired by two essential reverse engineering effortshttp://openrcforums.com/forum/viewtopic.php?f=52&t=667 and http://www.rcgroups.com/forums/showthread.php?t=1667453 I would like to shed some light on D16 protocol.

Edit: basic protocol description follows in this post, for detailed information you need to read this thread. Thanks to Midelic!

CC2500 initialization

Code:

[00] (0x30) RESET
[01] (0x02 0x06) GDO0_INV = 0 / GDO0_CFG = 6
[03] (0x00 0x06) GDO2_INV = 0 / GDO2_CFG = 6
[05] (0x17 0x0C) CCA_MODE = 0 (Always) / RXOFF_MODE = 3 / TXOFF_MODE = 0
[07] (0x18 0x18) FS_AUTOCAL = 0x01 / PO_TIMEOUT = 2 (Expire count 64 Approx. 149 – 155 µs)
[09] (0x06 0x1E) PKTLEN=0x1E
[11] (0x07 0x04) PQT = 0  / CRC_AUTOFLUSH = 0 / APPEND_STATUS = 1 / ADR_CHK = 0 (No address check)
[13] (0x08 0x01) WHITE_DATA = 0 / PKT_FORMAT = 0 / CC2400_EN = 0 / CRC_EN = 0 / LENGTH_CONFIG = 1
[15] (0x3E 0xFF) PATABLE(0) = 0xFF (+1dBm)
[17] (0x0B 0x0A) FREQ_IF = 0x0A (IF = 253.906kHz)
[19] (0x0C 0x00) FREQOFF = 0
[21] (0x0D 0x5C)
[23] (0x0E 0x76)
[25] (0x0F 0x27) FREQ = 0x5C7627 (F = 2404MHz)
[27] (0x10 0x7B) CHANBW_E = 1 / CHANBW_M = 3 / BW = 232.143kHz / DRATE_E = 0x0B
[29] (0x11 0x61) DRATE_M = 0x61 Bitrate = 70023 bps
[31] (0x12 0x13) MOD_FORMAT = 1 (GFSK) / SYNC_MODE = 3 (30/32 sync word bits detected)
[33] (0x13 0x23) FEC_EN = Disable / NUM_PREAMBLE = 2 (4 bytes) / CHANSPC_E = 3
[35] (0x14 0x7A) CHANSPC_M = 0x7A Channel Spacing = 299927Hz
[37] (0x15 0x51) DEVIATION_E = 5 / DEVIATION_M = 1 / Deviation = 57129Hz
[39] (0x1B 0x43) MAX_DVGA_GAIN = 1 / MAX_LNA_GAIN = 0 / MAGN_TARGET = 3
[41] (0x19 0x16) FOC_BS_CS_GATE = 0 / FOC_PRE_K = 2 / FOC_POST_K = 1 / FOC_LIMIT = 2
[43] (0x1A 0x6C) BS_PRE_KI = 1 (2KI) / BS_PRE_KP = 2 (3KP) / BS_POST_KI = 1 (KI /2) / BS_POST_KP = 1 (Kp) / BS_LIMIT = 0 
[45] (0x1C 0x40) AGCCTRL1 = 0x40
[47] (0x1D 0x91) AGCCTRL0 = 0x91
[49] (0x21 0x56) FREND1
[51] (0x22 0x10) FREND0: LODIV_BUF_CURRENT = 1
[53] (0x23 0xA9) FSCAL3 = 0xA9
[55] (0x24 0x0A) FSCAL2 = 0x0A
[57] (0x25 0x00) FSCAL1 = 0x00
[59] (0x26 0x11) FSCAL0 = 0x11
[61] (0x29 0x59) FSTEST = 0x59  (Same as specified in datasheet)
[63] (0x2C 0x88) TEST2 = 0x88 (Same as specified in datasheet and by SmartRF sw)
[65] (0x2D 0x31) TEST1 = 0x31 (Same as specified in datasheet and by SmartRF sw)
[67] (0x2E 0x0B) TEST0 = 0x0B (Same as specified in datasheet and by SmartRF sw)
[69] (0x03 0x07) FIFOTHR = 0x07
[71] (0x09 0x00) ADDR = 0
[73] (0x36) SIDLE
[74] (0x36) SIDLE
[75] (0x0A 0x00) Channel = 0x00
[77] (0x33) SCAL

Bind TX > RX packets

Code:

[00] PKLEN  1D 1D 1D 1D 1D 1D 1D 1D 1D 1D
[01] CONST  03 03 03 03 03 03 03 03 03 03
[02] CONST  01 01 01 01 01 01 01 01 01 01
[03] TXID1  B3 B3 B3 B3 B3 B3 B3 B3 B3 B3
[04] TXID2  FD FD FD FD FD FD FD FD FD FD
[05] PKIDX  00 05 0A 0F 14 19 1E 23 28 2D
[06] HOPS1  02 70 DE 61 CF 52 C0 43 B1 34
[07] HOPS2  D4 57 C5 48 B6 39 A7 2A 98 1B
[08] HOPS3  BB 3E AC 2F 9D 20 8E 11 7F 00
[09] HOPS4  A2 25 93 16 84 07 75 E3 66 1D
[10] HOPS5  89 0C 7A E8 6B D9 5C CA 4D 03
[11] CONST  02 02 02 02 02 02 02 02 02 02
[12] RXNUM  15 15 15 15 15 15 15 15 15 15
[13] CONST  00 00 00 00 00 00 00 00 00 00
[14] CONST  00 00 00 00 00 00 00 00 00 00
[15] CONST  00 00 00 00 00 00 00 00 00 00
[16] CONST  00 00 00 00 00 00 00 00 00 00
[17] CONST  00 00 00 00 00 00 00 00 00 00
[18] CONST  00 00 00 00 00 00 00 00 00 00
[19] CONST  00 00 00 00 00 00 00 00 00 00
[20] CONST  00 00 00 00 00 00 00 00 00 00
[21] CONST  00 00 00 00 00 00 00 00 00 00
[22] CONST  00 00 00 00 00 00 00 00 00 00
[23] CONST  00 00 00 00 00 00 00 00 00 00
[24] CONST  00 00 00 00 00 00 00 00 00 00
[25] CONST  00 00 00 00 00 00 00 00 00 00
[26] CONST  00 00 00 00 00 00 00 00 00 00
[27] CONST  00 00 00 00 00 00 00 00 00 00
[28] CHKS1  57 C1 64 C2 CD 14 C3 04 CE 6E
[29] CHKS2  5C 34 74 93 D1 7A A5 C1 02 4E

[30] RSSI   2B 2C 2C 2C 2B 2A 2B 2B 2B 2B
[31] C/LQI  B2 B2 B1 B1 B1 B1 B1 B0 B1 B2

Notes:
Packet sent by TX every 9ms.
Ten packets needed to transfer whole HOPS table.
Only first 47 values from HOPS tables are used.
RXNUM is set on TX side - model/receiver match.
Checksum is calculated for bytes from [03] to [27].
RSSI and CRC_OK/LQI status bytes are appended on RX side.

Standard TX > RX packets

Code:

[00] PKLEN  1D 1D 1D 1D 1D 1D 1D 1D 1D 1D
[01] TXID1  DD DD DD DD DD DD DD DD DD DD
[02] TXID2  6D 6D 6D 6D 6D 6D 6D 6D 6D 6D
[03] CONST  02 02 02 02 02 02 02 02 02 02
[04] PKCTR  DE DA D6 D2 CE CA C6 C2 ED E9
[05] RSCTR  0A 0A 0A 0A 0A 0A 0A 0A 0A 0A
[06] RXNUM  16 16 16 16 16 16 16 16 16 16
[07] FLAGS  00 00 00 00 00 00 00 00 00 00
[08] CONST  00 00 00 00 00 00 00 00 00 00
[09] CHNLS  00 00 00 00 00 00 00 00 00 00
[10] CHNLS  04 0C 04 0C 04 0C 04 0C 04 0C
[11] CHNLS  40 C0 40 C0 40 C0 40 C0 40 C0
[12] CHNLS  00 00 00 00 00 00 00 00 00 00
[13] CHNLS  04 0C 04 0C 04 0C 04 0C 04 0C
[14] CHNLS  40 C0 40 C0 40 C0 40 C0 40 C0
[15] CHNLS  00 00 00 00 00 00 00 00 00 00
[16] CHNLS  04 0C 04 0C 04 0C 04 0C 04 0C
[17] CHNLS  40 C0 40 C0 40 C0 40 C0 40 C0
[18] CHNLS  00 00 00 00 00 00 00 00 00 00
[19] CHNLS  04 0C 04 0C 04 0C 04 0C 04 0C
[20] CHNLS  40 C0 40 C0 40 C0 40 C0 40 C0
[21] ?????  08 08 08 08 08 08 08 08 08 08
[22] CONST  00 00 00 00 00 00 00 00 00 00
[23] CONST  00 00 00 00 00 00 00 00 00 00
[24] CONST  00 00 00 00 00 00 00 00 00 00
[25] CONST  00 00 00 00 00 00 00 00 00 00
[26] CONST  00 00 00 00 00 00 00 00 00 00
[27] CONST  00 00 00 00 00 00 00 00 00 00
[28] CHKS1  AB 47 52 BE 48 A4 B1 5D 49 A5
[29] CHKS2  DB 93 70 38 9F D7 34 7C 66 2E

[30] RSSI   34 41 3F 3B 25 3E 3E 2A 3A 3E
[31] C/LQI  B0 B0 B2 B0 B2 B0 B0 B1 B0 B2

Notes:
Packet sent by TX every 9ms.
Two packets needed to transfer 16 channels.
RSCTR increase every 4 on/off cycles of TX.
FLAGS 00 - standard packet
      10, 12, 14, 16, 18, 1A, 1C, 1E - failsafe packet
      20 - range check packet
[21] ????? is related to RX > TX telemetry[05]
Checksum is calculated for bytes from [03] to [27].
RSSI and CRC_OK/LQI status bytes are appended on RX side.

Telemetry RX > TX packets

Code:

[00] PKLEN  0E 0E 0E 0E 0E 0E 0E 0E 0E 0E
[01] TXID1  DD DD DD DD DD DD DD DD DD DD
[02] TXID2  6D 6D 6D 6D 6D 6D 6D 6D 6D 6D
[03] CONST  02 02 02 02 02 02 02 02 02 02
[04] RS/RB  2C D0 2C CE 2C CE 2C CD 2C CC
[05] ?????  03 10 21 32 03 10 21 32 03 10
[06] STRM1  00 00 06 03 00 00 00 00 00 00
[07] STRM2  00 00 7E 00 00 00 00 00 00 00
[08] STRM3  00 00 1A 00 00 00 00 00 00 00
[09] STRM4  00 00 10 00 00 00 00 00 00 00
[10] STRM5  03 03 03 03 03 03 03 03 03 03
[11] STRM6  F1 F1 F1 F1 F1 F1 F1 F1 F1 F1
[12] STRM7  D1 D1 D0 D0 D0 D0 D0 D0 D0 D0
[13] CHKS1  0A FE 1F 73 1B 51 3B 6B 1B 63
[14] CHKS2  54 83 08 42 DD 72 46 A9 DD F9

Notes:
Packet sent by RX every 9ms.
RS/RB means RSSI or RxBt value for odd or even packet.
[05] ????? is related to standard TX > RX frame[21]
STRM1-7 is continuous FrSky S.Port telemetry stream.
Checksum is calculated for bytes from [03] to [12].

Setup:
Taranis X9D Plus with internal FrSky XJT TX.
FrSky X4R-SB RX.
Both RX and TX flashed with latest non-EU firmware.
Capturing X4R-SB SPI communication with CC2500.
Capturing from power up.

x4rsb_thr_down.zip:
TX running and already bound to RX.
RX powered on.
Throttle set down.

x4rsb_thr_up.zip:
Same as x4rsb_thr_down.zip, but throttle up.

x4rsb_bind_notx.zip:
TX off.
RX powered with F/S button pressed.

x4rsb_bind_ch1_8_rcvno08_fshold.zip:
TX running in binding mode: Channel Range CH1-8, Receiver No. 08, Failsafe mode: Hold.
RX powered with F/S button pressed.

xjt_x4rsb.zip with both X4R-SB and XJT captured. See REDME.TXT for details. 

x4rsb_xjt_ch0_txonoff.zip:
Logic analyzer on RX
RX running (already bound to TX)
TX turned on/off several times (waiting for green led on RX each time)

xjt_x4rsb_-100.zip
Logic analyzer on TX
RX (binded) alreading running & waiting for TX
TX powered on
One channel (0, 1, 7, 8, 14, or 15) set to -100%
Other 15 channels set to 0%

本文转载自:http://www.rcgroups.com/forums/showthread.php?t=2503871

共有 人打赏支持
涂Sir
粉丝 0
博文 11
码字总数 9066
作品 0
金华
Disable Linux IPv6 Networking

On most of the Linux distribution IPv6 is enabled by default, which may cause your internet is workding slow, so If your network do not supportor do not setup IPv6 network, you ......

LEAN_IN
2014/08/05
0
0
手把手教你做智能LED灯(二) 硬件端的开发

第2节 硬件端的开发 现在,我们开始实现智能LED灯硬件相关部分的设计。 2.1 硬件连接 选择了Arduino MEGA 、HC-06蓝牙模块、LED灯模块和三引脚按钮开关以后,我们就需要把它们组合起来,为我...

anddlecn
2016/09/13
0
0
[debian安装手记3] 网络设置

apt-get 代理设置 设置/etc/apt/apt.conf 设置~/.bashrc 安装wifi驱动 https://wiki.debian.org/WiFi 找到自己的Wifi型号,按步骤执行 以下转自:http://blog.chinaunix.net/uid-24830931-id...

danielqsj
2014/03/13
0
0
确定缺少驱动的网卡

--检查有几个pci网卡[root@db01 ~]# lspci |grep Ethernet04:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)04:00.1 Ethernet controlle......

wjw555
01/06
0
0
Oracle 加在表上的锁类型

下表是在Oracle文档里里面列出的操作会对表加上什么类型的lock,以及该锁和其他类型的操作的兼容性。 Table 13-3 Summary of Table Locks SQL Statement Mode of Table Lock Lock Modes Perm...

晨曦之光
2012/04/25
493
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

RabbitMQ在CentOS环境安装

1.废话不多说准备一台虚拟机,系统为centos,我这里使用的系统版本如下图所示:

凌晨一点
48分钟前
0
0
线程池相关

在java.util.concurrent包下,提供了一系列与线程池相关的类。 使用线程池的好处 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗; 提高响应速度。当任务到达时,任务...

edwardGe
50分钟前
0
0
学习大数据这三个关键技术是一定要掌握!

大数据时代全面来临,大数据、人工智能等技术引领科技创新潮流,获得国家政策大力支持,前景广阔。学习大数据技术的人自然是络绎不绝, 学习大数据虽然是一个趋势,但也要注意大数据培训课程...

董黎明
今天
0
0
jetbrains 上传代码到github

设置中找github 获取token 验证是否成功 测试git 生成key,一路回车即可 ssh-keygen -t rsa -C “youremail@example.com” 打开pub复制key,需要再次输入一次密码 验证是否成功,输入yes即可...

阿豪boy
今天
0
0
分布式服务框架(拾遗)

前言 现在的大部分工程都已经是基于分布式架构来处理。所以这里对分布式框架做一个简单的总结 常用的RPC框架 RPC框架原理 RPC(Remote Procedure Call,远程过程调用)一般用来实现部署在不同...

kukudeku
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部