ti的工程师:
我们公司一个音频的项目,基本架构是c6748加AIC3106。后来换了一个codec,这个codec是cs4272是一个24bit的codec,前一段时间问了芯片原厂,原厂建议暂时用16bit进行数据传输。我配置codec'后基本的数据结构如下图。16bit ,i2s格式,左对齐,没有延时位。
帧时钟上升沿触发,位时钟也是上升沿触发,没有延时位,只进行单通道放音时我用逻辑分析仪抓了图。可以看出抓的数据和手册描述一致,且只有一个声道有数据。
DSP的配置,DSP做主。接收帧R是上升沿触发,位时钟上升沿触发。发送帧X是下降沿触发,位时钟下降沿触发。
//接收端 // 初始化帧同步,TDM 格式使用 slot 个数,对齐帧同步信号的上升沿 0428 修改为mcasp内部驱动 McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, slotNum, MCASP_RX_FS_WIDTH_WORD, MCASP_RX_FS_INT_BEGIN_ON_RIS_EDGE); // 初始化接收时钟,使用内部时钟,时钟上升沿有效 0528 48kHz McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_INTERNAL, 7, 1); McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,0x00, 0xFF); ...... ...... //发送端McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, slotNum, MCASP_TX_FS_WIDTH_WORD,MCASP_TX_FS_INT_BEGIN_ON_FALL_EDGE); // 初始化发送时钟,使用内部时钟,时钟下降沿有效 0528 McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 7, 1); McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,0x00, 0xFF);
但是经过DMA接收的数据明显不对,应该是0xXXXX 0x0000这样才对,用扬声器播放出来的都是杂音。我第一感觉是哪里没有对齐导致数据全部错了。
我换成原来的AIC3106做了对比,这里接收的数据是0xXXXX 0x0000格式,播放和录音也正常了。
现在两个codec的配置不同的地方如下:之前是3106做主,DSP做从。现在的配置DSP做主帧时钟、位时钟、都是DSP发到codec的,其他的格式我按照手册都对了,asp的接收发送的边沿触发也换了好几次都不对,请问一下还有哪里需要注意的。
taoyu:
我在补充一点,这次使用的codec是cs4272,论坛里有朋友用过这款codec吗。
Shine:
回复 taoyu:
同帖e2echina.ti.com/…/447216