遥控器对频完整链路分析

1 阅读11分钟

一、对频是什么:谁跟谁的对频,依据什么对频?

1.1 对频定义

对频(Pairing / 绑定)遥控器(地面端 AP)天空端设备(DEV) 之间建立 GLink 射频通信链路 的过程。

1.2 对频双方

角色设备说明
地面端(AP / 遥控器端)G 系列遥控器由 Android App 控制,通过 USB OTG 连接遥控器固件 MCU
天空端(DEV / 无人机端)接收机;中继器;配套设备挂载于无人机,通过 GLink 射频模块与遥控器通信

1.3 对频依据

对频的核心依据是 MAC 地址跳频信道序列

  1. MAC 地址识别:天空端设备(接收机)有唯一 8 位 MAC 地址(如 "12345678"),作为设备身份标识
  2. GLink 跳频协议:对频后双方使用预定义的跳频序列(频率列表 + 帧间隔)建立同步通信
  3. 心跳机制:连接成功后,双方通过周期性心跳包维持 dev_connect = true 状态

二、硬件层链路

2.1 硬件拓扑

┌─────────────────────────────────────────────────────────────────────────────┐
│                          完整硬件链路                                         │
│                                                                             │
│  ┌──────────────────┐          USB OTG          ┌──────────────────┐       │
│  │  Android 手机/Pad │◄────────────────────────►│  遥控器 MCU       │       │
│  │  (运行 devicetool) │   CDC/FTDI/CH340/CP2102   │  (STM32 系列)     │       │
│  └────────┬─────────┘                           └───────┬──────────┘       │
│           │                                            │ UART (921600)    │
│           │                                            ▼                  │
│           │                                ┌─────────────────────┐        │
│           │                                │ AR8030 GLink 射频模块 │        │
│           │                                │ (2.4GHz 跳频扩频)     │        │
│           │                                └──────────┬──────────┘        │
│           │                                           │ 2.4GHz 无线链路    │
│           │                                           ▼                  │
│           │                                ┌─────────────────────┐        │
│           │                                │ AR8030 GLink 射频模块 │        │
│           │                                │ (无人机端)            │        │
│           │                                └──────────┬──────────┘        │
│           │                                           │                  │
│           │                                           ▼                  │
│           │                                ┌─────────────────────┐        │
│           │                                │ 天空端接收机           │        │
│           │                                │ │        │
│           │                                └─────────────────────┘        │
│           │                                                             │
│           └──────────────────────── 青鳉 D2D 方案(可选)─────────────────┘
│                                     LTE 直连,无需 WiFi                  │
└─────────────────────────────────────────────────────────────────────────────┘

2.2 通信介质矩阵

通信方式适用场景物理链路典型波特率
SerialPort(USB CDC)所有设备(主力方案)Android USB Host → CH340/CP2102 → UART921600 bps
UDP Socket开发调试版本Android WiFi → 天空端 IP (192.168.144.10)
Android D2D Service青鳉 D2D 硬件模块LTE 直连(3GPP Rel-13)
TCP Comm备用长距离方案WiFi / 移动数据

2.3 关键硬件模块

模块说明
AR8030GLink 射频模块,负责 2.4GHz 跳频通信,内置 RSSI/功率测量
STM32 MCU遥控器主控,负责协议解析、信号质量采集、组包下发
GR01/GR02/GR03天空端接收机,搭载 GLink 射频模块,接收对频命令并建立链路
TR01中继器,扩展通信距离
青鳉 D2D 模块可选方案,通过 LTE 频段直连,无需 WiFi

三、底层软件层(rcsdk SDK)

3.1 SDK 架构

┌─────────────────────────────────────────────────────────────────┐
│                        rcsdk 通信 SDK 架构                       │
│                                                                 │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │                    KeyManager(统一入口)                  │   │
│  │  get(key, callback) / set(key, value, callback)          │   │
│  │  action(key, callback) / listen(key, listener)           │   │
│  └────────────────────────┬────────────────────────────────┘   │
│                           │                                     │
│         ┌─────────────────┼─────────────────┐                  │
│         ▼                 ▼                 ▼                  │
│  ┌─────────────┐  ┌─────────────┐  ┌──────────────┐           │
│  │ SerialPort  │  │ UDPComm     │  │ D2dController│           │
│  │ (串口/USB)  │  │ (网络调试)   │  │ (LTE D2D)    │           │
│  └──────┬──────┘  └──────┬──────┘  └──────┬───────┘           │
│         │                │                │                    │
│         └────────────────┴────────────────┘                    │
│                          │                                    │
│                          ▼ 协议解码 + Key 映射                  │
│              ┌───────────────────────┐                        │
│              │  firmware MCU 固件层   │                        │
│              │  (STM32 协议解析)      │                        │
│              └───────────────────────┘                        │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

