CI14LP串口协议V3¶
1、协议简介¶
3代串口协议(UART_PROTOCOL_VER = 3)为用户自定义格式的简化协议(UDF,User Defined Frame),帧结构可通过宏裁剪(帧头字节数、校验字节数、校验方式均可配置),适合与固定格式主控对接的场景。协议由 components\msg_com\voice_module_uart_protocol_g3.c 实现。
默认配置:
- 帧头:1字节,0xA5(
UDF_MSG_HEAD_NUM= 1时可配置为2字节0xA5FC) - 帧尾:1字节,0xFB(
UDF_MSG_TAIL) - 校验:1字节累加和(
UDF_MSG_CHECKSUM_NUM=1,UDF_MSG_CHECKSUM_MODE=1累加和;可选无校验或CRC16)
2、帧格式¶
sys_msg_com_data_t 结构(#pragma pack(1)):
| 字段 | 类型 | 说明 |
|---|---|---|
| frameHeader | uint8_t | 帧头0xA5 |
| fixFrame0[2] | uint8_t[2] | 保留字段(长度1~10可配) |
| funID | uint16_t | 功能字段:识别时为命令词ID;播报时为播报ID;DOA时为角度;多唤醒词切换时为切换ID;或上电/唤醒/休眠状态等 |
| fixFrame1[2] | uint8_t[2] | 保留字段(长度1~10可配) |
| checkSum | uint8_t | 校验和(累加和) |
| frameTail | uint8_t | 帧尾0xFB |
3、通知类事件(funID取值)¶
| 事件 | 值 | 说明 |
|---|---|---|
| UDF_MSG_DATA_NOTIFY_POWERON | 0xB000 | 上电完成 |
| UDF_MSG_DATA_NOTIFY_WAKEUPENTER | 0xB100 | 进入唤醒状态 |
| UDF_MSG_DATA_NOTIFY_WAKEUPEXIT | 0xB200 | 退出唤醒状态 |
| UDF_MSG_DATA_NOTIFY_PLAYSTART | 0xB300 | 开始播放提示音 |
| UDF_MSG_DATA_NOTIFY_PLAYEND | 0xB400 | 播放提示音结束 |
| UDF_MSG_DATA_NOTIFY_LOWPOWER_TO_NORMAL | 0xB5 | 低功耗启动完成 |
| UDF_MSG_DATA_NOTIFY_NORMAL_TO_LOWPOWER | 0xB6 | 进入低功耗 |
注:通知事件的notify_event为0时不上报。
4、API¶
| 函数名 | 描述 |
|---|---|
| udf_communicate_init | 3代串口协议初始化 |
| udf_receive_packet | 串口RX中断接收协议(逐字节解析) |
| udf_send_notify | 发送通知类协议(通知关键字节) |
| udf_send_asr_result_cmd | 发送识别结果命令(命令词句柄+得分) |
| userapp_deal_cmd | 应用层命令处理 |
| userapp_deal_com_msg | 应用层协议消息处理 |
| write_ota_mcu_status | 写OTA升级的MCU状态(NVDATA保存) |
5、示例¶
1) 模块识别到命令词后上报(funID为命令词ID):
#include "voice_module_uart_protocol_g3.h"
//SDK识别流程内部调用,cmd_handle为命令词句柄,asr_score为识别得分
udf_send_asr_result_cmd(cmd_handle, 80);
2) 发送状态通知:
#include "voice_module_uart_protocol_g3.h"
//发送"进入唤醒状态"通知
udf_send_notify(UDF_MSG_DATA_NOTIFY_WAKEUPENTER);
3) 串口中断接收解析(SDK内部流程):
void UART1_IRQHandler(void)
{
if (uart_mask_irq_state(UART1, UART_RX_IRQ))
{
unsigned char rxdata = uart_rx_byte(UART1);
udf_receive_packet(rxdata);
uart_clear_irq(UART1, UART_RX_IRQ);
}
}
6、其它¶
- 帧头字节数(
UDF_MSG_HEAD_NUM)、校验字节数(UDF_MSG_CHECKSUM_NUM)、校验方式(UDF_MSG_CHECKSUM_MODE:0无校验/1累加和/2CRC16)均可在头文件中配置,适配不同主控的固定格式。 - 3代协议当前版本为预留形态(源码标注”当前版本暂未使用”),选用前请与芯片厂商确认支持状态。
7、API 参考¶
本协议实现位于 components\msg_com\voice_module_uart_protocol_g3.c,接口声明于 components\msg_com\voice_module_uart_protocol_g3.h。