es8388音频芯片驱动之六:ES8388+UAC的录音播放实例分享

原创 嵌入式Lee 2024-06-24 08:02

一. 前言

前面我们已经详细介绍了es8388的功能,重点是关注其ADCDAC链路的配置,同时也实现了其寄存器的读写驱动,并实现了es8388功能配置的驱动接口es8388.c/h。现在开始就可以实现具体应用了。前面我们也分享了UAC的诸多实例,现在我们就基于UACes8388实现麦克风和扬声器,录音和播放。

Uac相关实例参考:https://mp.weixin.qq.com/s/bLSLwPjl5cC_8X-YxZo89Q USB系列之-UAC扬声器+麦克风实例分享》

二. IIS通讯

首先控制器需要实现IIS驱动,这是平台相关这里就不再赘述。为了保证数据不断流,需要IIS驱动能实?现ping-pang传输,一般由DMA+Half中断实现。

同时确保前面寄存器读写驱动接口移植好,添加es8388.c/h这部分驱动代码,参考如下配置,16K,差分输入输出,单声道。如果ES8388IIS无输出,或者给了输入DAC无输出,参考前面分享的文章进行分析。

static int es8388_itf_cfg(void){    /* 见ES8388 user Guide.pdf的10.1 The Sequence for Start up codec */
    /* 1.设置ES8388为从模式 */    es8388_set_mode_bck(ES8388_MODE_SLAVE, 0, 0, 0);  
    /* 2.关闭DEM STM等电源 */    es8388_set_chip_pwr_bits(ES8388_ADC_DIGPDN | ES8388_DAC_DIGPDN | ES8388_ADC_STM_RST |  \                             ES8388_DAC_STM_RST | ES8388_ADCVREF_PDN | ES8388_DACVREF_PDN);
    /* 3.设置ADC DAC使用同样的LRCK */    es8388_set_lrck(ES8388_SLRCK_SAME,ES8388_LRCKSEL_DAC_LRCK);
    /* 4.Set Chip to Play&Record Mode */    es8388_set_enref(1);    es8388_set_vmidsel(ES8388_VMIDSEL_50K);
    /* 5.Power Up Analog and Ibias */    es8388_clr_chip_ctrl2_bits(ES8388_PDNIBIASGEN | ES8388_PDNANA | ES8388_LPVREFBUF);
    /* 6.Power up ADC / Analog Input /Micbias for Record */    es8388_clr_adc_pwr_bits(ES8388_PDNAINL | ES8388_PDNAINR | ES8388_PDNADCL |                               ES8388_PDNADCR | ES8388_PDNMICB | ES8388_PDNADCBIASGEN);
    /* 7.Power up DAC and Enable LOUT/ROUIT */    es8388_set_dac_pwr(ES8388_CH_L,1);    es8388_set_dac_pwr(ES8388_CH_R,1);    es8388_set_dac_out_en(ES8388_OUT_L1,1);    es8388_set_dac_out_en(ES8388_OUT_L2,1);    es8388_set_dac_out_en(ES8388_OUT_R1,1);    es8388_set_dac_out_en(ES8388_OUT_R2,1);
    /* ADC部分 */    es8388_set_adc_gain(ES8388_CH_L, 21);  /* PGA增益 24db */    es8388_set_adc_gain(ES8388_CH_R, 21);
    es8388_set_adc_ds(ES8388_DSSEL_LIN1_RIN1, ES8388_DSSEL_LIN2_RIN2);    es8388_set_adc_in(ES8388_CH_L,ES8388_INSEL_LR);    es8388_set_adc_in(ES8388_CH_R,ES8388_INSEL_LR);        es8388_set_adc_monomix(ES8388_MONOMIXSEL_STEREO);
    es8388_set_adc_format(DATSEL_LDATA_LADC_RDATA_RADC, LRP_NORMAL_2ND, WL_24, FORMAT_I2S);        es8388_set_adc_fs(ES8388_FS_MODE_SINGLE, ES8388_FS_RADIO_1000);
    es8388_set_adc_vol_attenuates(ES8388_CH_L, 86);  /* 先设置衰减大一点,避免ADC噪声过大或者超量程 */    es8388_set_adc_vol_attenuates(ES8388_CH_R, 86);        es8388_set_adc_pgagain_th(47, 0);
    es8388_alc_cfg_st alccfg=    {        .alcsel = ES8388_ALCSEL_LR,        .alclvl = -9,        .alchld = 0,        .alcdcy = 1,        .alcatk = 2,        .alcmode = ES8388_ALCMODE_NORMAL,        .alczc = 0,        .time_out = 0,        .win_size = 96,    };    es8388_set_adc_alc_cfg(&alccfg);    es8388_set_adc_noisegate(1, ES8388_NOISE_GATE_TYPE_MUTE, 81);
    /* DAC部分*/    es8388_set_dac_format(0, LRP_NORMAL_2ND, WL_24, FORMAT_I2S);     /* 设置DAC数据格式 */    es8388_set_dac_fs(ES8388_FS_MODE_SINGLE, ES8388_FS_RADIO_1000);
    es8388_set_dac_vol(ES8388_CH_L, 0);     /* 设置L通道音量 0db即不衰减,最大音量 */    es8388_set_dac_vol(ES8388_CH_R, 0);
    es8388_set_dac_mixen(ES8388_CH_L,ES8388_OUT_SRC_MIXSEL,0);     /* 设置OUT只来源于DAC,不来源于MIXSEL */    es8388_set_dac_mixen(ES8388_CH_L,ES8388_OUT_SRC_DAC,1);    es8388_set_dac_mixen(ES8388_CH_R,ES8388_OUT_SRC_MIXSEL,0);    es8388_set_dac_mixen(ES8388_CH_R,ES8388_OUT_SRC_DAC,1);
    es8388_set_dac_outvol(ES8388_OUT_L1,9);    /* 设置对应引脚的输出音量,使用L的1和2引脚, 先设置最小音量-90/2db避免输出过大 */    es8388_set_dac_outvol(ES8388_OUT_L2,9);    es8388_set_dac_outvol(ES8388_OUT_R1,9);    es8388_set_dac_outvol(ES8388_OUT_R2,9);
    /* 开DEM STM等电源 */    es8388_clr_chip_pwr_bits(ES8388_ADC_DIGPDN | ES8388_DAC_DIGPDN | ES8388_ADC_STM_RST |  \                             ES8388_DAC_STM_RST | ES8388_ADCVREF_PDN | ES8388_DACVREF_PDN);    return 0;}

