跳到主要内容

MSP 扩展

Betaflight 包括 MultiWii 串行协议 (MSP) 的许多扩展。本文档描述了 这些扩展以便第三方工具可以识别 Betaflight 固件并做出适当的反应。

发出 MSP_API_VERSION 命令以查明固件是否支持它们。

模式范围

MSP_MODE_RANGES

MSP_MODE_RANGES 从飞控返回当前辅助模式设置。应该调用它 在对配置进行任何修改之前。

该消息为飞控中可用的每个“插槽”返回一组 4 个无符号字节。数量 槽位应该根据返回消息的大小来计算。

命令消息 ID方向笔记
MSP_MODE_范围3434前往FC执行此命令后,FC 为每个辅助模式“插槽”返回 4 个字节的块

未分配的槽具有 rangeStartStep == rangeEndStep。每个元素包含以下字段。

数据类型笔记
永久IDuint8有关永久 id 的定义,请参阅 Modes.md
辅助频道索引uint8辅助开关编号(从 0 开始索引)
范围开始步骤uint8此元素在 25 个“块”中的起始值,其中 0 == 900 且 48 == 2100
范围结束步骤uint8此元素在 25 个“块”中的最终值,其中 0 == 900 且 48 == 2100

因此,对于具有 40 个插槽的 Betaflight 固件,将返回 160 字节以响应 MSP_MODE_RANGES。

MSP_MODE_RANGES_EXTRA

MSP_MODE_RANGES_EXTRA 从飞控返回额外的模式设置参数。应该调用它 在对配置进行任何修改之前与 MSP_MODE_RANGES 一起使用。

该消息返回额外元素的数量,后跟航班中可用的每个“时隙”的一组字节 控制器。槽数应与 MSP_MODE_RANGES 相同,根据返回的大小计算得出 消息和每组的字节数。

命令消息 ID方向笔记
MSP_MODE_RANGES_EXTRAMSP_MODE_RANGES_EXTRA238238前往FC

返回消息前面带有每个元素的字节数(3 个字节)。每个元素包含 以下字段:

数据类型笔记
永久IDuint8有关永久 id 的定义,请参阅 Modes.md
模式逻辑uint80 = 逻辑与; 1 = 逻辑或
链接到uint8此模式链接到的永久 ID。

因此,对于具有 20 个插槽的 Betaflight 固件,将返回 61 个字节(包括前置大小)以响应 MSP_MODE_RANGES_EXTRA。

MSP_SET_MODE_RANGE

MSPSET_MODE_RANGE 用于通知飞控 辅助模式设置。客户端_必须返回所有辅助 元素,包括那些已被禁用或未定义的元素 为所有辅助时隙发送此消息。

命令消息 ID方向
MSP_SET_MODE_RANGEMSP_SET_MODE_RANGE35

|数据|类型 |笔记| | ---------------- | -----| -------------------------------------------------------------------------------- ||序列号 | uint8 |单调递增的 ID,从 0 到槽数 -1 | |永久ID | uint8 |有关永久 id 的定义,请参阅 Modes.md | |辅助频道索引 | uint8 |辅助通道编号(从 0 开始索引)| |范围开始步骤 | uint8 |此元素在 25 个“块”中的起始值,其中 0 == 900 且 48 == 2100 | |范围结束步骤 | uint8 |此元素在 25 个“块”中的最终值,其中 0 == 900 且 48 == 2100 |

实施说明

  • 客户端不应假设可用插槽的数量。相反,应该计算这个数字 将 MSP_MODE_RANGES 消息的大小除以返回的数据元素的大小(4 个字节);
  • 客户应确保所有更改的项目都返回给飞控,包括那些 开关或量程已被禁用;
  • 必须为所有未使用的槽返回“null”,除了序列 ID 之外的所有值都设置为 0 根据初始消息计算出的最大时隙数。

调整范围

MSP_ADJUSTMENT_RANGES

MSP_ADJUSTMENT_RANGES 返回当前调整范围设置 飞控。应该在任何修改之前调用它 根据配置进行。

该消息为每个“槽”返回一组 6 个无符号字节 在飞控中可用。插槽数量应为 根据返回消息的大小计算。

命令消息 ID方向笔记
MSP_调整范围5252前往FC执行此命令后,FC 将为每个调整范围“时隙”返回 6 个字节的块

未分配的槽具有 rangeStartStep == rangeEndStep。每个元素包含以下字段。

数据类型笔记
调整状态索引uint8见下文
辅助频道索引uint8用于激活调节的辅助通道编号(从 0 开始索引)
范围开始步骤uint8此元素在 25 个“块”中的起始值,其中 0 == 900 且 48 == 2100
范围结束步骤uint8此元素在 25 个“块”中的最终值,其中 0 == 900 且 48 == 2100
调节功能uint8见下文
auxSwitchChannelIndex辅助开关频道索引uint8用于执行功能的辅助通道编号(从 0 开始索引)

因此,对于具有 12 个插槽的 Betaflight 固件,将返回 72 字节以响应 MSP_ADJUSTMENT_RANGES,

MSP_SET_ADJUSTMENT_RANGE

MSPSET_ADJUSTMENT_RANGE 用于通知飞控 调节范围设置。客户端_必须返回所有调整范围 元素,包括那些已被禁用或未定义的元素 为所有调整范围时隙发送此消息。

命令消息 ID方向
MSP_SET_ADJUSTMENT_RANGEMSP_SET_ADJUSTMENT_RANGE53
数据类型笔记
序列号uint8单调递增的 ID,从 0 到槽数 -1
调整状态索引uint8见下文
辅助频道索引uint8辅助通道编号(从 0 开始索引)
范围结束步骤uint8此元素在 25 个“块”中的最终值,其中 0 == 900 且 48 == 2100
调节功能uint8见下文
auxSwitchChannelIndex辅助开关频道索引uint8用于执行功能的辅助通道编号(从 0 开始索引)

MSP_SET_1WIRE

MSP_SET_1WIRE 用于启用串行 1 线直通 注意:最好在武装时禁用此功能

命令消息 ID方向
MSP_SET_1WIRE243243前往FC
数据类型笔记
ESC IDuint8单调递增的 ID,从 0 到 esc 数量 -1

####调整指数

FC维护每个调整状态索引的内部状态,当前维护4个同时调整状态。多个调节范围 可以配置为使用相同的状态,但应注意不要发送多个调整范围,否则在活动时会发生冲突。

例如使用同一插槽配置两个相同的调整范围会发生冲突,但配置使用相同插槽的两个调整范围 每个通道只有一半的可能通道范围,但使用相同的 adjustmentStateIndex 不会发生冲突。

FC 不检查冲突。

调整功能

可以进行许多调整,它们的数量及其用途可以在“飞行调整”部分中的 cli adjrange 命令的文档中找到。

实施说明

  • 客户端不应假设可用插槽的数量。相反,应该计算这个数字 将 MSP_ADJUSTMENT_RANGES 消息的大小除以返回的数据元素的大小(6 字节);
  • 客户应确保所有更改的项目都返回给飞控,包括那些 开关或量程已被禁用;
  • 必须为所有未使用的槽返回“null”,其中除序列 ID 之外的所有值都设置为 0, 最多为根据初始消息计算出的最大时隙数。

已弃用的 MSP

以下 MSP 命令替换为 MSP_MODE_RANGES 和 MSP_SET_MODE_RANGE 扩展,并且不被 Betaflight。

  • MSP_BOX
  • MSP_SET_BOX

另请参阅

Modes 描述了 Betaflight 的用户可见实现 模式扩展。