编辑
2025-01-20
工作知识
0
请注意,本文编写于 138 天前,最后修改于 138 天前,其中某些信息可能已经过时。

目录

一、es8388 datasheet
二、音频通路
三、寄存器说明
3.1 reset寄存器说明
3.2 startup寄存器说明
3.3 音频位数
3.4 其他参数
四、调试I2C
五、结论

根据Openharmony audio(六) es8388的hcs配置中的配置,我们需要填写大量针对es8388寄存器的设置,所以这块需要我们对es8388的寄存器配置说明有一个描述文档,然后针对此文档进行驱动的设计和开发,如下是具体过程

一、es8388 datasheet

es8388的datashell可以从其官网查阅,如下是链接

http://www.everest-semi.com/pdf/ES8388%20DS.pdf

二、音频通路

我们能够拿到codec的datasheet后,第一件事就可以了解如何让其工作,也就是音频通路,我们可以参考我的文章《内核alsa框架解析》

根据datasheet我们可以发现es8388是音频设计十分简单,我重新贴图如下:

image.png 此图片可以从《ES8388 User Guide》找到,此文档贴心的给出了声音输出的设置方式,如下

image.png

三、寄存器说明

根据一中的文档,我们可以找到所有寄存器的设置说明,如下我们贴出来大致情况,方便查阅

image.png image.png image.png image.png

3.1 reset寄存器说明

我们在hcs设置和hdf driver的开发的时候,需要进行software reset,这个对应寄存器是0x00 0x80,如下:

resetSeqConfig = [ 0x00, 0x80, 0x00, 0x00, ];

这里的寄存器说明如下:

image.png 我们留意bit7,这里是SCPReset,如果写1则重置codec

3.2 startup寄存器说明

在hcs设置时,需要在dai startup时设置寄存器,如下:

/* reg, rreg, shift, rshift, min, max, mask, invert, value */ daiStartupSeqConfig = [ 0x03, 0x03, 0, 0, 0x0, 0xFF, 0xFF, 0, 0xf9, // es8388 adc power standby 0x04, 0x04, 0, 0, 0x0, 0xFF, 0xFF, 0, 0x3c, // es8388 dac power prepare 0x0f, 0x0f, 0, 0, 0x0, 0xFF, 0xFF, 0, 0x20, // es8316_adc_mute(capture unmute) 0x19, 0x19, 0, 0, 0x0, 0xFF, 0xFF, 0, 0x02 // es8388 dac unmute (DACCONTROL3) ];

对于0x3,设置0xf9,关掉adc的power,寄存器描述如下

image.png 对于0x4,设置0x3c,将L/R OUT都打开,寄存器描述如下:

image.png 对于0xf,设置0x20,将麦克风禁音,寄存器描述如下:

image.png 对于0x19,设置0x2,将DAC Mute关闭,也就是打开喇叭,寄存器描述如下:

image.png

3.3 音频位数

不同的音频音乐,通过设置不同的bit来播放,这个寄存器是0x17,假设音频是16位的,那么设置为0x18,如下:

image.png

3.4 其他参数

音频还有其他参数,例如mclk的分屏倍数,i2s的格式,声音的增益等等,这里就不一一列举了。都可以根据datasheet的描述,将其通过寄存器的方式设置进去

四、调试I2C

根据上面的介绍,我们知道了如何根据寄存器设置codec的状态,这里为了调试i2c,可以通过i2cdump命令来直接调试i2c设备,从而准确的知道每时每刻的codec寄存器的状态,如下:

# i2cdump -fy 2 0x10 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef 00: 32 50 00 f9 3c 00 00 7c 00 88 f0 02 00 02 30 20 2P.?<..|.???.?0 10: 00 00 ea a2 32 06 00 00 02 02 00 00 08 00 1f f7 ..??2?..??..?.?? 20: fd ff 1f f7 fd ff 00 b8 28 28 b8 80 00 00 1e 1e ??????.?((??..?? 30: 1c 1c 00 aa aa 00 08 00 00 00 00 40 84 84 00 00 ??.??.?....@??.. 40: 32 50 00 f9 3c 00 00 7c 00 88 f0 02 00 02 30 20 2P.?<..|.???.?0 50: 00 00 ea a2 32 06 00 00 02 02 00 00 08 00 1f f7 ..??2?..??..?.?? 60: fd ff 1f f7 fd ff 00 b8 28 28 b8 80 00 00 1e 1e ??????.?((??..?? 70: 1c 1c 00 aa aa 00 08 00 00 00 00 40 84 84 00 00 ??.??.?....@??.. 80: 32 50 00 f9 3c 00 00 7c 00 88 f0 02 00 02 30 20 2P.?<..|.???.?0 90: 00 00 ea a2 32 06 00 00 02 02 00 00 08 00 1f f7 ..??2?..??..?.?? a0: fd ff 1f f7 fd ff 00 b8 28 28 b8 80 00 00 1e 1e ??????.?((??..?? b0: 1c 1c 00 aa aa 00 08 00 00 00 00 40 84 84 00 00 ??.??.?....@??.. c0: 32 50 00 f9 3c 00 00 7c 00 88 f0 02 00 02 30 20 2P.?<..|.???.?0 d0: 00 00 ea a2 32 06 00 00 02 02 00 00 08 00 1f f7 ..??2?..??..?.?? e0: fd ff 1f f7 fd ff 00 b8 28 28 b8 80 00 00 1e 1e ??????.?((??..?? f0: 1c 1c 00 aa aa 00 08 00 00 00 00 40 84 84 00 00 ??.??.?....@??..

根据上面可以知道es8388的寄存器所有状态,此时我们对照datasheet去排查是否存在异常即可。对照寄存器是否异常的事情需要比较细心。

五、结论

至此,我们可以通过es8388的datasheet和user guide来控制codec的工作了。只要codec正常上电,声音参数配置正确,音频通路设置正确,那么声卡就能够正常工作。