3.2 核心类索引

包路径作用
KeyManagerrcsdk/KeyManager.java参数读写统一入口(get/set/action/listen)
SerialPortrcsdk/comm/SerialPort.javaJNI 封装,调用 /dev/ttyUSBx 串口设备
AR8030Commrcsdk/comm/AR8030Comm.javaAR8030 射频模块通信协议封装
UdpConnectManagerh12ptool/common/UdpConnectManager.javaUDP 连接管理
D2dControllerfishsemi/sdk/d2dcontrol/D2dController.javaD2D 系统级控制器(LTE 直连)
InternalKeyrcsdk/internal/InternalKey.java内部状态管理(Ar8030Pairing、onlyConnect 等)
RemoteControllerKeyrcsdk/key/RemoteControllerKey.java对频动作 Key 定义
AirLinkKeyrcsdk/key/AirLinkKey.java信号质量、频段、信道等 Key 定义

3.3 对频相关 SDK Key

对频动作 Key

Key所属类方法参数类型说明
KeyRequestPairingRemoteControllerKeyactionEmptyMsg请求开始对频(广播模式)
KeyRequestStopPairRemoteControllerKeyactionEmptyMsg请求停止对频 / 解绑
KeyRequestPairingAtSetMacInternalKeysetPairParam指定 MAC 地址绑定接收机

状态监听 Key

Key所属类读取方法返回值类型说明
KeyRawSignalQualityAirLinkKeylistenString (JSON)原始信号质量(含 dev_connect)
KeyRawSignalQuality2AirLinkKeylistenString (JSON)备用信号质量
KeySignalQualityAirLinkKeylistenInteger通用信号强度
KeyGLinkSkyDeviceAirLinkKeylistenGLinkSkyDevice[]已连接的天空端设备列表
KeyGLinkThroughputAirLinkKeygetGLinkThroughput链路吞吐量(RX/TX kbps)
KeyMACAirLinkKeygetString设备 MAC 地址
InternalKey.isAr8030Pairing()InternalKeybooleanAr8030 是否处于对频状态

四、APP 层完整流程

4.1 对频入口与页面结构

UI 入口主 Fragment / Activity核心功能
点击"对频"按钮D2dFragment / D2dActivity开始对频
点击"停止对频"按钮D2dFragment / D2dActivity停止对频 / 解绑
点击"新增接收机"按钮D2dFragment / D2dActivity指定 MAC 绑定接收机
信号质量页面NewuiG12SignalFragment实时信号强度图表
MAC 设置页面NewuiG12MacPairFragmentMAC 地址读取/设置
无线设置入口NewuiWirelessSettingsFragment频段、跳频等配置

4.2 流程一:开始对频(广播模式)

┌─────────────────────────────────────────────────────────────────────────────┐
│                          开始对频完整流程                                     │
│                                                                             │
│  【用户操作】                                                                │
│  用户点击"对频"按钮(buttonContraband)                                       │
│      ↓                                                                      │
│  D2dFragment.onClick() → showD2dDialog()(弹出确认对话框)                    │
│      ↓                                                                      │
│  用户确认后 → sendReset()                                                   │
│      ↓                                                                      │
│  Toast 提示 "对频中…"                                                        │
│      ↓                                                                      │
│  【G 系列遥控器分支】isG_RC_App() = true                                     │
│  KeyManager.action(KeyRequestPairing, callback)                              │
│      ↓                                                                      │
│  下发对频请求到遥控器固件(通过 SerialPort/USB)                               │
│      ↓                                                                      │
│  onSuccess → 启动 pairCheckStatusThread(后台线程,每 500ms 检查)            │
│      │                                                                      │
│      │  ┌─────────────────────────────────────────────────────┐             │
│      │  │ pairCheckStatusThread 循环:                         │             │
│      │  │   while (isStartPair) {                             │             │
│      │  │     if (InternalKey.isAr8030Pairing()) {            │             │
│      │  │       → tvPairing 显示可见(对频进行中)              │             │
│      │  │     } else {                                        │             │
│      │  │       → isStartPair = false,隐藏 tvPairing          │             │
│      │  │     }                                               │             │
│      │  │     Thread.sleep(500ms)                             │             │
│      │  │   }                                                 │             │
│      │  └─────────────────────────────────────────────────────┘             │
│      ↓                                                                      │
│  1 秒后设置 isCanShowPairEnd = true                                         │
│      ↓                                                                      │
│  【等待连接确认】                                                            │
│  KeyManager.listen(KeyRawSignalQuality, listener) 持续监听                   │
│      ↓                                                                      │
│  回调解析 JSON:                                                            │
│    ├── dev_connect = true → d2dConnection 显示 "已连接"                     │
│    │   且 isCanShowPairEnd = true → Toast "对频成功" ✓                       │
│    └── dev_connect = false → 保持 "未连接" 状态                             │
│      ↓                                                                      │
│  【超时保护】5 秒内无有效数据 → checkTimeoutRunnable 触发                    │
│       → d2dConnection 显示 "未连接",清空详细字段                            │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

