752 lines
22 KiB
Markdown
752 lines
22 KiB
Markdown
# 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 到 0xFFFE(0x0000和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 驱动
|
||
|
||
---
|
||
|
||
**文档结束** |