跳转至

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。