使用逻辑分析仪抓取IIS通讯数据确认收发是否正确。

对于DAC可以输出正弦波数据进行测试,示波器查看输出是否是正弦波,并且可以检查数据是否有断流。一个比较常见的问题是驱动设计不合理无法保证两次传输之间的无缝连接,两笔传输之间可能存在抖动,可以通过正弦波测试,示波器分析输出信号的傅里叶变换通过谐波看出来。

对于ADC可以用手机下载固定频率声音播放器,播放固定频率音频,然后抓取IIS的数据看是否正确,或者通过控制器其他手段比如dumo内存的数据通过串口打印出来,到电脑上画出曲线进行分析。

一. 数据流设计

整个应用的核心就是播放和录音的两条数据流了,音频重点要保证的是数据的流式传输,必须保证不断流,无抖动。这里涉及到几个核心技术FIFO设计,FIFO池设计,ping-pang传输设计。

FIFO相关设计我们之前已经造过相关的轮子了,并且多出应用了,现在又派上用场了。

参考

https://mp.weixin.qq.com/s/MvL9eDesyuxD60fnbl1nag 《超级精简系列之十三:超级精简的循环FIFO,C实现》

https://mp.weixin.qq.com/s/PV-sUxzTEKbobgyt4BKRlA《超级精简系列之十九:超级精简的循环FIFO,C实现》

整个数据流分为两个方向,设计思路是一样的,

播放的数据流

PC(或其他主机) ->  USB(UAC) - > FIFO - > 算法处理 -> 发送ping-pang缓存 -> IIS发送 ->ES8388 - >PA -> 喇叭。

整个流程有两个重点节点:一个是接收FIFOUAC收到数据存入该FIFO,一是发送ping-pang缓存,算法任务从接收FIFO中取出数据进行算法处理,然后写入ping-pang缓存进行发送。注意这里算法任务等待上一次IISDMA传输完才进行下一次处理,所以是由IISDMA发送中断驱动的,IISDMA在两个缓存之间无缝连接(依赖于硬件的HALF中断或者DMA描述符链表机制)DMA中断通过信号通知任务。为了启动DMA的流,所以一开始必须先提交两笔传输,即ping-pang缓存的两个缓存都处于待发送状态,一个发送完后硬件自动切换到下一个,并且产生中断发送信号通知任务运算,准备下一个发送。任务需要从接收FIFO获取数据进行处理存在DMA发送完一笔,但是接收FIFO中还不足一笔数据的情况,这个时候就是断流的情况,可以先接收FIFO积蓄至少两笔以上才进行IIS DMA发送,这样足够的冗余避免断流,详见下一节断流分析。

