CI1303启英泰伦·

启英泰伦 CI1303 播放外部音频代码解析(二)

ronger

ronger

222 1

本文借助CI230X芯片SDK 的代码来学习如何实现 CI1303 播放外部音频功能。

CI1303 + Wi-Fi Combo = CI230X

概述

通过阅读 CI230X 芯片 SDK 代码不难看出 CI230X 芯片 AIoT 方案的架构,SDK 的默认设置:

  1. UART0 输出系统日志
  2. UART1 连接 Wi-Fi 模块, 实现在线 ASR ,OTA,下发远程指令和传输音频数据
  3. UART2 连接设备主控芯片,进行指令交互

潦草小狗的设计方案中,我们采用 CI1303 + ESP32-S3 的组合,通过 UART1 进行连接,在这个方案中 ESP32-S3 既是设备主控芯片也是 Wi-Fi 模块,因此我们需要将 CI230X SDK 中的 network_recv_data_taskdeal_userdef_msg 结合起来。

传输协议

CI230X系列芯片-语音端和WIFI端串口传输协议

1. 概述

​ 为了降低语音端和WIFI端的耦合性,增加芯片运行稳定性,CI230X系列芯片内部运行了2套独立的freeRTOS系统;语音端和WIFI端通过串口进行通信,通信速率可根据需求设置为9600bits/s~2Mbits/s;CI2306芯片使用离在线方案,传输音频数据到云端时,串口通信速率至少设置为921600bits/s。

​ 下面将详细介绍语音端和WIFI端通信的数据结构、通信协议、以及通信指令;如果用户使用第三方WIFI芯片配合启英泰伦CI130系列语音芯片使用,该协议同样适用。

2. 传输交互数据-数据结构

typedef struct
{
    unsigned int magic; /* Start data frame. Let's define as 0x5a5aa5a5; */
    unsigned short checksum; /* checksum */
    unsigned short type; /* Define command type. */
    unsigned short len; /* Define data stream len. */
    unsigned short version; /*版本信息*/   
    unsigned int fill_data; /*填充数据*/
}cias_standard_head_t;

3. 传输交互数据-数据字段解析

名称字节长度含义
magic4默认协议头,unsigned int 类型,默认“5a5aa5a5”
checksum2校验和, unsigned short 类型,默认“0000”
type2当前消息的类型,unsigned short 类型
len2当前消息中的数据长度(不加结构体本身长度,仅表示数据长度)
version2version”版本信息,默认“00”
fill_data4填充数据,默认“0x12345678” 代表的含义如下 所示
若有其他数据将直接跟在该结构体的后面,eg memcpy(output + sizeof(cias_data_standard_head_t), (uint8*)input, len);(注意,用户要自己管理 output 的内存)
#define INVAILD_SPEAK                (0x12345666)
#define RECV_TTS_PLAY                (0x12345677)
#define RECV_MP3_PLAY                (0x12345688)
#define RECV_M4A_PLAY                (0x123456aa)
#define IDLE_STATUS_RECV_M4A_PLAY    (0x123456ab)
#define RECV_WAV_PLAY                (0x123456bb)
#define DEF_FILL                     (0x12345678)
#define WAKEUP_FILL_DATA             (0x12345678)
#define NO_WAKEUP_FILL_DATA          (0x0)

4. 示例:语音端传输一包PCM数据到WIFI端流程

  1. 应用层发送
    voice_data_packet_and_send(SEND_PCM_MIDDLE, dst_addr, encode_t);
    
  2. 底层打包
    broadlink_frame_create(packet_type, voice_data, packet_len,(broad_link_buf + buff_count * 1024),1024,0x12345678,0);
    
  3. 添加到发送队列
    send_msg_to_network_task(&send_msg,NULL)
    
  4. 串口发送
    network_send((int8_t *)data->payload,data->length)
    

语音端和 WIFI 端串口交互指令

语音端和 wifi 端串口通信指令从 0x0101~0x0fff 为系统内部使用,用户如果需要添加指令,请添加该范围以外的值,否则会出现冲突,导致通信异常。

指令类型指令值指令说明
语音识别指令0x0101本地语音识别通知
0x0102唤醒
0x0103云端 VAD END
0x0104跳过无效语音
0x0105PCM 数据中间包
0x0106PCM 数据结束包
0x0107PCM 数据空闲
0x0108~0x01ff预留
网络播放指令0x0201开始播放
0x0202暂停播放
0x0203恢复播放
0x0204停止播放
0x0205重新播放
0x0206播放下一首
0x0207播放本地 TTS
0x0208播放结束
0x0209重新获取播放链接
0x020a获取后续播放数据
0x020b接收播放数据
0x020c播放数据接收完
0x020d播放 tts 结束
0x020e播放空指令
0x020f~0x02ff预留
IOT 自定义协议0x0301云端 IOT 指令
0x0302云端音量
0x0303本地音量
0x0304增大音量
0x0305减小音量
0x0306最大音量
0x0307最小音量
0x0308~0x03ff预留
网络配置指令0x0401进入配网模式
0x0402正在配网
0x0403退出配网模式
0x0404初始密码状态
0x0405网络断开
0x0406网络连接成功
0x0407已获取鉴权文件
0x0408需要配置鉴权文件
0x0409云端已连接
0x040a云端已断开
0x040a~0x04ff预留
OTA 相关指令0x0501开始 ota
0x0502ota 数据
0x0503ota 升级成功
0x0504生产测试
0x0505生产测试成功
0x0506生产测试失败
0x0507自测试
0x0508红外数据发送
0x0509红外码库下载中
0x050a红外码库下载完成
0x050b红外下载码库开始
0x050c~0x05ff预留
0x0601~0x0fff预留

所属系列

从当前文章继续阅读它所在合集中的前后内容。

潦草小狗驱动开发入门教程 第 4 / 4 篇
查看合集

潦草小狗驱动开发入门教程

相关文章

优先推荐同专题、同标签和同作者内容,补足热门文章。

评论 1

登录 后参与评论

评论 1

fbwxzwy
fbwxzwy9月10日 02:43

追更,没有新的更新了吗