关键代码位置:

  • 触发入口:D2dFragment.java:1008-1016(buttonContraband onClick)
  • 对频动作:D2dFragment.java:1057-1070(sendReset())
  • 状态轮询:D2dFragment.java:1115-1144(pairCheckStatusThread)
  • 连接确认:D2dFragment.java:166-344(keyRawSignalQualityListener)

4.3 流程二:新增接收机(指定 MAC 绑定)

┌─────────────────────────────────────────────────────────────────────────────┐
│                          新增接收机(指定 MAC 绑定)流程                       │
│                                                                             │
│  用户点击"新增接收机"按钮(buttonAddReceiver)                                │
│      ↓                                                                      │
│  getMac() → KeyManager.get(KeyMAC, callback)                                │
│      ↓                                                                      │
│  onSuccess(mac) → getMacStr = mac(读取当前设备 MAC)                         │
│      ↓                                                                      │
│  showReceiverDialog2() → 弹出确认对话框,显示接收机 MAC                       │
│      ↓                                                                      │
│  用户确认 → setMac(getMacStr)                                               │
│      ↓                                                                      │
│  参数校验:                                                                  │
│    ├── MAC 为空 → Toast "设置失败"                                           │
│    ├── MAC 长度 ≠ 8 → Toast "设置失败"                                       │
│    └── MAC 合法 → 继续                                                       │
│      ↓                                                                      │
│  构建 PairParam(mac, timeout=5s)                                             │
│  KeyManager.set(KeyRequestPairingAtSetMac, pairParam, callback)              │
│      ↓                                                                      │
│  onResult(null) → 绑定成功                                                   │
│  onResult(exception) → 绑定失败                                              │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

关键代码位置:

  • 触发入口:D2dFragment.java:607-614(buttonAddReceiver onClick)
  • MAC 读取:D2dFragment.java:946-978(getMac 回调)
  • MAC 绑定:D2dFragment.java:916-943(setMac())

4.4 流程三:停止对频 / 解绑

用户点击"停止对频"按钮(buttonStopPair)
    ↓
KeyManager.action(KeyRequestStopPair, callback)
    ↓
onResult(null) → Toast "停止对频中…"
onResult(exception) → 不提示
    ↓
pairCheckStatusThread.interrupt()(中断检查线程)
isStartPair = false
    ↓
遥控器断开与天空端的链路
    ↓
KeyRawSignalQuality 回调 dev_connect = false
    ↓
d2dConnection 显示 "未连接"

4.5 流程四:信号质量实时监听

onResume() → initConnect()
    ↓
G 系列设备(非调试模式):
    KeyManager.listen(KeyRawSignalQuality, keyRawSignalQualityListener)
    ↓
SDK 主动推送 JSON 数据(无需轮询)
    ↓
解析 JSON,提取:
    ├── dev_connect   → Boolean:连接状态
    ├── signal        → Integer:综合信号强度
    ├── ap_tx_chan    → Integer:地面端当前发射信道
    └── dev_tx_chan   → Integer:天空端当前发射信道
    ↓
重置 5 秒超时计时器
    ↓
runOnUiThread → 更新 UI:
    ├── d2dConnection.setText("已连接" / "未连接")
    └── tvLeft / tvCenter / tvRight 显示详细字段

调试模式(is401DDeveloper = true):

