跳转至

CI14LP串口协议V2


1、协议简介

2代串口协议(UART_PROTOCOL_VER = 2)为变长帧协议,支持命令(上行0xA0/下行0xA1)、ACK回复(0xA2)、事件通知(0xA3)四种协议类型,功能覆盖语音识别结果上报、提示音播放控制、版本查询、模块配置等场景。协议由 components\msg_com\voice_module_uart_protocol_g2.c 实现。

协议参数:

  • 当前协议版本:V1.0.0(VMUP_PROTOCOL_VERSION = 1)
  • 帧头:0xA5 0xFC(小端:低字节0xA5在前)
  • 帧尾:0xFB
  • 校验:发送时自动追加2字节校验和
  • 数据区最大长度:VMUP_MSG_DATA_MAX_SIZE(默认20字节,可配置)

2、帧格式

com_msg_data_t 结构(#pragma pack(1)):

字节序 字段 类型 说明
0~1 header uint16_t 协议头,0xFCA5(小端发送A5 FC)
2~3 data_length uint16_t 数据长度
4 msg_type uint8_t 协议类型
5 msg_cmd uint8_t 协议命令
6 msg_seq uint8_t 协议序列号
7~ msg_data[] uint8_t[] 协议数据(最大20字节)
追加 chksum uint16_t 校验和(发送时自动添加)
追加 tail uint8_t 帧尾0xFB(发送时自动添加)

3、协议类型与命令

3.1 协议类型(msg_type)

类型 值 说明
VMUP_MSG_TYPE_CMD_UP 0xA0 命令类型(上行)
VMUP_MSG_TYPE_CMD_DOWN 0xA1 命令类型(下行)
VMUP_MSG_TYPE_ACK 0xA2 ACK回复类型
VMUP_MSG_TYPE_NOTIFY 0xA3 事件通知类型

3.2 协议命令(msg_cmd)

命令 值 说明
VMUP_MSG_CMD_ASR_RESULT 0x91 报告语音识别结果
VMUP_MSG_CMD_PLAY_VOICE 0x92 播放本地播报音
VMUP_MSG_CMD_GET_FLASHUID 0x93 读取FLASH的unique id序列号
VMUP_MSG_CMD_GET_VERSION 0x94 读取协议版本/SDK版本/ASR版本/播放器版本/应用版本
VMUP_MSG_CMD_RESET_MODULE 0x95 复位语音模块
VMUP_MSG_CMD_SET_CONFIG 0x96 设置音量、进入唤醒、语音开关
VMUP_MSG_CMD_NOTIFY_STATUS 0x9A 事件通知
VMUP_MSG_CMD_ACK_COMMON 0xAA 错误ACK

3.3 播放类数据字节(msg_cmd=0x92,msg_data)

数据 值 说明
VMUP_MSG_DATA_PLAY_START / PAUSE / RESUME / STOP 0x80~0x83 播放开始/暂停/继续/停止
VMUP_MSG_DATA_PLAY_BY_VOICEID 0x90 通过音频ID播放提示音
VMUP_MSG_DATA_PLAY_BY_SEMANTIC_ID 0x91 通过语义ID播放提示音
VMUP_MSG_DATA_PLAY_BY_CMD_ID 0x92 通过命令词ID播放提示音

3.4 版本类数据字节(msg_cmd=0x94,msg_data)

数据 值 说明
VMUP_MSG_DATA_VER_PROTOCOL / SDK / ASR / PREPROCESS / PLAYER 0x80~0x84 协议/SDK/ASR/预处理算法/播放器版本号
VMUP_MSG_DATA_VER_APP 0x8A 应用程序版本号

3.5 通知类数据字节(msg_cmd=0x9A,msg_data)

数据 值 说明
VMUP_MSG_DATA_NOTIFY_POWERON 0xB0 上电完成
VMUP_MSG_DATA_NOTIFY_WAKEUPENTER / WAKEUPEXIT 0xB1/0xB2 进入/退出唤醒状态
VMUP_MSG_DATA_NOTIFY_PLAYSTART / PLAYEND 0xB3/0xB4 开始播放/播放结束
VMUP_MSG_DATA_NOTIFY_LOWPOWER_TO_NORMAL 0xB5 低功耗启动完成
VMUP_MSG_DATA_NOTIFY_NORMAL_TO_LOWPOWER 0xB6 进入低功耗

3.6 设置类数据字节(msg_cmd=0x96,msg_data)

数据 值 说明
VMUP_MSG_CMD_SET_VOLUME 0x80 设置音量
VMUP_MSG_CMD_SET_ENTERWAKEUP 0x81 设置进入唤醒状态
VMUP_MSG_CMD_SET_MUTE 0x83 设置语音开关

3.7 ACK错误码

错误码 值 说明
VMUP_MSG_ACK_ERR_NONE 0x0 功能正确
VMUP_MSG_ACK_ERR_NOSUPPORT 0xFE 不支持的功能

4、示例

1) 主控下发”通过命令词ID播放提示音”(ID=10):

帧数据:A5 FC 06 00 A1 92 01 92 0A 00 [chksum_l chksum_h] FB
字段解析:header=0xFCA5, data_length=6, msg_type=0xA1(下行命令),
         msg_cmd=0x92(播放提示音), msg_seq=0x01,
         msg_data[0]=0x92(通过命令词ID播放), msg_data[1..2]=0x0A(命令词ID)

2) 模块上报识别结果(命令词ID=10,识别得分80):

帧数据:A5 FC 06 00 A0 91 01 0A 50 00 [chksum_l chksum_h] FB
字段解析:msg_type=0xA0(上行命令), msg_cmd=0x91(识别结果),
         msg_data[0..1]=命令词ID, msg_data[2]=识别得分

3) SDK内部接口调用(应用层扩展通知):

#include "voice_module_uart_protocol_g2.h"

//发送事件通知(如自定义通知事件)
vmup_send_notify(VMUP_MSG_DATA_NOTIFY_WAKEUPENTER);

4) 串口中断接收解析(SDK内部流程):

//UART接收中断中调用,逐字节解析
void UART1_IRQHandler(void)
{
    if (uart_mask_irq_state(UART1, UART_RX_IRQ))
    {
        unsigned char rxdata = uart_rx_byte(UART1);
        vmup_receive_packet(rxdata);
        uart_clear_irq(UART1, UART_RX_IRQ);
    }
}

5、其它

  • 协议初始化:SDK上电流程中调用 vmup_communicate_init()(含协议串口初始化),波特率由 user_config.h 的 UART_PROTOCOL_BAUDRATE 配置。
  • 用户自定义命令请从 VMUP_MSG_CMD_USER_START(0xB0)开始扩展。
  • 通知类事件(进入唤醒、播放结束等)是否上报可在SDK配置中裁剪,减少串口流量。

6、API 参考

本协议实现位于 components\msg_com\voice_module_uart_protocol_g2.c,接口声明于 components\msg_com\voice_module_uart_protocol_g2.h。