录音的数据流

MIC->ES8388>IIS->接收-ping-pang缓存->发送FIFO-> UAC->USB主机

整个流程有两个重点节点:一个是发送FIFOUAC从该FIFO读出数据进行发送,一是接收ping-pang缓存,算法任务从ping-pang缓存中取出数据进行算法处理,然后写入发送FIFO等待UAC发送。注意这里算法任务等待上一次IISDMA传输完才进行下一次处理,所以是由IISDMA接收中断驱动的,IISDMA在两个缓存之间无缝连接(依赖于硬件的HALF中断或者DMA描述符链表机制)DMA中断通过信号通知任务。为了启动DMA的流,所以一开始必须先提交两笔传输,即ping-pang缓存的两个缓存都处于待接收状态,一个接收完后硬件自动切换到下一个,并且产生中断发送信号通知任务运算,准备下一个接收。任务需要从ping-pang缓存获取数据进行处理存入发送FIFOUAC发送。UAC发现发送FIFO不足一笔数据的情况,这个时候就是断流的情况,可以先等待发送FIFO积蓄至少两笔以上才进行UAC发送,这样足够的冗余避免断流,详见下一节断流分析。

四. 断流问题

前面数据流设计中提到了两个方向的数据断流的问题,这里再详细分析下。

UAC发送FIFO中时可能存在断流问题,因为发送FIFO是一个水池,IIS DMA接收驱动任务算法处理往该FIFO写数据。理论上IIS采样率和UAC发送率是匹配的,但是不可避免存在一点抖动偏差,这个抖动偏差就可能使得错过,比如往发送FIFO写数据第一次的时间间隔是9mS,下一次是11mS,那么UAC发送间隔时可能写数据还差一点时间才到就读不到数据导致断流,如下图生产者消费者模型所示

解决方法是消费者延迟消费,即等待生产生产两笔以上数据,再进行消费,那么水池里就继续了两笔以上数据下次消费时由于抖动,来的快一点,或者生产下一次生产的慢一点也不会导致断流,因为里面有两次传输的冗余可以协调。只要抖动不超过这个水池的积蓄量就不会断流,因为平均速率是基本一样的,所以不会导致太大的偏差,只会偶尔小的偏差,所以这个积蓄量就可以保证不断流。

从接收FIFO读数据处理也有同样的断流问题,也是一样的,不再赘述。

五. 总结

本篇是es8388应用案例分享系列的完结篇,以一个具体的应用结尾,该应用完全按照产品应用级设计,直接可以应用到自己的产品设计当中去。通过以上应用,其中IO模拟IICFIFO设计等基础技术,也可以体验到之前我们设计自己趁手的轮子的必要性了。


