# MT8516 开发套件使用指南
# 产品介绍
# 概述
MT8516开发套件是一款基于MTK平台MT8516处理器和科大讯飞环形 6麦阵列结构的语音整体解决方案。此外还提供红外、串口、ZigBee 等多种接口,小巧易扩展,搭载 iFLYOS 生态,提供海量内容服务与定制化接口,满足多种远、近场语音交互场景。
# 产品特性
# 远/近场拾音
方案前端采用科大讯飞6麦克风阵列,能够实现家居场景 5-10m 左右的用户指令音频拾取,通过新一代神 经网络降噪算法对拾取音频进行处理,提供高品质降噪后音频给到后端,以保障唤醒、识别效果。
# 噪声抑制
该功能基于科大讯飞6麦克风阵列中的声源定位和波束增强等算法特性,通过采集指令声源(控制设备 的发音人)所在波束范围内的声音,抑制或者不处理其它波束所接收的声音,以提升采集声音的效果, 为后续唤醒和命令词识别效果提供保障。
# 回声消除
支持用户交互过程中,实现一次唤醒,多轮交互的控制方式,即用户可以中断播报进程进行下一轮交 互,让交互更加自然,流畅。
# 自定义唤醒词
浅定制唤醒词:通过iFLYOS开放平台使用免费文本训练功能,一秒生成,快速上线。
生成地址:https://www.iflyos.cn/custom-awake-words
深定制唤醒词:唤醒效果行业领先,闭环优化训练,不断迭代优化效果。
服务流程:请联系商务黄光辉,手机:18110901149 ,邮箱:ghhuang@iflytek.com
# 自定义发音人
提供十几个精品发音人,可根据产品定位免费选用;并提供发音人定制服务,给你的产品独一无二的音库。
定制音库服务及流程:请联系商务黄光辉,手机:18110901149 ,邮箱:ghhuang@iflytek.com
# 支持二次开发
可通过更换client id的方式实现自定义技能,设备端底层开放常用接口,支持二次开发。
# 搭载iFLYOS平台
自研发优秀技能超200多款,20 余个智能家居品牌设备控制,海量音频内容。高自定义,可通过前置拦截器,连接品牌自己的特有服务或其他第三方服务。
# 儿童模式
提供儿童模式切换,在儿童模式下有专属的发音人、闲聊、儿歌、教育资源等。
#
# 硬件说明
# 芯片框图
产品属性 | 芯片信息 |
---|---|
设备系统 | Linux操作系统 |
扬声器 | 1.77英寸全频4Ω,额定功率3W |
麦克风 | 6麦 |
内核 | 四核心64位ARM®Cortex-A35,主频达1.3GHz |
内存 | 1Gbit |
闪存 | 1Gbit |
WiFi | 支持WiFi 802.11 b/g/n和蓝牙4.0,支持蓝牙和WLAN的2.4GHz天线间的单天线共享 |
连接通道 | USB 2.0 OTG、10/100 以太网 MAC、具有 ARC 的 HDMI 1.4 Tx、SPDIF 和嵌入式两声道音频 DAC 和 ADC |
接口 | 支持I2Sx2,8个TDM通道和2个PDM输入,适用于远场(Far -field)麦克风语音控制 |
特点 | 提高了同步语音、数据和音频传输的整体质量。占板面积小,功耗低,极大减少了PCB布局资源。 |
# 系统设计框图
硬件规格:
- 产品尺寸:97mm×97mm×92mm
- 重量:160g
- CPU:MT8516
- 内存:外置128/256MB DDR3 + 外置128/256MB FLASH
- 麦克风阵列:6 Amics 远场设计
- Network:无线网络802.11 b/g/n
- Bluetooth:BT4.0+BLE
- 音频输出:4Ω3W Speaker
- LED:彩色 RGB*8
- 电源输入:USB-Type C,5V
- 视频输出:不支持
软件规格:
- 系统:Linux
- 内核:Kernel4.4
- 语音操作系统:iFLYOS
- 支持BT、A2DP音乐
- 支持BLE配网WiFi网络
# 开发套件
# 整机
# 灯光按键板
序号 | 接口名称 | 说明 |
---|---|---|
1 | USB接口 | 5V/1.5A DC适配器,TYPEC接口 |
2 | IR 红外 IN/OUT | 红外遥控模块接口 |
3 | 耳机输出接口 | 3.5mm耳机连接器 |
4 | 喇叭输出接口 | 喇叭音腔连接器,4欧姆 |
5 | UART | 串口调试使用/用于扩充zigbee模组 |
6 | 天线座子 | 连接天线 |
序号 | 接口名称 | 说明 |
---|---|---|
1 | MIC | 6 Amic |
2 | 按键与RGB接口1 | 连接按键与灯板 |
3 | 按键与RGB接口2 | 按键板与灯板备用的扩展口 |
4 | 板载天线 | 连接天线 |
# USB小板&按键小板&喇叭
- 下载小飞在线APP并登陆
https://www.iflyos.cn/download/app/
- 长按设备配网键5秒,听到语音和黄色呼吸灯提示后松手,进入配网模式
在小飞在线APP点击添加设备,点击连接
输入账号密码,等待设备联网即可
完成设备联网后,你可以说“蓝小飞,今天天气怎么样”进行语音交互。
# 按键说明
- 配网键——长按5秒:进入配网模式
- MIC禁音键——单击:禁用/启用麦克风
- 播放/暂停键——单击:暂停/继续播放音频
- VOL+键——单击:增加音量
- VOL-键——单击:减少音量
- 在配网模式下,长按音量+键/音量-键5秒,设备恢复出厂模式
# 灯光说明
- 黄色灯光过渡为青色灯光后消失:联网成功
- 青色:唤醒→正在听
- 蓝色:思考中
- 红色:联网失败/禁用或启用麦克风/系统错误
- 黄色:固件升级中
# 串口通信
# 概述
套件支持通过串口与上位机进行通信,您可以通过串口协议实现业务数据传输。串口不限制传输数据的具体报文,用户可以按照自己需求来定义、传输。详情请参考如下示例。
通信协议要求
设备节点: /dev/ttyS1
数据长度: 8位
奇偶校验位:无
停止位: 1位
波特率: B921600
# 串口示例
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#include <termios.h>
#include <errno.h>
#include <string.h>
#define DEVICE "/dev/ttyS1"
//打开串口并初始化设置
int init_serial(void) {
int serial_fd = open(DEVICE, O_RDWR | O_NOCTTY | O_NDELAY);
if (serial_fd < 0) {
perror("open serial port failed!");
return -1;
}
//串口主要设置结构体termios <termios.h>
struct termios options;
/**1. tcgetattr函数用于获取与终端相关的参数。
*参数fd为终端的文件描述符,返回的结果保存在termios结构体中
*/
tcgetattr(serial_fd, &options);
/**2. 修改所获得的参数*/
options.c_cflag |= (CLOCAL | CREAD); //设置控制模式状态,本地连接,接收使能
options.c_cflag &= ~CSIZE; //字符长度,设置数据位之前一定要屏掉这个位
options.c_cflag &= ~CRTSCTS; //无硬件流控
options.c_cflag |= CS8; //8位数据长度
options.c_cflag &= ~CSTOPB; //1位停止位
options.c_iflag |= IGNPAR; //无奇偶检验位
options.c_oflag = 0; //输出模式
options.c_lflag = 0; //不激活终端模式
cfsetospeed(&options, B921600); //设置波特率
/**3. 设置新属性,TCSANOW:所有改变立即生效*/
tcflush(serial_fd, TCIFLUSH); //溢出数据可以接收,但不读
tcsetattr(serial_fd, TCSANOW, &options);
return serial_fd;
}
/**
*串口接收数据
*@fd:串口描述符
*@data:接收数据的缓冲区
*@datalen:缓冲区的大小
*/
int uart_recv(int fd, char *data, int datalen) {
int len = 0, ret = 0;
fd_set fs_read;
FD_ZERO(&fs_read);
FD_SET(fd, &fs_read);
//printf("uart wait receive data... ...\n");
ret = select(fd + 1, &fs_read, NULL, NULL, NULL);
if (FD_ISSET(fd, &fs_read)) {
len = read(fd, data, datalen);
return len;
} else {
perror("select");
return -1;
}
}
/**
*串口发送数据
*@fd:串口描述符
*@data:待发送数据
*@datalen:数据长度
*/
int uart_send(int fd, char *data, int datalen) {
int len = write(fd, data, datalen); //实际写入的长度
if (len == datalen) {
return len;
} else {
tcflush(fd, TCOFLUSH); //TCOFLUSH刷新写入的数据但不传送
return -1;
}
}
#define BUF_SIZE 512
#define RECV_MODE 1
#define SEND_MODE 0
int main(int argc, char **argv) {
int serial_fd = init_serial();
if (serial_fd < 0) return -1;
#if RECV_MODE
char buffer[BUF_SIZE] = { 0 };
int recv_len = 0;
while (1) {
recv_len = uart_recv(serial_fd, buffer, BUF_SIZE);
printf("----> receive data: %s\n", buffer);
printf("----> receive length: %d\n\n", recv_len);
}
#endif
#if SEND_MODE
char buf[] = "FF 66 06 00 01 01 0D 03 00";
int send_len = uart_send(serial_fd, buf, sizeof(buf)/sizeof(char));
printf("----> send length: %d\n\n", send_len);
#endif
close(serial_fd);
return 0;
}
# 二次开发
iFLYOS MT8516套件是通过EVS协议与iFLYOS服务端通信实现语音交互和技能调用的。更多关于EVS协议的介绍,可通过 https://doc.iflyos.cn/device/evs/ 详细了解。MTK8516套件基于iotjs开发平台实现了与硬件、网络与文件系统等进行交互的能力,并使用JS语言完成了EVS协议逻辑。
# 准备
- Linux 环境,建议选择Ubuntu 16.04及以上。
- 下载MTK8516交叉编译工具链 (opens new window)
# 编译环境搭建
解压缩工具链,如果系统没有 7z 请先安装,安装方式:
sudo apt-get install p7zip
解压:
7z x yocto_toolchain_7.3.7z
安装
chmod +x oecore-x86_64-aarch64-toolchain-nodistro.0.sh
./oecore-x86_64-aarch64-toolchain-nodistro.0.sh
选择安装目录,推荐安装如下目录
/etc/iflyosBoards/mtk8516
,等待直到安装完成。设置环境变量:
source /usr/local/oecore-x86_64/environment-setup-aarch64-poky-linux
控制台输出 $CC 如果提示如下信息说明安装成功。
aarch64-poky-linux-gcc
添加第三方依赖库
下载第三方依赖库 (opens new window) 并复制到第
2
步选择的安装目录下的sysroot目录。mv /Users/admin/Desktop/MT8516第三方依赖库/lib/* /etc/iflyosBoards/mtk8516/sysroots/aarch64-poky-linux/usr/lib/
mv /Users/admin/Desktop/MT8516第三方依赖库/lib/* /etc/iflyosBoards/mtk8516/sysroots/aarch64-poky-linux/usr/lib64/
工具链 sysroot 中已经预编译了一些第三方的库如:
alsa | cjson | mbedtIs | NE10 | sqlite3 |
---|---|---|---|---|
ffmpeg | json-c | dbus | opus | libxml2 |
c-ares | jansson | expat | nghttp2 | libz |
curl | openssl | libev | paho-mqtt-c |
其它库请查看:/etc/iflyosBoards/mtk8516/sysroots/aarch64-poky-linux/usr/lib64
这里的 /etc/iflyosBoards/mtk8516
是实际的安装路径。
# 编译部署
解压后目录如下
build_mt8516.sh jsruntime smartSpeakerApp
编译
source build_mt8516.sh
目标文件目录:
/etc/iflyosBoards/mtk8516-edu/install
/etc/iflyosBoards/mt8516-edu/install ├── bin │ └── iotjs #jsruntime可执行程序 ├── iFLYOS.json #主程序启动配置文件 ├── lib │ └── libiotjs.so #jsruntime库 ├── smartSpeakerApp #js应用层文件目录
部署
4.1 首先,终止当前进程
adb shell systemctl stop iotjs
4.2 如果修改了jsruntime目录下的代码,把 install/bin/iotjs 推到音箱的 /usr/bin 目录下 把
install/lib/libiotjs.so 推送到 /usr/lib64 目录下
adb push /install/bin/iotjs /usr/bin/ adb push /install/lib/libiotjs.so /usr/lib64/
4.3 如果修改了js代码, 将smartSpeakerApp目录推到 /usr/share/iflyos/iotjs目录下,将smartSpeakerApp重命名为js
adb push /install/smartSpeakerApp /usr/share/iflyos/iotjs/ mv smartSpeakerApp js
4.3 修改iFLYOS.json 中的clientID和clientSecert
注意:
clientid
和clientSecret
由开发者在平台创建产品后生成,deviceid
为用户自定义并导入设备平台白名单,其它选项修改请参考 更换配置文件4.4 将iFLYOS.json的
deviceID
导入用户的设备白名单之中 4.5 更新iFLYOS.json 后重启设备生效adb push iFLYOS.json /data/iflyos/ adb reboot
# 开发文档
对于需要在MT8516做二次开发的开发者,我们提供了基础的接口调用说明,如播放器接口,蓝牙Sink接口,配网接口等,还有如何获取原始音频的说明。详细可见以下文档:
https://cdn.iflyos.cn/docs/mt8516_development_documents.zip
# EVS代码文件介绍
EVS 实现了云端协议的基础功能,同时实现了比较复杂的设备逻辑(如播放控制逻辑、音效焦点管理等),开发者可参考以下逻辑,在此基础上做二次开发。只需将拉取下来的文件进行修改,然后推送回设备即可在设备上体验。
文件目录:/usr/share/iflyos/iotjs/js
文件 | 说明 |
---|---|
evsAlertPlayer.js | 闹钟播放控制逻辑 |
evsAudioMgr.js | 音频焦点控制逻辑 |
evsAudioPlayer.js | 内容播放控制逻辑 |
evsAuthorizeMgr.js | 用户授权管理逻辑 |
evsCapAlarm.js | 本地闹钟端能力实现 |
evsCapAudioPlayer.js | 音频播放端能力实现 |
evsCapInterceptor.js | 拦截器端能力实现 |
evsCapRecognizer.js | 语音识别端能力实现 |
evsCapSpeaker.js | 本地播放器管理 |
evsCapSystem.js | 音箱系统控制管理能力实现 |
evsClient.js | 管理设备与服务端的连接,以及指令的接收和派发工作 |
evsContextMgr.js | 设备Context的维护 |
evsMediaPlayer.js | 本地播放器控制的基础实现 |
evsModuleConfig.js | 配网逻辑管理,包括wifi配置以及授权的过程控制 |
evsModuleInteraction.js | 用户交互逻辑管理,包括用户唤醒,用户按键,网络中断恢复等逻辑 |
evsModuleLed.js | 灯效管理 |
evsModuleStartup.js | 设备上电启动过程的逻辑管理,处理是否第一次启动,是否有授权,是否有网络等问题 |
evsPlayerHandler.js | 音频播放控制逻辑的基础实现 |
evsSoundPlayer.js | 本地TTS播放控制逻辑 |
main.js | 入口程序 |
文件目录:/usr/share/iflyos/iotjs/js/platform/MTK8516
文件 | 说明 |
---|---|
evsBleControl.js | 配网时的蓝牙控制逻辑 |
evsButtonControl.js | 按键控制逻辑 |
evsEffectPlayer.js | 本地音效播放控制逻辑 |
evsWifiControl.js | 配置wifi网络逻辑 |
# 个性化配置
将音箱的电源线USB口插至电脑,等待音箱开机启动。建议使用一个独立供电,并且电流在1.5A 以上的USB HUB 接入,避免出现供电不足导致的不稳定现象。
# 可以做什么
通过开发者模式,你可以使用 adb工具(点击下载)
(opens new window) 执行 adb shell
命令连接到音箱,修改唤醒词及提示音效。
# 更换配置文件
配置文件名为
iFLYOS.json
,可通过以下命令,将取配置文件拉取到本地。adb pull /data/iflyos/iFLYOS.json <保存本地路径>
配置文件参数解释:
参数 说明 deviceID 设备的唯一ID,每个设备具备不同的deviceId,此ID用于OS的鉴权,请勿更改。如有出货需求可通过平台 (opens new window)选择您的设备解决方案,并填写您的联系方式,我们商务同事会联系您。 clientID 设备的clientID,从设备接入平台 (opens new window)中获取 clientSecret 设备的clientSecret,从设备接入平台 (opens new window)中获取 otaSecret 设备的OTA密钥,从设备接入平台 (opens new window)中获取 caeResPath 唤醒词文件的存放路径,可更新为自定义唤醒词的路径 完成修改后,可通过以下命令, 将修改后的配置文件推送至设备目录。
adb push <配置文件路径> /data/iflyos/iFLYOS.json
然后执行
adb shell sync
命令即可生效,注意iFLYOS.json
文件不要存放在有中文名称的本地路径下,否则有可能会导致adb push
失效。更换配置文件后,系统会优先应用配置文件中的参数,此时原有的授权信息会失效,需要重新授权绑定音箱。
注意
更换client_id完成,设备重启后,你需要为设备重新配置网络。在小飞在线 App (opens new window)中添加设备,选择相应产品,按照APP流程指引为音箱配置一个可用的 WLAN 网络。即可通过蓝小飞智能音箱体验你自己创建的设备的相关功能。
# 设备加入白名单
当你把设备更改成自己的ClientID后,需要在设备管理后台的“产品发布 - 设备ID”选项,把device id添加至白名单,设备才能完成鉴权操作。
# 自定义唤醒词
在蓝小飞智能音箱中,我们支持了自定义唤醒词的更换。
# 生成唤醒词资源
请访问自定义唤醒词平台 (opens new window)选择“平台通用唤醒词”生成你的专属唤醒词,后续只需在设备手动替换即可。
# 修改唤醒词资源
- 将生成好的唤醒词,push到
/usr/share/iflyos/ivw/
目录下,并在/data/iflyos/iFLYOS.json
里修改caeResPath的对应资源路径。 - 替换完成后,执行
adb shell sync
命令并启音箱。
1.0.1.038版本以及后续版本采用如下方法更新
- 将生成好的唤醒词,push到
/usr/share/iflyos/ivw/
目录下,并在/usr/share/iflyos/ivw/lanxiaofei.bin
里修改IVW_RES的对应资源路径。 - 替换完成后,执行
adb shell sync
命令并启音箱。
lanxiaofei.bin:
[CAE]
CAE_RES = /usr/share/iflyos/ivw/res_6mic_tv_1024.bin ;
[IVW]
IVW_RES = /usr/share/iflyos/ivw/xiaofeixiaofei.bin ;
HLW_LOG = 1;
参数 | 说明 |
---|---|
CAE_RES | 前端降噪资源文件(配置绝对路径) |
IVW_RES | 唤醒资源文件(配置绝对路径) |
注意
在推送唤醒词资源的时候到MT8516的时候,需使用adb shell df -h /usr
查看MT8516中的存储空间,确保存储空间足够存放唤醒词资源,如不够,可以删除其他的唤醒词资源
# 更换提示音
开发者可以在 TTS合成页面 (opens new window) 选择对应的发音人,生成专属开机欢迎语,推送至设备即可替换。
下载设备音频
adb pull /usr/share/iflyos/ring <保存本地路径>
替换音频
根据文件名寻找要替换的音频文件,将新的音频改名成与pull下来的文件同名
推送音频
adb push <资源文件路径> /usr/share/iflyos/ring
注意
- 完成替换后需执行
adb shell sync
命令生效 - 注意音频文件需转换为m4a格式
- 替换ring目录下的音频后,需保持音频文件名前后一致。
- 完成替换后需执行
# 固件烧录
固件烧录支持window和Ubuntu两种烧录方式,平台提供所需工具,开发者按需选择即可。
# Windows 平台
# 准备
硬件准备
wind7/win10系统电脑
type-C数据线一条
mt8516开发板
# 环境配置
# 1 安装Python
下载上面的 刷机固件包后选择python进行安装,使用默认配置,一直Next按键完成安装操作
2 配置python环境变量,在桌面右键计算机——>选择属性——>高级系统权限——>环境变量。
添加用户环境变量
添加系统环境变量
保存环境变量配置
至此,完成python环境变量配置。
# 2 MT8516驱动安装
- 双击运行刷机工具中的 MT8516-DriverInstall.exe,开始安装驱动。
选择Next
选择Install
选择“是”,并拔掉电脑上USB设备
选择确定,结束安装流程后手动重启电脑
点击Finish,完成安装驱动,并重启电脑
- 如果提示电脑已经安装过驱动,可以选择取消,退出安装;或者选择Install ,后续流程同上。
# 3 adb安装和配置
adb是一个命令行调试软件,可以用电脑操控硬件设备,比如把文件拷贝到设备里面。如果是已经安装了android开发环境或者已经配置过adb,此过程请忽略。
1 下载adb工具
2 把adb工具解压到C:\admin(这是我的电脑目录,每人电脑不一样)
3 验证adb配置,使用win+r,打开命令行
4、进入控制台,输入 adb version,标识安装成功
5、配置adb系统环境变量,配置方法参考python环境变量配置。
# 4 刷机步骤
1 解压缩下载的固件包,并在当前目录的地址栏里输入cmd,进入命令行控制台
2 进入控制台后,执行命令python flashimage.py -t
3 长按按键“静音键” ,插入 USB 接口
4 命令行提示符窗口中,有进度展示,表示正在刷机。
刷机完成:
5 固件烧录完成后开发者即可编译部署运行自己的工程,请参考上文 二次开发 章节
# Ubuntu 平台
# 准备
下载固件 (opens new window) 密码: 4uAj
硬件准备
- Ubuntu18.04 或者Elementory OS 5.1系统电脑
- type-C数据线一条
- mt8516开发板
# 环境配置
# 1 安装Python
打开Terminal,安装python2.7
sudo apt-get install python
在Terminal下输入python2 能够进入交互模式,则标识安装成功
$ python2
Python 2.7.17 (default, Nov 7 2019, 10:07:09)
[GCC 7.4.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
至此,完成python环境变量配置。
# 2 adb安装和配置
adb是一个命令行调试软件,可以用电脑操控硬件设备,比如把文件拷贝到设备里面。如果是已经安装了android开发环境或者已经配置过adb,此过程请忽略。
1 安装adb工具
sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install android-tools-adb
2、进入控制台,输入 adb version,标识安装成功
$ adb version
Android Debug Bridge version 1.0.39
Version 1:8.1.0+r23-5~18.04
Installed as /usr/lib/android-sdk/platform-tools/adb
3、用Type-c线连接电脑和MT8516开发板,输入如下命令$ lsusb
可见已发现usb设备
3、输入如下命令adb devices
,可见已发现adb设备
# 3 刷机步骤
1 解压缩下载的固件包
$ unzip Firmware_mt8516-pub-new_1.0.1.038_PUBLIC_20200313_20_15_02.zip -d Firmware_mt8516-pub-new_1.0.1.038_PUBLIC_20200313_20_15_02
2 进入解压后的目录,执行命令python2 flashimage.py -t
3 长按按键“静音键” ,插入 USB 接口 4 命令行提示符窗口中,有进度展示,表示正在刷机。
刷机完成:
5 固件烧录完成后开发者即可编译部署运行自己的工程,请参考上文 二次开发 章节
# 如何获取更多帮助?
开发过程中遇到接入问题,可以通过 iFLYOS官网(www.iflyos.cn)的工单系统或论坛咨询,我们会在12小时内响应回复,也可以通过邮件联系我们:aiui_support@iflytek.com.