# 描述
# 简介
本协议是模块与用户通过串口之间的通讯协议。 模块接口为 TTL 接口。
# 串口参数
波特率 | 数据位 | 奇偶校验 | 停止位 | 流控 |
---|---|---|---|---|
115200 | 8 | 无 | 1 | 无 |
# 数据
本协议所有数据都为大端。
# 协议格式
# 消息格式
字节 | 值 | 含义说明 |
---|---|---|
0 | 0xA5 | 同步头 |
1 | 0x01 | 用户ID |
2 | 0xXX | 消息类型 |
3~4 | 0xXXXX | 消息数据长度 |
5~6 | 0xXXXX | 消息ID |
7~n | 消息数据 | 消息数据 |
n+1 | 0xXX | 内部校验码 |
# 通信规则
- 双向通信,进行一问一答式通信;
- 不分主从机,双方都可向对方发送请求信息;
- 降噪模块通电启动后,会向上位机发送握手信号,确定与对方串口通信是否正常;在未接收到响应时,会每隔500ms发送一次握手请求信号;
- 接收方接到请求后需在50ms内发送响应;
# 通信格式
通信格式定义了握手消息,设备消息,主控消息,确认消息。下面将分类详述:
分类 | 同步头 | 用户ID | 消息类型 | 消息长度 | 消息ID | 消息数据 | 校检码 | ||||||||
字节 | 0 | 1 | 2 | 3~4 | 5~6 | 7 | 8 | 9 | 10 | 11 | |||||
握手请求 | 0xA5 | 0x01 | 0x01 | 见下文解释 | 见下文解释 | 0xA5 | 0x00 | 0x00 | 0x00 | 见下文解释 | |||||
字节 | 0 | 1 | 2 | 3~4 | 5~6 | 7~m | m+1 | ||||||||
设备消息 | 0xA5 | 0x01 | 0x04 | 同上 | 同上 | 消息体 | 同上 | ||||||||
字节 | 0 | 1 | 2 | 3~4 | 5~6 | 7~m | m+1 | ||||||||
主控消息 | 0xA5 | 0x01 | 0x05 | 同上 | 同上 | 主控消息 | 同上 | ||||||||
字节 | 0 | 1 | 2 | 3~4 | 5~6 | 7 | 8 | 9 | 10 | 11 | |||||
确认消息 | 0xA5 | 0x01 | 0xff | 同上 | 同上 | 0xA5 | 0x00 | 0x00 | 0x00 | 同上 |
消息长度:
数据格式中3~4字节为消息数据长度,消息长度编码为小端模式,即第3字节存储低字节,第4字节存储高字节。如握手请求消息中消息数据有4字节,则消息长度为4,编码到3~4字节就是0x04 0x00
消息ID:
数据格式中5~6字节为消息ID,与消息长度类似,也是小端模式编码。可以使用消息ID过滤因超时重发导致的重复消息。两字节长度的消息ID取值0-65535,所以在实际使用中需要循环使用,具体实现可以参考Android平台上的源码实现。
校检码:
数据格式中每种数据类型的最后一个字节都是校检码,用于检验串口传输的正确性。其计算方式为除校检码字节外所有字节求和取反并加1。公式如下:
checkcode = ~sum(字节0+字节2+...+字节n) + 1
编码格式:
消息中字符串类型的数据编码格式为UTF-8。
# 消息类型
上位机与R818降噪模块的通信见下图:
通信消息类型包括握手消息、主控消息、设备消息和确认消息:
握手消息
握手消息是用来判断上位机与降噪模块间串口通信检测的。降噪模块与上位机完成硬件连接并通电后,降噪模块会不断构造握手消息发送到上位机,上位机按要求返回确认消息,降噪模块收到确认消息后确认串口通信正常,开始后续交互。
主控消息
主控消息是上位机发送给R818降噪模块的消息,格式为JSON。内容为上位机发送给降噪模块的控制指令,如更换唤醒词、设置固定波束等。
设备消息
设备消息是降噪模块主动上报给上位机的消息,格式为JSON,内容为降噪模块上报的事件信息,如唤醒事件,唤醒词内容等。
确认消息
确认消息是一个特殊的消息类型,它是对其他类型消息的确认,它的消息ID与其要确认的消息的ID相同。 如一个消息的消息ID为0x9527,那对应的确认消息的消息ID也应该是0x9527。
# 术语
# 唤醒
用户通过指定唤醒词的语音信号可以唤醒模块,也可设置模块开机自动唤醒。模块唤醒会上报唤醒信息,该信息包括唤醒角度、唤醒得分、所属波束、唤醒词等。模块唤醒前处于待机状态,无音频输出。模块唤醒后开始进入正常运行状态,输出音频。
# 波束
本文中的波束是指模块通过阵列麦克风的不同拾音差异,通过算法滤波输出的某个特定方向音频,该音频拾取指定角度范围内的声源,抑制其它角度声源的影响。
本模块有三种配套麦克风阵列。对应波束号与角度关系如下:
1、 环形六麦波束
2、 线性四麦波束
3、线性六麦波束
注: 波束指向方向仅为拾音方向, 并不会影响和改变唤醒时的角度等任何信息。
# 协议内容
# 主控消息
主控消息是上位机发送给R818降噪模块的消息,格式为JSON。 主控消息根据内部字段type的不同,控制R818降噪模块的不同功能。
唤醒词更换(浅定制)
type为wakeup_keywords
{ "type": "wakeup_keywords", "content": { "keyword": "xiao3 fei1 xiao3 fei1", // 唤醒词 "threshold": "900", // 阈值 } }
PS:如需深定制,则通过更新固件方式加载
手动唤醒
type为 manual_wakeup
{ "type": "manual_wakeup", "content": { "beam": 1 //波束序号,见第三章波束说明 } }
PS:如需实现固定波束功能,则在每次设备唤醒后发送手动唤醒指令
麦克风阵列切换
type为 switch_mic
{ "type": "switch_mic", "content": { "mic": "mic4" // 麦克风阵列类型 } }
mic:麦克风阵列类型,mic4:线性4麦,mic6:线性6麦, mic6_circle:环形6麦
配置更改
type为 setting, 该操作有风险,请熟知参数意义下执行
{ "type": "setting", "content": [{ "group": "common", // ini文件中section "key": "debug", // ini文件中section下的key "value": "0", // key对应的value }] }
具体有哪些可配,请参考 user_cfg.ini
获取版本信息
type为 setting,
{ "type": "verison" }
# 设备消息
唤醒结果事件
type为aiui_event,代表AIUI结果返回,总体结构示例:
{ "type": "aiui_event", "content": { "eventType":4, // 事件类型 4 => 唤醒 "arg1":0, // 唤醒波束 "arg2":0, // 未启用 "info":{}, // {"keyword":"xiao3 wei1 xiao3 wei1", .... } 唤醒信息 "result":{} //唤醒词 } }
eventType:事件类型,4-唤醒
arg1:参数1,唤醒波束,具体取值参见3.2波束章节说明
arg2:参数2,未启用,忽略
info:唤醒结果,包括唤醒词和唤醒角度。如 {"keyword":"xiao3 wei1 xiao3 wei1", }
← 产品规格书 AIUI USB 声卡开发套件 →