评论 (1)
用户17218899997502024-07-25 14:49
使用es8388进行音频的录音和播放效果如何?
  • 在CAN总线分析软件领域,当CANoe不再是唯一选择时,虹科PCAN-Explorer 6软件成为了一个有竞争力的解决方案。在现代工业控制和汽车领域,CAN总线分析软件的重要性不言而喻。随着技术的进步和市场需求的多样化,单一的解决方案已无法满足所有用户的需求。正是在这样的背景下,虹科PCAN-Explorer 6软件以其独特的模块化设计和灵活的功能扩展,为CAN总线分析领域带来了新的选择和可能性。本文将深入探讨虹科PCAN-Explorer 6软件如何以其创新的模块化插件策略,提供定制化的功能选
    虹科汽车智能互联 2025-04-28 16:00 114浏览
  • 4月22日下午,备受瞩目的飞凌嵌入式「2025嵌入式及边缘AI技术论坛」在深圳深铁皇冠假日酒店盛大举行,此次活动邀请到了200余位嵌入式技术领域的技术专家、企业代表和工程师用户,共享嵌入式及边缘AI技术的盛宴!1、精彩纷呈的展区产品及方案展区是本场活动的第一场重头戏,从硬件产品到软件系统,从企业级应用到高校教学应用,都吸引了现场来宾的驻足观看和交流讨论。全产品矩阵展区展示了飞凌嵌入式丰富的产品线,从嵌入式板卡到工控机,从进口芯片平台到全国产平台,无不体现出飞凌嵌入式在嵌入式主控设备研发设计方面的
    飞凌嵌入式 2025-04-28 14:43 107浏览
  •   北京华盛恒辉电磁环境适应性测试系统是针对复杂电磁环境进行仿真、测试与评估的关键设备,以下从系统功能、技术架构、应用场景、核心优势、发展趋势五个维度展开全面解析:   应用案例   目前,已有多个电磁环境适应性测试系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润电磁环境适应性测试系统。这些成功案例为电磁环境适应性测试系统的推广和应用提供了有力支持。   一、系统功能   复杂电磁环境构建   全生命周期测试能力   实时监测与反馈   二、技术架构   模块化设
    华盛恒辉l58ll334744 2025-04-26 17:21 200浏览
  • 2025年全球人形机器人产业迎来爆发式增长,政策与资本双重推力下,谷歌旗下波士顿动力、比亚迪等跨国企业与本土龙头争相入局,产业基金与风险投资持续加码。仅2025年上半年,中国机器人领域就完成42笔战略融资,累计金额突破45亿元,沪深两市机器人指数年内涨幅达68%,印证了资本市场对智能终端革命的强烈预期。值得关注的是,国家发展改革委联合工信部发布《人形机器人创新发展行动计划》,明确将仿生感知系统、AI决策中枢等十大核心技术纳入"十四五"国家重大专项,并设立500亿元产业引导基金。技术突破方面,本土
    电子资讯报 2025-04-27 17:08 257浏览
  • 速卖通,作为阿里巴巴集团旗下的跨境电商平台,于2010年横空出世,彼时正值全球电商市场蓬勃发展,互联网的普及让跨境购物的需求日益增长,速卖通顺势而为,迅速吸引了全球目光。它以“让天下没有难做的生意”为使命,致力于打破国界限制,搭建起中国商家与全球消费者之间的桥梁。在其发展的黄金时期,速卖通取得的成绩令人瞩目。在欧洲市场,速卖通一度成为第一大电商平台。根据第三方机构《欧洲跨境商务》的评选,速卖通凭借出色的服务和消费者口碑,在“欧洲十大跨境电商平台”中脱颖而出,力压来自美国的亚马逊和eBay等电商巨
    用户1742991715177 2025-04-26 20:23 211浏览
  •  集成电路封装测试是确保芯片性能与可靠性的核心环节,主要包括‌晶圆级测试(CP测试)‌和‌封装后测试(FT测试)‌两大阶段,流程如下:一、晶圆级测试(CP测试)1.‌测试目的‌:在晶圆切割前筛选出功能缺陷或性能不达标的晶粒(Die),避免后续封装环节的资源浪费,显著降低制造成本。2.‌核心设备与操作‌l ‌探针台(Prober)‌:通过高精度移动平台将探针与晶粒的Pad jing准接触,实现电气连接。l ‌ATE测试机‌:提供测试电源、信号输入及功能向量,接收晶粒反
    锦正茂科技 2025-04-27 13:37 200浏览
  • 一、智能家居的痛点与创新机遇随着城市化进程加速,现代家庭正面临两大核心挑战:情感陪伴缺失:超60%的双职工家庭存在“亲子陪伴真空期”,儿童独自居家场景增加;操作复杂度攀升:智能设备功能迭代导致用户学习成本陡增,超40%用户因操作困难放弃高阶功能。而WTR096-16S录音语音芯片方案,通过“语音交互+智能录音”双核驱动,不仅解决设备易用性问题,更构建起家庭成员间的全天候情感纽带。二、WTR096-16S方案的核心技术突破1. 高保真语音交互系统动态情绪语音库:支持8种语气模板(温柔提醒/紧急告警
    广州唯创电子 2025-04-28 09:24 164浏览
  •     今天,纯电动汽车大跃进牵引着对汽车电气低压的需求,新需求是48V。车要更轻,料要堆满。车身电子系统(电子座舱)从分布改成集中(域控),电气上就是要把“比12V系统更多的能量,送到比12V系统数量更少的ECU去”,所以,电源必须提高电压,缩小线径。另一方面,用比传统12V,24V更高的电压,有利于让电感类元件(螺线管,电机)用更细的铜线,缩小体积去替代传统机械,扩大整车电气化的边界。在电缆、认证行业60V标准之下,48V是一个合理的电压。有关汽车电气低压,另见协议标准第
    电子知识打边炉 2025-04-27 16:24 243浏览
  • 在电子电路设计和调试中,晶振为电路提供稳定的时钟信号。我们可能会遇到晶振有电压,但不起振,从而导致整个电路无法正常工作的情况。今天凯擎小妹聊一下可能的原因和解决方案。1. 误区解析在硬件调试中,许多工程师在测量晶振时发现两端都有电压,例如1.6V,但没有明显的压差,第一反应可能是怀疑短路。晶振电路本质上是一个交流振荡电路。当晶振未起振时,两端会静止在一个中间电位,通常接近电源电压的一半。万用表测得的是稳定的直流电压,因此没有压差。这种情况一般是:晶振没起振,并不是短路。2. 如何判断真
    koan-xtal 2025-04-28 05:09 139浏览
  •  探针台的维护直接影响其测试精度与使用寿命,需结合日常清洁、环境控制、定期校准等多维度操作,具体方法如下:一、日常清洁与保养1.‌表面清洁‌l 使用无尘布或软布擦拭探针台表面,避免残留清洁剂或硬物划伤精密部件。l 探针头清洁需用非腐蚀性溶剂(如异丙醇)擦拭,检查是否弯曲或损坏。2.‌光部件维护‌l 镜头、观察窗等光学部件用镜头纸蘸取wu水jiu精从中心向外轻擦,操作时远离火源并保持通风。3.‌内部防尘‌l 使用后及时吹扫灰尘,防止污染物进入机械滑
    锦正茂科技 2025-04-28 11:45 87浏览
  • 贞光科技代理品牌紫光国芯的车规级LPDDR4内存正成为智能驾驶舱的核心选择。在汽车电子国产化浪潮中,其产品以宽温域稳定工作能力、优异电磁兼容性和超长使用寿命赢得市场认可。紫光国芯不仅确保供应链安全可控,还提供专业本地技术支持。面向未来,紫光国芯正研发LPDDR5车规级产品,将以更高带宽、更低功耗支持汽车智能化发展。随着智能网联汽车的迅猛发展,智能驾驶舱作为人机交互的核心载体,对处理器和存储器的性能与可靠性提出了更高要求。在汽车电子国产化浪潮中,贞光科技代理品牌紫光国芯的车规级LPDDR4内存凭借
    贞光科技 2025-04-28 16:52 130浏览
  • 晶振在使用过程中可能会受到污染,导致性能下降。可是污染物是怎么进入晶振内部的?如何检测晶振内部污染物?我可不可以使用超声波清洗?今天KOAN凯擎小妹将逐一解答。1. 污染物来源a. 制造过程:生产环境不洁净或封装密封不严,可能导致灰尘和杂质进入晶振。b. 使用环境:高湿度、温度变化、化学物质和机械应力可能导致污染物渗入。c. 储存不当:不良的储存环境和不合适的包装材料可能引发化学物质迁移。建议储存湿度维持相对湿度在30%至75%的范围内,有助于避免湿度对晶振的不利影响。避免雨淋或阳光直射。d.
    koan-xtal 2025-04-28 06:11 111浏览
  • 随着电子元器件的快速发展,导致各种常见的贴片电阻元器件也越来越小,给我们分辨也就变得越来越难,下面就由smt贴片加工厂_安徽英特丽就来告诉大家如何分辨的SMT贴片元器件。先来看看贴片电感和贴片电容的区分:(1)看颜色(黑色)——一般黑色都是贴片电感。贴片电容只有勇于精密设备中的贴片钽电容才是黑色的,其他普通贴片电容基本都不是黑色的。(2)看型号标码——贴片电感以L开头,贴片电容以C开头。从外形是圆形初步判断应为电感,测量两端电阻为零点几欧,则为电感。(3)检测——贴片电感一般阻值小,更没有“充放
    贴片加工小安 2025-04-29 14:59 84浏览
  • 探针台作为高精度测试设备,在光电行业的关键器件研发、性能测试及量产质量控制中发挥核心作用,主要涵盖以下应用场景与技术特性:一、光电元件性能测试1.‌光电器件基础参数测量‌l 用于LED、光电探测器、激光器等元件的电流-电压(I-V)特性、光功率、响应速度等参数测试,支撑光通信、显示技术的器件选型与性能优化。l 支持高频信号测试(如40GHz以上射频参数),满足高速光调制器、光子集成电路(PIC)的带宽与信号完整性验证需求。2.‌光响应特性分析‌l 通过电光转换效率测
    锦正茂科技 2025-04-27 13:19 126浏览
  • 探针台作为半导体制造与测试的核心设备,通过精密定位与多环境适配能力,支撑芯片研发、生产及验证全流程。以下是其关键应用领域与技术特性:一、核心功能支撑1.‌电性能测试与分析‌l 在晶圆切割前,探针台直接接触芯片电极,测量阈值电压、漏电流、跨导等200余项参数,用于评估良品率及优化工艺设计。l 支持单晶体管I-V曲线测量,定位栅极氧化层厚度偏差(精度达0.2nm),为器件性能分析提供数据基础。2.‌纳米级定位与测量‌l 定位精度达±0.1μm,满足5nm及以下制程芯片的
    锦正茂科技 2025-04-27 13:09 154浏览
我要评论
1
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