BetaFlight代码解析(15)—通信系统

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

系统架构

该通信系统基于分层架构构建,抽象化了硬件差异,并为所有串行通信需求提供了统一的接口。

串口类型及识别

Betaflight 支持多种类型的串行通信接口,每种接口都由一个唯一的serialPortIdentifier_e值标识,并通过一个通用的抽象层进行管理。

港口类型分类

端口类型标识符范围描述
USB VCPSERIAL_PORT_USB_VCP(20)通过 USB 的虚拟 COM 端口
UART/USART50-69硬件 UART 外设
SoftSerial30-31基于定时器的软件 UART
LPUART40岁以上低功耗UART外设
PIOUART70-79基于 PIO 的 UART(RP2040)

端口功能分配

每个串口都可以通过serialPortFunction_e位掩码分配一个或多个功能:

端口配置和共享

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

配置结构

端口共享规则

该系统强制执行特定的端口共享规则,以防止冲突:

  1. MSP共享:MSP可以通过遥测协议或黑盒日志共享数据。
  2. RX/遥测共享:串口RX可以与遥测共享(RX使用RX线,遥测使用TX线)
  3. VTX MSP:必须与 RX 或 MSP 串口共享
  4. 验证:所有共享组合均经过验证。isSerialConfigValid()

端口开放和运行时管理

串行系统提供了一个统一的接口,用于打开和管理串行端口,而无需考虑底层硬件实现。

波特率管理

该系统支持一组预定义的波特率,并具备自动选择功能:

指数波特率常用用法
波特率自动0自动检测
BAUD_96009600GPS,一些遥测技术
波特率_5760057600GPS默认设置
波特率_115200115200MSP 默认
BAUD_250000250000高速协议
BAUD_921600921600高性能链路

虚拟表格模式

该通信系统采用虚拟表模式,在不同的串行实现中提供一致的 API,同时允许针对特定驱动程序进行优化。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值