1.MAX98357A是美信(已被ADI收购)出品的数字脉冲编码调制(PCM)输入D类功率放大器,可提供AB类音频性能,同时具有D类的效率。器件在I2S模式下可提供最大15dB的增益。原理框图和时序图分别如下:
2.以下是完整的驱动代码,K210(SiPEED MaixBit)的34,35,33引脚分别接MAX98357A的DIN,BCLK,LRC脚。volume( )用来设置音量大小,取值范围为0到100。MAX98357A在4-8Ω负载下最大可以提供3W的输出功率,由于其为I2S格式,需设置为I2S.STANDARD_MODE(即PHILIPS格式)。
from fpioa_manager import fm
from Maix import I2S, GPIO
import audio
# register i2s(i2s0) pin
fm.register(34, fm.fpioa.I2S0_OUT_D1, force=True)
fm.register(35, fm.fpioa.I2S0_SCLK, force=True)
fm.register(33, fm.fpioa.I2S0_WS, force=True)
# init i2s(i2s0)
wav_dev = I2S(I2S.DEVICE_0)
# init audio
player = audio.Audio(path="/sd/test.wav")
player.volume(30)
# read audio info
wav_info = player.play_process(wav_dev)
print("wav file head information: ", wav_info)
# config i2s according to audio info
wav_dev.channel_config(wav_dev.CHANNEL_1, I2S.TRANSMITTER, resolution=I2S.RESOLUTION_32_BIT,
cycles=I2S.SCLK_CYCLES_32, align_mode=I2S.STANDARD_MODE)
wav_dev.set_sample_rate(wav_info[1])
# loop to play audio
while True:
ret = player.play()
if ret == None:
print("format error")
break
elif ret == 0:
print("end")
break
player.finish()
3.需要注意的是,K210必须使用带语音功能的固件,即文件名含有“speech”字样,例如:https://cn.dl.sipeed.com/fileList/MAIX/MaixPy/release/master/maixpy_v0.6.2_83_gf0280db50/maixpy_v0.6.2_83_gf0280db50_minimum_speech_with_ide_support.bin所播放的wav文件,可以是自行录制的,录制方法:K210(SiPEED MaixBit)MicroPython使用参考(五、录音到SD卡)_SDAU2005的博客-CSDN博客_k210 sd卡也可在此下载:k210的音频测试文件,wav格式-Python文档类资源-CSDN文库,其中test.wav是左声道、右声道、立体声测试文件,music.wav是音乐音频测试文件,文件头信息分别如下:
4.目前市面上主要有两种MAX98357A模块在售卖,如下图所示,两者功能、使用方法一致,仅外形颜色尺寸存在差异。实际上,MAX98357A是少有的具有功放的I2S语音DAC,且效率很高,体积也小,特别适用于便携式设备,个人认为值得强烈推荐,目前的问题是价格略高,期待国产替代。
5.Maixduino版本的K210音频输出DAC芯片为PT8211,与此引脚、功能兼容的有TM8211,故而,MaixBit也可接载TM8211,不过需要设置align_mode=I2S.RIGHT_JUSTIFYING_MODE,实际上align_mode=I2S.LEFT_JUSTIFYING_MODE也可工作。不外接功放时RCH、LCH引脚分别接喇叭的正负极,声音很小,但能听见。