创建 UDP Socket:本地 12581 ↔ 天空端 192.168.144.10:12580
启动 GetInfoThread 每秒发送 "GET_INFO_REQUEST\n"
天空端收到后回复 JSON 格式状态数据
App 解析并更新 UI

五、信号数据完整流向

┌──────────────────────────────────────────────────────────────────────────────────┐
│                            信号质量数据完整流向                                    │
│                                                                                  │
│  【物理层 - 射频链路】                                                             │
│  ┌──────────────────┐         2.4GHz 跳频通信          ┌──────────────────┐     │
│  │ 地面端 GLink 射频  │◄──────────────────────────────►│ 天空端 GLink 射频  │     │
│  │ (AP 侧 - AR8030)  │           GLink 协议              │ (DEV 侧 - AR8030) │     │
│  └────────┬─────────┘                                  └────────┬─────────┘     │
│           │ RSSI / 信道 / 功率 / 吞吐量测量                        │               │
│           └────────────────────────┬─────────────────────────────┘               │
│                                    ▼                                             │
│  【固件层 - 遥控器 MCU (STM32)】                                                    │
│  ┌──────────────────────────────────────────────────────────────────┐            │
│  │  • 定时读取 RF 寄存器(RSSI、信道状态)                             │            │
│  │  • 统计链路吞吐量(TX/RX 字节数)                                  │            │
│  │  • 心跳检测(维护 dev_connect 状态)                               │            │
│  │  • 组包:将数据封装为二进制协议包                                   │            │
│  └──────────────────────────────────────────────────────────────────┘            │
│                                    │                                              │
│                                    ▼ 串口/USB (921600 baud)                       │
│  【SDK 层 - rcsdk Android 库】                                                      │
│  ┌──────────────────────────────────────────────────────────────────┐            │
│  │  SerialPort / UDPComm / D2dController                            │            │
│  │       ↓                                                           │            │
│  │  KeyManager(协议解码 + Key 映射)                                  │            │
│  │       ↓                                                           │            │
│  │  KeyRawSignalQuality → JSON 字符串                                 │            │
│  │  KeyGLinkThroughput  → GLinkThroughput 对象                        │            │
│  │  KeyG12RCScanChanInfo→ ChanInfo 对象(地面端)                      │            │
│  │  KeyG12SkyScanChanInfo→ ChanInfo 对象(天空端)                     │            │
│  └──────────────────────────────────────────────────────────────────┘            │
│                                    │                                              │
│                                    ▼ KeyListener 回调                              │
│  【App 层 - D2dFragment / NewuiG12SignalFragment】                                  │
│  ┌──────────────────────────────────────────────────────────────────┐            │
│  │  主线程 UI 更新:                                                  │            │
│  │  ├── d2dConnection:显示 "已连接" / "未连接"                        │            │
│  │  ├── tvCHANNEL:显示完整 JSON 信息                                 │            │
│  │  ├── tvLeft/Center/Right:分栏显示详细指标                          │            │
│  │  ├── BarChart:显示各信道功率分布 (-110 ~ -50 dBm)                  │            │
│  │  └── FloatWindow:全局悬浮窗显示信号强度和吞吐量                     │            │
│  │                                                                   │            │
│  │  超时检测:                                                        │            │
│  │  └── 5 秒无数据 → 自动切换为"未连接"状态                            │            │
│  └──────────────────────────────────────────────────────────────────┘            │
│                                                                                  │
└──────────────────────────────────────────────────────────────────────────────────┘

六、对频完成后的状态确认

6.1 连接成功判定条件

条件1:InternalKey.isAr8030Pairing() = true(射频模块处于对频/同步状态)
    AND
条件2:KeyRawSignalQuality 回调中 dev_connect = true(应用层心跳正常)
    AND
条件3:isCanShowPairEnd = true(对频窗口已开放,首次确认)
    → 触发 Toast "对频成功"

6.2 连接断开判定条件

条件1:KeyRawSignalQuality 回调中 dev_connect = false
    OR
条件2:5 秒内未收到任何有效信号数据 → checkTimeoutRunnable 触发
    → d2dConnection 显示 "未连接"

6.3 典型信号数据 JSON 示例

正常连接状态:

{
  "dev_connect": true,
  "signal": -62,
  "ap_tx_chan": 6,
  "dev_tx_chan": 6,
  "ap_signal_strength": -65,
  "dev_signal_strength": -60,
  "acs_chan": 6,
  "work_chan": 6,
  "tx_real": 2400,
  "rx_real": 2350
}

