TI tlv320aic3104 codec调试之DAI

参考资料

https://www.cnblogs.com/bobfly1984/p/14277682.html

codec DAI介绍

lv320aic3104 codec DAI支持 left-justified 、right-justified、I2S、DSP、TDM操作模式。这些模式都是MSB-FIRST。

WCLK定义一个帧的开始,通过编程实现脉冲信号或矩形波信号。其频率对应ADC/DAC采样率。
BCLK用于在数据线DIN/DOUT上输入和输出数据。

TDM模式是在DSP A/B模式基础上通过修改offset寄存器实现。当offset等于0时,从信号时序角度看TDM模式就是DSP A/B模式,换句话说DSP A/B模式其实是TDM模式的特例。

offset就是在每帧里数据开始有效对应的bit clock。

在TDM模式里支持和标准电话PCM接口通信,标准电话PCM接口采用DSP A模式。codec的DSP模式其实就是 DSP B模式。在DSP B模式下修改offset实现DSP A模式。

codec DAI时序

1:Right-Justified Mode

2:Left-Justified Mode

3:I2S Mode

4:DSP Mode
每个数据在bit clock的下降沿有效。

5:TDM数据传输模式

TDM模式

基于DSP A/B模式,通过修改可编程的offset实现TDM数据传输。offset就是在每个帧内数据开始有效对应的bit clock。

对于输出数据而言,除了输出有效数据到DOUT 期间,在剩余bit clocks期间DOUT可以编程为高阻抗状态,这允许多个codecs
通过编程不同的offset在共享的DOUT line上输出数据,每个codec数据只是在不同的slot时隙上。
对于输入数据而言,codec只关注offset指定的数据,忽略其它bit clock期间的数据。

从代码角度看DSP B模式如何转化成DSP A模式或TDM模式

codec的datasheet如下所示,这个DSP 模式从信号时序看就是DSP B模式。


上面参数中width参数就是slot占用的bits数,tdm_delay参数代表第几个slot,delay参数就是上面说的offset。
width和tdm_delay参数是通过回调函数set_tdm_slot()设置的,当tdm_delay参数等于0时,默认就是DSP B模式。基于DSP B模式延迟一个bit clock就是DSP A模式。
tdm_delay参数决定了数据在哪个slot上有效。

时钟是否翻转

从代码确认codec在DSP A/B模式下仅仅支持 SND_SOC_DAIFMT_IB_NF。这个宏的详细描述如下所示:

可见codec在DSP A/B模式下,仅仅支持数据在BCLK的下降沿有效。

mdm9x07平台 pcm接口时序

通过示波器测量,PCM接口master和slave模式在波形上是一样的。同时 frame format是DSP A模式,信号极性是SND_SOC_DAIFMT_IB_NF。

1:master mode

2:slave mode

mdm9x7平台 TDM接口时序


TMD 接口格式支持不同的frame sync 模式:one slot、short、long。

codec DAI实现方案

基于TI tlv320aic3104 codec调试之clock这篇博客的分析,确认cpu需要通过pcm接口和codec dai进行通信。通过上面分析cpu pcm接口工作在DSP A模式,因此配置codec dai工作在DSP A模式即可,同时信号极性是SND_SOC_DAIFMT_IB_NF。

为简单实现,通过machine驱动定义的be_hw_params_fixup()回调函数实现保持后端CPU DAI和codec DAI的hw params 固定不变,即设置采样率16k,采样精度16bit,声道数1。
由于DAI配置为PCM接口,采样率只能设置为16K和8K,如果要动态切换cpu和codec的hw params,必须在audio或voice use case开始前设置。

posted @ 2021-01-29 17:21  bobfly1984  阅读(514)  评论(0编辑  收藏  举报