语音类芯片对接
概述
上图为YoC语音子系统框架,自下而上分别包括了芯片、芯片的CSI驱动、操作系统接口、各种通用组件以及多媒体相关的组件、应用框架、应用解决方案。那么我们在对接语音芯片的时候主要是要对接基础的CSI驱动、语音相关的驱动,以及相应的DEMO进行验证,因此我们可以重点关注以下框图的这些组件即可。
基础驱动列表
驱动 | 是否必须 | 说明 |
---|---|---|
uart | 是 | |
codec | 是 | |
dma | 否 | |
iic | 否 | |
iis | 否 | |
spiflash | 是 | |
mailbox | 否 | 异构多核SOC所必须 |
shm | 否 | |
gpio | 否 | 根据开发板需求 |
对接步骤
基础对接
语音类芯片和低功耗类芯片相较而言多了codec相关的驱动,有些是多核的芯片,所以在参考低功耗芯片对接对接完毕之后,需要额外再实现codec和多核相关的驱动。
codec驱动实现以及验证
首先下载codec_demo
,通过以下命令获取:
yoc install codec_demo
驱动实现
驱动 | 参考代码 | 参考文档 |
---|---|---|
codec | 内置codec参考代码 | codec驱动API介绍 |
外挂codec参考代码 | codec驱动API介绍 | |
dma | dma参考代码 | dma驱动API介绍 |
iic | iic参考代码 | iic驱动API介绍 |
iis | i2s参考代码 | i2s驱动API介绍 |
声卡 | 声卡参考代码 | 声卡驱动移植 |
功能验证
驱动对接完成之后,请参考codec_demo/README.md
文件进行验证。
codec外挂:在这种情况下,运行codec_demo可以验证codec、dma、iic和iis驱动。
codec内置:在这种情况下,运行codec_demo可以验证codec和dma驱动。
异构多核SoC驱动实现以及验证
如果不是异构多核的SoC请略过此步骤。
首先下载ipc_demo
,通过以下命令获取:
yoc install ipc_demo bl606p_c906_ipc_demo
驱动实现
驱动 | 参考代码 | 参考文档 |
---|---|---|
mailbox | mailbox参考代码 | mailbox驱动API介绍 |
shm | shm参考代码 | TODO |
功能验证
驱动对接完成之后,请参考ipc_demo/README.md
文件进行验证。
ipc组件主要是用mailbox和shm驱动实现的,所以只需要运行ipc_demo和bl606p_c906_ipc_demo,查看ipc通信过程中发送和接收是否正常即可完成mailbox和shm驱动的验证。
常见问题
数据接收错误
- shm中的memory需要刷cache,
drv_ipc_mem_use_cache
需要返回1 - 发送的内容为结构体,其中成员有指针,但当ap cp的位数不一样,两个结构体所占用的长度不同
- 发送的内容为用户申请的空间,addr或len未对齐,导致刷cache异常
spiflash驱动实现以及验证
spiflash是一个比较基础的驱动,不实现的话就无法对Flash进行操作,如文件系统的操作。
首先下载aoshal_demo
,通过以下命令获取:
yoc install aoshal_demo
驱动 | 参考代码 | 参考文档 |
---|---|---|
spiflash | spiflash参考代码 | spiflash驱动API介绍 |
验证
驱动对接完成之后,请参考aoshal_demo/README.md
文件进行验证。
运行aoshal_demo,输入cli命令appdemohal flash
进行spiflash驱动的验证。在收到类似打印,表示运行成功。
flash demo successfully !
其他
性能优化
将热点函数或数据放入在ram空间:
- 修改链接脚本
- 在启动文件中加入自定义section的拷贝
- 拷贝完成后需刷cache