断开连接状态:

{
  "dev_connect": false,
  "signal": -110,
  "ap_tx_chan": -1,
  "dev_tx_chan": -1
}

对频进行中状态:

{
  "dev_connect": false,
  "signal": -105,
  "pairing": true,
  "scan_progress": 3
}

七、完整流程图

┌─────────────────────────────────────────────────────────────────────────────────┐
│                            对频全流程总览                                         │
│                                                                                 │
│  ┌─────────────┐       ┌─────────────┐       ┌─────────────┐                   │
│  │  硬件准备    │  ───→ │  SDK 初始化  │  ───→ │  APP 页面   │                   │
│  │  遥控器   │       │ rcsdk加载   │       │ D2dFragment │                   │
│  │  连接接收机  │       │ SerialPort  │       │  注册监听   │                   │
│  └─────────────┘       └─────────────┘       └──────┬──────┘                   │
│                                                     │                            │
│                                         ┌───────────┴───────────┐               │
│                                         ▼                       ▼               │
│                                    ┌──────────┐           ┌──────────┐          │
│                                    │  广播对频  │           │  指定MAC绑定 │          │
│                                    │按键触发   │           │ 按键触发   │          │
│                                    └────┬─────┘           └────┬─────┘          │
│                                         │                       │               │
│                    ┌────────────────────┼─────────────────────┼────────┐        │
│                    │                    ▼                     ▼        │        │
│                    │         ┌──────────────────┐    ┌──────────────────┐  │        │
│                    │         │ KeyRequestPairing │    │KeyRequestPairing │  │        │
│                    │         │ (广播模式)         │    │AtSetMac (MAC绑定)│  │        │
│                    │         └────────┬─────────┘    └────────┬─────────┘  │        │
│                    │                  │                       │            │        │
│                    │                  ▼                       ▼            │        │
│                    │         ┌──────────────────────────────────────┐     │        │
│                    │         │        遥控器固件 MCU (STM32)         │     │        │
│                    │         │   解析命令 → 控制 AR8030 进入对频模式  │     │        │
│                    │         │   isAr8030Pairing() = true           │     │        │
│                    │         └──────────────────┬───────────────────┘     │        │
│                    │                            │                         │        │
│                    │                            ▼ 2.4GHz 跳频无线链路       │        │
│                    │         ┌──────────────────────────────────────┐     │        │
│                    │         │     天空端接收机 (GR01/GR02/GR03)     │     │        │
│                    │         │   检测到对频请求 → 同步跳频序列        │     │        │
│                    │         │   建立 GLink 射频链路                  │     │        │
│                    │         └──────────────────┬───────────────────┘     │        │
│                    │                            │                         │        │
│                    │                            ▼ 心跳包 / 信号数据        │        │
│                    │         ┌──────────────────────────────────────┐     │        │
│                    │         │      KeyRawSignalQuality JSON 回调    │     │        │
│                    │         │   dev_connect=true, signal=-62dBm    │     │        │
│                    │         └──────────────────┬───────────────────┘     │        │
│                    │                            │                         │        │
│                    │                            ▼                         │        │
│                    │         ┌──────────────────────────────────────┐     │        │
│                    │         │        UI 更新 + Toast "对频成功" ✓   │     │        │
│                    │         └──────────────────────────────────────┘     │        │
│                    │                                                      │        │
│                    └──────────────────── 持续监控 ────────────────────────┘        │
│                                         │                                        │
│                                         ▼                                        │
│                              ┌─────────────────────┐                            │
│                              │  5秒超时 → "未连接"  │                            │
│                              │  KeyRequestStopPair  │                            │
│                              │  → 停止对频 / 解绑    │                            │
│                              └─────────────────────┘                            │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

八、关键技术细节

8.1 对频参数模型(PairParam)

// com/skydroid/rcsdk/common/airlink/PairParam.java
public final class PairParam {
    private String mac;   // 目标接收机 MAC 地址(8位字符串)
    private int timeout;  // 对频超时时间(秒),默认 1 秒
}

// 构造方式
new PairParam(mac, 0, 2, null)  // 实际等价于 (mac, timeout=1)
new PairParam(mac, timeout=5)   // 指定 MAC 绑定时默认 5 秒超时

8.2 内部状态管理(InternalKey)

