stm32与tvl320aic32的i2s通信问题
你好
我们正用tvl320aic32于我们的设备内完成通话的功能,用stm32f103的单片机控制,现在已经可以用i2c正确的写入与读取aic32的寄存器值,但是在使用i2s通讯上出现了问题,单片机i2s接口发送的数据aic32接收不到,我想知道是否改先进行哪些配置? 如何才能听到lineout播出的声音呢?
你好:
你的单片机发出的数据是标准的I2S数据吗? 请参考以下配置。
Input:
DAC
- left data to LDAC and right data to RDAC
- volume control = 0dB
- Connected to outputs via mixer mode
Line Outputs (differential signals)
- Left and Right Line outputs
- Mono Line outputs (summed Left and Right channels)
- LDAC to Left Line Output and Mono Line Output
- RDAC to Right Line output and Mono Line Output
- Mixer gain = 0dB
- Line Output amplifier gain = 0dB}
Commands=
{w 30 07 8A
w 30 25 C0
w 30 29 02
w 30 2B 00
w 30 52 80
w 30 5C 80
w 30 4B 80
w 30 4E 80
w 30 56 09
w 30 5D 09
w 30 4F 09
}
还有就是Codec你提供的MCLK是多少?
我用示波器测量了下MCK频率为12Mhz,MIC始终没有采集到数据进单片机,是不是只要提供了MCK就可以使用TLV320芯片采集声音和播放声音了呢?要是不行的话我还应该做哪些事情?
你好:
提供MCLK 给Codec只是其中一个条件,你先配置Codec让它先能采样吧。然后配置Codec为主模式(I2S时钟从AIC33输出)。
如果你的MCLK是12M,那么需要用到内部的PLL来配置时钟到音频的采样率。
第一步就是Codec能产生I2S所需要的时钟。
“你先配置Codec让它先能采样吧。然后配置Codec为主模式(I2S时钟从AIC33输出)。”
这些是利用配置TLV320的内部寄存器实现的么?如果是的话,该配置哪些寄存器呢?
你好:
配置方法与顺序:
1.软件复位;(Page0, register 1)
2. 时钟配置+采样率设置;(Page0, register 2-7)
3. I2S format配置(page 0 register 8-10)
4. Analog input routing(page 0 register 17-24)
0, // 2 Codec Sample Rate Select <- [ADC=FS][DAC=FS]
0x91, // 3 PLL A <- [PLL=ON][P=1][Q=2]
0x20, // 4 PLL B <- [J=8]
0xf0, // 5 PLL C <- [D=1920]
0x00, // 6 PLL D <- [D=1920]
0x0a, // 7 Codec Datapath Setup <- [FS=48 kHz][LeftDAC=LEFT][RightDAC=RIGHT]
0xc0, // 8 Audio Serial Data A <- [BCLK=Master][WCLK=Master][3DEffects=OFF][DigitalMIC=OFF]
0, // 9 Audio Serial Data B <- [Mode=I2S][Length=16-bit][TransferMode=Continous]
0, // 10 Audio Serial Data C <- [DataOffset=0]
0x01, // 11 Audio Codec Overflow Flag <- [pll R=1]
0, // 12 Audio Codec Digital Filter <- [OFF]
帮我看看这是我写入的值,有什么不对或者不够的地方么,还有第101,102两个寄存器的值需要设定么? 我一旦把单片机设置成slave模式他就不在提供MCK了,这时aic32能工作么?
请问你们有没有电话帮助或qq什么的方式咨询呢?
你好:
你的MCLK跟I2S有联系吗?一共很MCLK,BCLK, LRLK。你没有弄错吧?AIC工作一定要MCLK。
你上面的配置只是配置了I2S的数据结构和时钟,还有模拟的输出和输入路径选择和ADC,DAC的电源。
MCLK = 12 MHz and Fsref = 48.0 kHz
Select P = 1, R = 1, K = 8.192, which results in J = 8, D = 1920
你好 :
是这样的,stm32的收和发的MCLK是不同的引脚驱动的,而且在单片机在Slaver模式下面是不产生MCLK的,所以我问一下,1、是不是不管AIC32处于Master或是slaver都必须给他的MLCK脚输入时钟? 2、使用MIC接收数据时,AIC只能使用master模式吗? 谢谢!
你好:
无论AIC32工作在什么模式,都需要MCLK。使用MIC接收数据的时候AIC可以工作在Slave模式,前提是你的MCU要发I2S时钟给AIC32。
speaker已经可以出声音了,mic还是收不到数据啊, 你能给我写一个建议的寄存器配置表么?
你好:
你有原理图么?这个需要根据原理图来写的。你的MIC的bias电压启动了么?
你先参考下面的程序:
Input:
EVM microphone (MIC3L/R inputs)
- Volume control = 0dB (not muted)
- MIC3L connected to LADC
- MIC3R connected to RADC
- MICBIAS = 2.5V
Ouput:
ADC
- LADC ON
- RADC ON
- PGA gain = 0dB
- Output amplifier gain = 0dB}
DAC configured for left data to LDAC and right data to RDAC
DAC volume control = 0dB
DAC connected to outputs via mixer mode
High Power Outputs are differntial capless outputs
LDAC to HPLOUT/COM
RDAC to HPRDAC/COM
High Power output gains = 0dB.}
Commands=
{w 30 11 0F
w 30 12 F0
w 30 16 7C
w 30 13 7C
w 30 0F 00
w 30 10 00
w 30 19 80}
原理图在帖子开头有,MICBIAS已经测量到了2.5V电压,然后我们用的是MIC1L/MIC1R这一路,这样commands是多少呢?
你给我的这个commands说不通啊,w 30 16 7C ; w 30 13 7C 这两个命令在寄存器表里面有些位是只读的啊(也就是第22,19两个寄存器),我用的芯片是AIC32的
你好:
首先,register 19和22这两个不是只读的,你可能看错了。由于AIC32的LIN1L与MIC1L是一样的,所以不需要修改输入。你尝试把增益改大点,改成30dB在试下。
并且确认下I2S的时钟还在吗?还有就是你怎么知道没有声音呢?你是要通过MIC的数据从Speaker放出来吗?如果这样的话,你要把Din与Dout连接在一起。