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。