Betaflight 的通信系统为所有串行通信接口提供了一个统一的抽象层。该系统管理多种类型的串行端口(UART、软件串行、USB VCP),处理不同功能之间的端口共享,并为协议实现提供一致的 API。该系统支持与外部设备通信,包括飞行控制器、遥测接收器、GPS 模块和视频发射器。
系统架构
该通信系统基于分层架构构建,抽象化了硬件差异,并为所有串行通信需求提供了统一的接口。

串口类型及识别
Betaflight 支持多种类型的串行通信接口,每种接口都由一个唯一的serialPortIdentifier_e值标识,并通过一个通用的抽象层进行管理。
港口类型分类
| 端口类型 | 标识符范围 | 描述 |
|---|---|---|
| USB VCP | SERIAL_PORT_USB_VCP(20) | 通过 USB 的虚拟 COM 端口 |
| UART/USART | 50-69 | 硬件 UART 外设 |
| SoftSerial | 30-31 | 基于定时器的软件 UART |
| LPUART | 40岁以上 | 低功耗UART外设 |
| PIOUART | 70-79 | 基于 PIO 的 UART(RP2040) |
端口功能分配
每个串口都可以通过serialPortFunction_e位掩码分配一个或多个功能:

端口配置和共享
串行系统支持复杂的端口共享机制,允许多个功能在特定条件下使用同一个物理端口。
配置结构

端口共享规则
该系统强制执行特定的端口共享规则,以防止冲突:
- MSP共享:MSP可以通过遥测协议或黑盒日志共享数据。
- RX/遥测共享:串口RX可以与遥测共享(RX使用RX线,遥测使用TX线)
- VTX MSP:必须与 RX 或 MSP 串口共享
- 验证:所有共享组合均经过验证。
isSerialConfigValid()
端口开放和运行时管理
串行系统提供了一个统一的接口,用于打开和管理串行端口,而无需考虑底层硬件实现。

波特率管理
该系统支持一组预定义的波特率,并具备自动选择功能:
| 指数 | 波特率 | 常用用法 |
|---|---|---|
| 波特率自动 | 0 | 自动检测 |
| BAUD_9600 | 9600 | GPS,一些遥测技术 |
| 波特率_57600 | 57600 | GPS默认设置 |
| 波特率_115200 | 115200 | MSP 默认 |
| BAUD_250000 | 250000 | 高速协议 |
| BAUD_921600 | 921600 | 高性能链路 |
虚拟表格模式
该通信系统采用虚拟表模式,在不同的串行实现中提供一致的 API,同时允许针对特定驱动程序进行优化。

这种设计允许应用程序使用串行端口而无需了解底层实现细节,同时每个驱动程序都可以为硬件特定功能(如 DMA 传输)提供优化的实现。
256

被折叠的 条评论
为什么被折叠?