状态字段类型说明
isAr8030Pairing()booleanAR8030 射频模块是否处于对频状态
isRCApAtAr8030()boolean遥控器是否作为 AP 模式连接到 AR8030
onlyConnectint连接模式:0=无限制, 1=仅AirLink, 2=仅遥控器

8.3 天空端设备类型(GLinkSkyDevice)

public enum GLinkSkyDevice {
    UNKNOWN(0),  // 未识别
    GR01(1),     // GR01 接收机
    GR03(2),     // GR03 接收机
    TR01(3),     // TR01 中继器
    GR02(4),     // GR02 接收机
    YL20(5),     // YL20 配套设备
}

8.4 频段与跳频配置

Key说明
KeyRCSetBand / KeySkySetBand设置地面端/天空端频段(BandValue: 1G/2G/5G)
KeyRCSetBandAutoMode / KeySkySetBandAutoMode设置自动跳频模式
KeyRCSetBandSave / KeySkySetBandSave保存频段设置
KeySetFrameChangeDuration跳频帧间隔
KeyRCFreqList地面端可用频率列表(long[])
KeyG12RCScanChanInfo / KeyG12SkyScanChanInfo信道扫描信息(频率 + 功率)

九、对频失败常见原因

原因现象排查建议
天空端未上电dev_connect=false,信号 -110dBm确认接收机电源正常
距离过远信号强度 < -95dBm缩短距离后重新对频
MAC 地址错误指定 MAC 绑定失败重新读取 MAC 确认
频段不匹配对频超时检查两端频段配置是否一致
干扰严重信号波动大,频繁断连切换频段或远离干扰源
固件异常isAr8030Pairing() 始终 false重启遥控器或重新插拔 USB
5 秒超时checkTimeoutRunnable 触发检查 USB 连接稳定性

十、关键类速查表

文件路径作用
D2dFragmenth12ptool/newuifragment/D2dFragment.java对频主页面(新 UI)
D2dActivityh12ptool/p006ui/activity/D2dActivity.java对频页面(旧 UI)
NewuiG12MacPairFragmenth12ptool/newuifragment/NewuiG12MacPairFragment.javaMAC 读取/设置页面
NewuiG12SignalFragmenth12ptool/newuifragment/NewuiG12SignalFragment.java信号质量图表
NewuiWirelessSettingsFragmenth12ptool/newuifragment/NewuiWirelessSettingsFragment.java无线设置入口
D2dControllerfishsemi/sdk/d2dcontrol/D2dController.javaD2D 系统级控制器
KeyManagerrcsdk/KeyManager.java参数读写统一入口
AirLinkKeyrcsdk/key/AirLinkKey.java信号质量/频段 Key 定义
RemoteControllerKeyrcsdk/key/RemoteControllerKey.java对频动作 Key 定义
InternalKeyrcsdk/internal/InternalKey.java内部状态 Key
PairParamrcsdk/common/airlink/PairParam.java对频参数(MAC + 超时)
ChanInforcsdk/common/airlink/ChanInfo.java信道扫描数据
GLinkThroughputrcsdk/common/airlink/GLinkThroughput.java链路吞吐量
GLinkSkyDevicercsdk/common/airlink/GLinkSkyDevice.java天空端设备类型
SerialPortrcsdk/comm/SerialPort.javaJNI 串口操作
AR8030Commrcsdk/comm/AR8030Comm.javaAR8030 模块通信
StringUtilsbusiness/util/StringUtils.java连接状态字符串工具

十一、总结

对频本质:遥控器(地面端 AP)通过 USB 串口向遥控器固件 MCU 下发对频命令,MCU 控制 AR8030 GLink 射频模块进入对频模式,通过 2.4GHz 跳频无线链路广播对频请求;天空端接收机检测到对频信号后同步跳频序列,建立稳定射频链路;App 层通过监听 KeyRawSignalQuality 回调中的 dev_connect 字段确认连接成功。

对频依据

  1. MAC 地址:用于指定设备绑定(新增接收机场景)
  2. 跳频信道序列:由 GLink 协议自动协商,包含频率列表和帧间隔
  3. 心跳机制:连接建立后通过周期性心跳包维持链路,5 秒无心跳判定为断开

完整链路层级

APP 层 (D2dFragment)
  → SDK 层 (KeyManager + rcsdk)
    → 传输层 (SerialPort/UDP/D2D)
      → 固件层 (STM32 MCU + AR8030 协议解析)
        → 射频层 (GLink 2.4GHz 跳频通信)
          → 天空端接收机 (GR01/GR02/GR03)