MR16/DevCBT6/README.md
2025-12-19 20:41:21 +08:00

752 lines
22 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# MR16 - 2.4GHz 无线通信模块
## 产品简介
**MR16** 是一款高性能 2.4GHz 无线通信模块,基于 **SX1281** 芯片设计,适用于遥控、传感器数据传输等应用场景。
### 核心特性
| 特性 | 规格 |
| ------------ | ------------------ |
| **无线芯片** | SX1281 (2.4GHz) |
| **主控芯片** | STM32F103C8T6 |
| **通信协议** | BLE/LoRa/GFSK/FLRC |
| **最大距离** | > 1km (开阔环境) |
| **数据速率** | 125bps - 2Mbps |
| **用户接口** | UART2 + CLI命令行 |
| **显示屏** | 240×135 彩色LCD |
| **状态指示** | WS2812 RGB LED |
---
## 数据流
### TX 端 (发送端)
```
用户数据 (UART2)
MR16_PackTxBuffer() ← 自动添加 TX_ID
完整数据包
SX1281 无线射频发送 ← 自动添加 同步字节 + CRC
```
### RX 端 (接收端)
```
SX1281 无线接收 ← 自动校验数据包
分通道 ← 自动校验数据包TXID (与三个RX_ID之一 匹配)
输出数据包
DBUS
```
---
## 代码结构
### 文件组织
```
mr16.c - 主实现文件 (1788行)
├─ [PART 1] 核心功能 (MR16 CORE FUNCTIONS)
│ ├─ 无线事件回调
│ ├─ 系统初始化
│ ├─ 主循环
│ └─ 数据包处理
├─ [PART 2] UI显示 (UI DISPLAY FUNCTIONS)
│ ├─ 开机动画
│ ├─ 主界面显示
│ └─ 状态更新
└─ [PART 3] CLI命令 (CLI COMMAND FUNCTIONS)
├─ 帮助文本
├─ MR16命令处理器
├─ Radio命令处理器
└─ CLI初始化
```
## PART 1: 核心功能模块
### 1.1 数据格式 (Data Format)
#### 可变长度模式 (VARIABLE)
- 触发方式: UART 空闲中断
- 长度: 动态,根据实际接收数据
- 适用场景: 不定长数据传输
- 注意在VARIABLE模式下数据包属性中的payloadlenth表示可能的最大数据包长度
#### 固定长度模式 (FIXED)
- 长度: 预定义 (默认122字节)
- 可调范围: 1-123 字节 (纯用户数据)
- 适用场景: 固定格式数据,如遥控器
### 1.2 数据包格式
```
完整数据包结构 (最大127字节):
┌─────────┬──────────────────┬─────────┐
│ Header │ User Data │ CRC │
│ 2 bytes │ 1-123 bytes │ 2 bytes │
└─────────┴──────────────────┴─────────┘
```
#### Header (2字节)
- Byte 0: TX_ID 高字节
- Byte 1: TX_ID 低字节
- 用途: 识别发送端,支持多机接收
#### User Data (1-123字节)
- 用户纯数据,不包含 Header 和 CRC
- VARIABLE 模式: 实际接收长度
- FIXED 模式: 配置的 `fixedLength`
- **⚠️ 不同协议的数据长度限制详见下表**
#### CRC (2字节)
- 算法: CRC16
- 校验范围: Header + User Data
- Byte N+2: CRC 高字节
- Byte N+3: CRC 低字节
---
### **各协议用户数据长度限制**
根据 SX1281 硬件限制,不同协议支持的最大用户数据长度不同:
| 协议 | 硬件最大总包长 | 最大用户数据 |
|------|---|---|
| **FLRC** | 124字节 | **120字节** |
| **GFSK** | 252字节 | **248字节** |
| **LoRa** | 253字节 | **249字节** |
#### 建议将数据包长度留出百分之5左右的裕度确保射频稳定工作
### 1.3 失控保护
**仅在 RX 端启用**
#### 触发条件
- 100ms 未接收到有效数据
#### 安全帧格式
```
安全帧结构:
┌─────────┬────────────────────────┬─────────┐
│ Header │ 0xFF 0x00 0xFF 0x00 │ 0x00... │
│ 2 bytes │ 4 bytes (安全标识) │ 填充0 │
└─────────┴────────────────────────┴─────────┘
```
---
## PART 2: UI 显示模块
### 2.1 显示界面
#### 开机动画 (`MR16_UI_PowerON`)
- MR16 Logo
- "Initializing..." 提示
#### 主界面 (`MR16_UI_Home`)
**TX 模式显示:**
```
┌──────────────────────────────┐
│ MR16 Status [TX] │
├──────────────────────────────┤
│ Mode: FIXED Power: 10dBm │
│ Radio: FLRC DataLen: 122B│
│ Freq: 2450MHz │
│ TXID: 0x1234 │
└──────────────────────────────┘
```
**RX 模式显示:**
```
┌──────────────────────────────┐
│ MR16 Status [RX] │
├──────────────────────────────┤
│ Mode: FIXED rxcount: │
│ Radio: FLRC ch1: 1234 │
│ Freq: 2450MHz ch2: 567 │
│ rxid: 0x1234 0x5678 0x9ABC │
└──────────────────────────────┘
```
---
## PART 3: CLI 命令模块
### 3.1 MR16 系统命令
```
mr16 <subcmd> [args] - MR16 系统控制命令
```
#### 配置管理
- `save` - 保存当前配置到Flash
- `get` - 从Flash加载配置
- `reset` - 恢复默认配置
- `mode <VARIABLE|FIXED>` - 设置/查看数据格式
- `fixedlen <1-123>` - 设置用户数据长度仅FIXED模式
- `power <-18 to +13>` - 设置/查看TX功率dBm
#### 接收ID配置
- `rxid1 <hex>` - 设置/查看RX ID通道1
- `rxid2 <hex>` - 设置/查看RX ID通道2
- `rxid3 <hex>` - 设置/查看RX ID通道3
- `rxid` - 显示所有三个RX ID
#### 操作命令
- `tx` - 启动发送模式
- `rx` - 启动连续接收模式
#### 信息显示
- `show` - 显示所有MR16配置
- `mode help` - 显示模式详细信息
#### 使用示例
```bash
mr16 mode FIXED # 切换到固定长度模式
mr16 fixedlen 32 # 设置用户数据长度为32字节
mr16 power 10 # 设置TX功率为+10dBm
mr16 rxid1 0x1234 # 设置RX ID通道1为0x1234
mr16 tx # 启动发送
mr16 rx # 启动接收
```
#### 重要说明
1. **fixedlen设置的是仅用户数据长度**,不包含总包长度
2. MR16自动添加Header(2字节) + 用户数据 + CRC(2字节)
3. 有效RX ID范围0x0001 到 0xFFFE0x0000和0xFFFF为保留值
---
### 3.2 Radio 无线命令
```
radio <subcmd> [args] - SX1281 无线控制命令
```
#### 基本操作命令
- `mode <BLE|LORA|GFSK|FLRC>` - 更改无线工作模式
- `rffreq <Hz>` - 设置RF频率单位: Hz
- `power <dBm>` - 设置TX功率-18 到 +13 dBm
- `ramptime <us>` - 设置上升时间: 2, 4, 6, 8, 10, 12, 16, 20 微秒
- `baudrate [index]` - 设置当前模式的波特率
#### 参数配置命令
- `modulation <field> <value>` - 设置调制参数
- **BLE/GFSK可用字段**: `br_bw`, `modindex`, `shaping`
- **LoRa可用字段**: `sf`, `bw`, `cr`
- **FLRC可用字段**: `br_bw`, `cr`, `shaping`
- `packet <field> <value>` - 设置数据包参数
- **BLE可用字段**: `ConnectionState`, `CrcField`, `BlePacketType`, `Whitening`
- **GFSK可用字段**: `Preamble`, `SyncWordLength`, `SyncWordMatch`, `SyncWord1`, `SyncWord2`, `SyncWord3`, `SyncWord`, `Header`, `Payload`, `Crc`, `Whitening`
- **LoRa可用字段**: `Preamble`, `Header`, `Payload`, `Crc`, `InvertIQ`
- **FLRC可用字段**: 与GFSK相同SyncWord最大4字节
#### 详细帮助命令
- `modulation help` - 显示调制参数详细帮助
- `packet help` - 显示数据包参数详细帮助
- `baudrate help` - 显示波特率配置详细信息
#### 使用示例
```bash
radio mode LORA # 切换到LoRa模式
radio rffreq 2400000000 # 设置频率为2.4GHz
radio power 10 # 设置TX功率为+10dBm
radio baudrate 2 # 为当前模式设置波特率索引2
```
---
#### 调制参数 (modulation) 完整说明
**br_bw - 比特率与带宽**
```
0x04 = 2.0Mbps / 2.4MHz 0x28 = 1.6Mbps / 2.4MHz
0x4C = 1.0Mbps / 2.4MHz 0x45 = 1.0Mbps / 1.2MHz
0x70 = 0.8Mbps / 2.4MHz 0x69 = 0.8Mbps / 1.2MHz
0x8D = 0.5Mbps / 1.2MHz 0x86 = 0.5Mbps / 0.6MHz
0xB1 = 0.4Mbps / 1.2MHz 0xAA = 0.4Mbps / 0.6MHz
0xCE = 0.25Mbps / 0.6MHz 0xC7 = 0.25Mbps / 0.3MHz
0xEF = 0.125Mbps / 0.3MHz
```
**modindex - 调制指数**
```
0 = 0.35 1 = 0.50 2 = 0.75 3 = 1.00
4 = 1.25 5 = 1.50 6 = 1.75 7 = 2.00
8 = 2.25 9 = 2.50 10 = 2.75 11 = 3.00
12 = 3.25 13 = 3.50 14 = 3.75 15 = 4.00
```
**shaping - 调制整形**
```
0x00 = OFF (无整形)
0x10 = BT=1.0 (高斯整形)
0x20 = BT=0.5 (高斯整形)
```
##### LoRa模式参数
**sf - 扩频因子**
```
0x50 = SF5 0x60 = SF6 0x70 = SF7 0x80 = SF8
0x90 = SF9 0xA0 = SF10 0xB0 = SF11 0xC0 = SF12
```
**bw - 带宽**
```
0x34 = 200kHz 0x26 = 400kHz 0x18 = 800kHz 0x0A = 1600kHz
```
**cr - 编码率**
```
0x01 = 4/5 0x02 = 4/6
0x03 = 4/7 0x04 = 4/8
0x05 = Long Interleaving 4/5 0x06 = Long Interleaving 4/6
0x07 = Long Interleaving 4/7
```
##### FLRC模式参数
**br_bw - 比特率与带宽**
```
0x04 = 2.6Mbps / 2.4MHz 0x28 = 2.08Mbps / 2.4MHz
0x45 = 1.3Mbps / 1.2MHz 0x69 = 1.04Mbps / 1.2MHz
0x86 = 0.65Mbps / 0.6MHz 0xAA = 0.52Mbps / 0.6MHz
0xC7 = 0.325Mbps / 0.3MHz 0xEB = 0.26Mbps / 0.3MHz
```
**cr - 编码率**
```
0x00 = CR_1/2 0x02 = CR_3/4 0x04 = CR_1/0
```
**shaping - 调制整形**
```
0x00 = OFF (无整形)
0x10 = BT=1.0 (高斯整形)
0x20 = BT=0.5 (高斯整形)
```
**使用示例:**
```bash
radio modulation br_bw 0x4C # 设置GFSK比特率为1.0Mbps / 2.4MHz
radio modulation sf 0x70 # 设置LoRa扩频因子为SF7
radio modulation br_bw 0x45 # 设置FLRC比特率为1.3Mbps / 1.2MHz
```
**注意:** 更改立即生效。使用`radio modulation`查看当前值。
#### 数据包参数 (packet) 详细说明
##### BLE模式参数
**ConnectionState - 连接状态**
```
0 = MASTER_SLAVE 1 = ADVERTISER 2 = TX_TEST
3 = RX_TEST 4 = RXTX_TEST
```
**CrcField - CRC字段配置**
```
0 = OFF 1 = CRC_3B (3字节CRC)
```
**BlePacketType - BLE数据包类型**
```
0 = PRBS_9 1 = PRBS_15 2 = EYELONG_1_0 3 = EYELONG_0_1
4 = EYESHORT_1_0 5 = EYESHORT_0_1 6 = ALL_1 7 = ALL_0
```
**Whitening - 白化模式**
```
0x00 = ON 0x08 = OFF
```
##### GFSK模式参数
**Preamble - 前导码长度**
```
0x00 = 4bits 0x10 = 8bits 0x20 = 12bits 0x30 = 16bits
0x40 = 20bits 0x50 = 24bits 0x60 = 28bits 0x70 = 32bits
```
**SyncWordLength - 同步字长度**
```
0x00 = 1byte 0x02 = 2bytes 0x04 = 3bytes
0x06 = 4bytes 0x08 = 5bytes
```
**SyncWordMatch - 同步字匹配**
```
0x00 = OFF 0x10 = 1 0x20 = 2 0x30 = 1_2
0x40 = 3 0x50 = 1_3 0x60 = 2_3 0x70 = 1_2_3
```
**SyncWord1/2/3 - 设置同步字字节**
- 格式: `<hex_bytes>` (例如: 0x12345678)
- GFSK最大5字节
- 使用`radio packet SyncWord`显示所有已配置的同步字
**Header - 包头类型**
```
0x00 = VARIABLE (可变长度) 0x20 = FIXED (固定长度)
```
**Payload - 载荷长度**
- 范围: 1-255 字节
**Crc - CRC长度**
```
0x00 = OFF 0x10 = 1byte 0x20 = 2bytes 0x30 = 3bytes
```
**Whitening - 白化模式**
```
0x00 = ON 0x08 = OFF
```
##### LoRa模式参数
**Preamble - 前导码符号数**
- 范围: 0-255
**Header - 包头类型**
```
0x00 = VARIABLE/EXPLICIT (可变长度/显式)
0x80 = FIXED/IMPLICIT (固定长度/隐式)
```
**Payload - 载荷长度**
- 范围: 1-255 字节
**Crc - CRC模式**
```
0x00 = OFF 0x20 = ON
```
**InvertIQ - IQ反转**
```
0x40 = NORMAL (正常) 0x00 = INVERTED (反转)
```
##### FLRC模式参数
与GFSK大部分参数相同
**SyncWord1/2/3 - 设置同步字字节**
- FLRC最大4字节
**使用示例:**
```bash
radio packet Payload 64 # 设置载荷长度为64字节
radio packet Crc 0x20 # 启用2字节CRC
radio packet SyncWord1 0x1234 # 设置同步字1为0x1234
radio packet SyncWord # 显示所有同步字
```
**注意:** 使用`radio packet`不带参数可查看当前参数。
#### 波特率配置 (baudrate) 详细说明
##### BLE模式波特率
```
Index 0 = 250 Kbps
Index 1 = 500 Kbps
Index 2 = 1 Mbps
```
##### LoRa模式波特率
```
Index 0 = 216 bps
Index 1 = 1 Kbps
Index 2 = 5 Kbps
Index 3 = 10 Kbps
Index 4 = 20 Kbps
Index 5 = 61 Kbps
Index 6 = 127 Kbps
Index 7 = 203 Kbps
```
##### GFSK模式波特率
```
Index 0 = 125 Kbps
Index 1 = 250 Kbps
Index 2 = 500 Kbps
Index 3 = 1 Mbps
```
##### FLRC模式波特率
```
Index 0 = 130 Kbps
Index 1 = 260 Kbps
Index 2 = 520 Kbps
Index 3 = 1040 Kbps
```
**使用示例:**
```bash
radio baudrate # 显示当前所有模式的波特率
radio baudrate 2 # 为当前模式设置波特率索引2
```
**重要说明:**
1. 波特率索引必须对当前无线模式有效
2. 更高的波特率提供更快的数据速率但会减少传输距离
3. 更低的波特率增加传输距离但会降低数据速率
#### 配置示例
**配置 FLRC模式 :**
```bash
radio mode FLRC # 切换到FLRC模式
radio rffreq 2450000000 # 设置频率2450MHz
radio power 10 # 设置功率+10dBm
radio ramptime 10 # 设置上升时间10us
radio baudrate 2 # 设置波特率索引2 (520Kbps)
radio modulation br_bw 0x45 # 1.3Mbps / 1.2MHz
radio modulation cr 0x00 # 编码率CR_1/2
radio modulation shaping 0x10 # BT=1.0高斯整形
radio packet Preamble 0x30 # 16bits前导码
radio packet Payload 114 # 载荷114字节
radio packet Crc 0x20 # 2字节CRC
mr16 mode FIXED # 固定长度模式
mr16 fixedlen 110 # 用户数据110字节
mr16 save # 保存配置
```
---
### 3.3 命令特性
- **不区分大小写**
- **参数自动解析**: 支持十进制、十六进制 (0x前缀)
- **帮助系统**: 所有命令支持 `help` 子命令
- **实时生效**: 参数修改后立即更新硬件
- **自动刷新**: 参数变更后自动更新 LCD 显示
- **手动保存**: 需要手动使用 `mr16 save` 命令写入flash
---
### 默认配置
```c
/* MR16基本参数 */
format = MR16_FORMAT_VARIABLE // 固定长度模式
fixedLength = 110 // 用户数据长度110字节
TX_ID = 0x0001 // 发送端ID
RX_ID[0] = 0x0001 // 接收端ID通道1
RX_ID[1] = 0x0002 // 接收端ID通道2
RX_ID[2] = 0x0003 // 接收端ID通道3
RadioRole = RadioRoleTX // 默认发送端模式
/* 射频基本参数 */
radioMode = RADIOMODE_FLRC // FLRC模式
rfFrequency = 2426000000 // 频率2426MHz
txOutputPower = 13 // 发射功率+13dBm
rampTime = RADIO_RAMP_02_US // 上升时间2us
/* 波特率索引 */
baudrate.ble = RF_BAUDRATE_BLE_1M // BLE: 1Mbps
baudrate.lora = RF_BAUDRATE_LORA_005K // LoRa: 5Kbps
baudrate.gfks = RF_BAUDRATE_GFSK_125K // GFSK: 125Kbps
baudrate.flrc = RF_BAUDRATE_FLRC_130K // FLRC: 130Kbps
/* BLE调制参数 */
BLE.BitrateBandwidth = GFS_BLE_BR_1_000_BW_2_4 // 1.0Mbps / 2.4MHz
BLE.ModulationIndex = GFS_BLE_MOD_IND_0_50 // 调制指数0.50
BLE.ModulationShaping = RADIO_MOD_SHAPING_BT_0_5 // BT=0.5高斯整形
/* BLE数据包参数 */
BLE.BlePacketType = BLE_EYELONG_1_0 // Eye pattern长序列1_0
BLE.ConnectionState = BLE_ADVERTISER // 广播模式
BLE.CrcField = BLE_CRC_3B // 3字节CRC
BLE.Whitening = RADIO_WHITENING_ON // 启用白化
/* LoRa调制参数 */
LoRa.SpreadingFactor = LORA_SF12 // 扩频因子SF12
LoRa.Bandwidth = LORA_BW_0200 // 带宽200kHz
LoRa.CodingRate = LORA_CR_LI_4_7 // 编码率4/7 (Long Interleaving)
/* LoRa数据包参数 */
LoRa.PreambleLength = 12 // 前导码12符号
LoRa.HeaderType = LORA_PACKET_VARIABLE_LENGTH // 可变长度
LoRa.PayloadLength = BUFFER_SIZE // 载荷长度
LoRa.CrcMode = LORA_CRC_ON // 启用CRC
LoRa.InvertIQ = LORA_IQ_NORMAL // 正常IQ
/* GFSK调制参数 */
GFSK.BitrateBandwidth = GFS_BLE_BR_0_125_BW_0_3 // 0.125Mbps / 0.3MHz
GFSK.ModulationIndex = GFS_BLE_MOD_IND_0_50 // 调制指数0.50
GFSK.ModulationShaping = RADIO_MOD_SHAPING_BT_0_5 // BT=0.5高斯整形
/* GFSK数据包参数 */
GFSK.PreambleLength = PREAMBLE_LENGTH_32_BITS // 32bits前导码
GFSK.SyncWordLength = GFS_SYNCWORD_LENGTH_5_BYTE // 5字节同步字
GFSK.SyncWordMatch = RADIO_RX_MATCH_SYNCWORD_1 // 匹配同步字1
GFSK.HeaderType = RADIO_PACKET_VARIABLE_LENGTH // 可变长度
GFSK.PayloadLength = BUFFER_SIZE // 载荷长度
GFSK.CrcLength = RADIO_CRC_3_BYTES // 3字节CRC
GFSK.Whitening = RADIO_WHITENING_ON // 启用白化
/* FLRC调制参数 */
FLRC.BitrateBandwidth = FLRC_BR_0_260_BW_0_3 // 0.26Mbps / 0.3MHz
FLRC.CodingRate = FLRC_CR_1_2 // 编码率1/2
FLRC.ModulationShaping = RADIO_MOD_SHAPING_BT_1_0 // BT=1.0高斯整形
/* FLRC数据包参数 */
FLRC.PreambleLength = PREAMBLE_LENGTH_32_BITS // 32bits前导码
FLRC.SyncWordLength = FLRC_SYNCWORD_LENGTH_4_BYTE // 4字节同步字
FLRC.SyncWordMatch = RADIO_RX_MATCH_SYNCWORD_1 // 匹配同步字1
FLRC.HeaderType = RADIO_PACKET_VARIABLE_LENGTH // 可变长度
FLRC.PayloadLength = BUFFER_SIZE // 载荷长度
FLRC.CrcLength = RADIO_CRC_3_BYTES // 3字节CRC
FLRC.Whitening = RADIO_WHITENING_OFF // 禁用白化
/* 同步字默认值 */
GFSK.SyncWord1 = 0x12 0x34 0x56 0x78 0x9A
GFSK.SyncWord2 = 0x23 0x45 0x67 0x89 0xAB
GFSK.SyncWord3 = 0x34 0x56 0x78 0x9A 0xBC
FLRC.SyncWord1 = 0x12 0x23 0x34 0x45
FLRC.SyncWord2 = 0x56 0x67 0x78 0x89
FLRC.SyncWord3 = 0x9A 0xAB 0xBC 0xCD
```
---
## 性能指标
| 参数 | 值 |
| -------------- | --------------- |
| 最大数据包长度 | 127 字节 |
| 最大用户数据 | 123 字节 |
| DBUS 输出频率 | 71Hz (14ms间隔) |
| 失控检测延迟 | 100ms |
| UI 刷新频率 | 1Hz (RX模式) |
| 命令响应 | <10ms |
---
## ⚠️ 注意事项
### · 数据长度限制
**根据不同协议,用户数据长度有严格限制:**
```
┌─────────────────────────────────────────────────────────────────┐
│ 各协议数据长度对照表 │
├─────────────────────────────────────────────────────────────────┤
│ FLRC: 最大 120 字节 | 推荐 ≤ 110 字节 │
│ GFSK: 最大 248 字节 | 推荐 ≤ 240 字节 │
│ LoRa: 最大 249 字节 | 推荐 ≤ 240 字节 │
└─────────────────────────────────────────────────────────────────┘
```
### · ID 配置规则
| 规则 | 说明 |
|------|------|
| **有效范围** | `0x0001` - `0xFFFE` |
| **保留值** | `0x0000` `0xFFFF` (禁用通道) |
| **TX_ID** | 发送端唯一标识 |
| **RX_ID** | 接收端最多配置3个自动匹配 |
| **多机通信** | 一个TX可以被多个RX接收 一个RX可以接收至多3个TX|
```bash
# ❌ 无效配置
mr16 rxid1 0x0000 # 保留值,无效
mr16 rxid1 0xFFFF # 保留值,无效
# ✅ 有效配置
mr16 rxid1 0x1234 # 有效
mr16 rxid2 0x5678 # 有效
mr16 rxid3 0x9ABC # 有效
```
### · 失控保护
| 特性 | 说明 |
|------|------|
| **启用范围** | 仅RX端 |
| **触发条件** | 100ms 未接收有效数据 |
| **安全帧标识** | `0xFF 0x00 0xFF 0x00` (4字节) |
**安全帧示例:**
```
接收无效 100ms → 自动生成安全帧
┌─────────┬────────────────────┬──────────────────┐
│ TX_ID │ 0xFF 0x00 0xFF 0x00│ 剩余数据填充0x00 │
│ 2 bytes │ 4 bytes │ 变长 │
└─────────┴────────────────────┴──────────────────┘
```
**下游应用处理:**
```c
// 检测安全帧
if (data[2]==0xFF && data[3]==0x00 && data[4]==0xFF && data[5]==0x00) {
// RC失控执行安全动作
motor_stop();
printf("RC Failsafe Triggered!\n");
}
```
**避免冲突**: 正常数据不应包含连续的 `0xFF 0x00 0xFF 0x00` 模式
### · 通信要求
> **重要提醒**:发送端和接收端必须配置完全一致,否则无法通信!
| 参数 | 命令 | 说明 | 示例 |
| ----------------- | ----------------------- | --------------------------- | -------------------------- |
| **1. 无线协议** | `radio mode <协议>` | 双方必须使用相同协议 | `radio mode FLRC` |
| **2. 波特率** | `radio baudrate <索引>` | 同协议下必须相同 | `radio baudrate 2` |
| **3. 调制属性** | `radio modulation ...` | 关键项必须一致 | `radio modulation sf 0x70` |
| **4. 数据包属性** | `radio packet ...` | 关键项必须一致/强烈建议一致 | `radio packet Preamble 8` |
| **5. 中心频率** | `radio channel <MHz>` | 工作频率必须一致 | `radio channel 2450` |
| **6. 设备ID** | `mr16 txid/rxid <ID>` | TX端ID = RX端ID | `mr16 txid 0x1234` |
> 说明:
>
> 文档中的 `radio baudrate` 列表为开发者提供的若干示例调制参数预设,便于快速配置。用户也可以通过 `radio modulation` 命令自行精细配置调制属性。为了确保通信成功, **调制属性 modulation **和 **包属性()** 必须在发送端和接收端保持一致。
###
---
## 开发者信息
- **版本**: 2.0
- **最后更新**: 2024-12-09
- **开发团队**: MR16 Development Team
## 相关文件
- `mr16.c` - 主实现文件
- `mr16.h` - 头文件定义
- `config.c` - 配置管理
- `sx1281_driver.c` - SX1281 驱动
- `lcd.c` - LCD 驱动
---
**文档结束**