跳转至

CI14LP串口协议V1


1、协议简介

1代串口协议(UART_PROTOCOL_VER = 1)为定长9字节帧协议,结构简单、解析方便,适合简单控制场景。协议由 components\msg_com\voice_module_uart_protocol_g1.c 实现。

协议参数:

  • 默认波特率:由 user_config.h 中 UART_PROTOCOL_BAUDRATE 配置(常用9600/115200)
  • 帧头:0xA5 0xFA
  • 帧尾:0xFB
  • 校验和:累加和(header0 ~ data1逐字节求和)

2、帧格式

字节序 字段 说明
0 header0 协议头,固定0xA5
1 header1 协议头,固定0xFA
2 id 协议序列号
3 cmd 协议命令
4 data0 数据字节1
5 data1 数据字节2
6 chksum 校验和(header0~data1累加)
7 end 帧尾,固定0xFB

注:com_msg_data_t(1代协议结构体)共9字节(含字节8保留),收发按上述字段对齐。


3、协议命令

3.1 CI发送(模块→主控,CMD_CI_SEND)

命令 值 说明
CI_TX_ASR 0x81 报告语音识别结果(data0/data1携带命令词ID)
CI_TX_UNWAKEN 0x82 退出唤醒状态通知
CI_TX_VER 0x83 返回应用程序版本号

(0x80为起始标志CI_TX_START,0x84之后为保留CI_TX_REV/CI_TX_END)

3.2 CI接收(主控→模块,CMD_CI_RECIVED)

命令 值 说明
CI_RX_ECHO_EN 1 是否回复收到的数据
CI_RX_CHK_EN 2 是否使用校验
CI_RX_PLAY_INDEX 3 通过命令词ID播放提示音
CI_RX_RESET 4 复位语音模块
CI_RX_UNWAKE_CMD 5 设置退出唤醒状态
CI_RX_MUTE 6 设置语音开关
CI_RX_VOLSET 7 设置音量
CI_RX_GETVER 8 读应用程序版本号
CI_RX_WAKEN 10 设置进入唤醒状态
CI_RX_CHANGE_GROUP 11 切换命令词模型组

4、示例

1) 主控通过串口发送”播放命令词ID为10的提示音”:

帧数据:A5 FA 00 03 0A 00 15 FB
字段解析:header0=0xA5, header1=0xFA, id=0x00,
         cmd=CI_RX_PLAY_INDEX(0x03), data0=0x0A(命令词ID=10), data1=0x00,
         chksum=0xA5+0xFA+0x00+0x03+0x0A+0x00=0x1B(截断为1字节), end=0xFB

2) 模块识别到命令词ID=10后上报识别结果:

帧数据:A5 FA 01 81 0A 00 93 FB
字段解析:cmd=CI_TX_ASR(0x81), data0=0x0A(命令词ID=10)

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

//UART接收中断中调用,逐字节状态机解析(SOP_STATE1 -> SOP_STATE2 -> DATA_STATE)
void UART1_IRQHandler(void)
{
    if (uart_mask_irq_state(UART1, UART_RX_IRQ))
    {
        unsigned char rxdata = uart_rx_byte(UART1);
        uart_int_rx_handle(rxdata);
        uart_clear_irq(UART1, UART_RX_IRQ);
    }
}

5、其它

  • 协议版本选择:user_config.h 中配置 UART_PROTOCOL_VER 为1,并配置协议串口号(UART_PROTOCOL_NUMBER)与波特率(UART_PROTOCOL_BAUDRATE)。
  • 波特率校准:上电后主控连续发送0x55,模块基于波特率自适应机制完成校准,具体参见API指南-SDK波特率校准功能说明。
  • 新项目建议使用2代串口协议(功能更全、支持ACK/通知机制)。

6、API 参考

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