This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

紧急求助!!AM3352 I2S无数据信号,Codec芯片使用TLV320AIC3101

Other Parts Discussed in Thread: AM3352, TLV320AIC3101

配置上:TLV320AIC BCLK与WCLK配置为主模式,MCLK由AM3352提供 24MHz,BCLK44.1KHz,WCLK:1.4112MHz
播放wav格式文件时,BLCK与WCLK可以测试到波形,正常,I2S的数据线上测试不到波形,一直为低。
BCLK与WCLK波形如下:
 

打印Log如下:

root@am335x-adv:~# aplay -N /unit_tests/Advantech.wav
Playing WAVE '/unit_tests/Advantech.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
^CAborted by signal Interrupt...
root@am335x-adv:~# aplay -v /unit_tests/Advantech.wav
Playing WAVE '/unit_tests/Advantech.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
Plug PCM: Hardware PCM card 0 'AM335X EVM' device 0 subdevice 0
Its setup is:
stream : PLAYBACK
access : RW_INTERLEAVED
format : S16_LE
subformat : STD
channels : 2
rate : 44100
exact rate : 44100 (44100/1)
msbits : 16
buffer_size : 32768
period_size : 2048
period_time : 46439
tstamp_mode : NONE
period_step : 1
avail_min : 2048
period_event : 0
start_threshold : 32768
stop_threshold : 32768
silence_threshold: 0
silence_size : 0
boundary : 1073741824
appl_ptr : 0
hw_ptr : 0
aplay: pcm_write:1710: write error: Input/output error

出现这个错误可能的原因是哪些?硬件问题?

TLV320AIC3101部分原理图如下,R247是断开的。

补充一下:AM3352TLV320AIC3101 I2S接口:

配置:

16个串行器:AXR0为发送模式,对应I2S_DOUT;AXR1:禁止、AXR2:禁止;AXR3:接收模式,对应I2S_DIN;其余:禁止。

static u8 am335x_iis_serializer_direction0[] = {
TX_MODE, INACTIVE_MODE, INACTIVE_MODE, RX_MODE,
INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
};

这两天把 MCASP接口看了一下,寄存器查询结果:

[   20.670737] mcasp_get_reg addr=fa0380bc val=0      (XINCTRL=0x00
[   20.670744] mcasp_get_reg addr=fa038044 val=1f00  (GBLCTL= 0x1f00)
[   20.670750] mcasp_get_reg addr=fa0380c0 val=104   (XSTAT=0x104)
[   20.670757] mcasp_get_reg addr=fa0380cc val=0       ( XEVTCTL=0x00)
[   20.670764] mcasp_get_reg addr=fa0380b0 val=0       (ACLKXCTL=0x00)

XINCTRL=0x00,中断未使能,中断信号的产生是 XRBUF与XRSR之间有数据传输时才会产生,现在没有中断说明,XRBUF与XRSR之间无数据传输。

GBLCTL = 0x1f00,说明跟发送相关的串行器 复位已经释放、时钟也在运行。

复位与时钟都正常,还会有什么因素造成XRBUF与XRSR之间无数据传输?

有没有大佬帮忙再看下,卡了好久了,在线等。。。。。

 

 

  • 请问你用的是哪个版本的SDK?有修改过驱动么?
  • 有在
    TLV320AIC3101的评估板上试过吗
  • 请问mcasp pinmux有没有设置?
  • 不好意思,前几天还在折腾这个问题,不过目前还是无进展,现象一样。
    我们是用了一块AM3352的模块,SDK版本: AM335XLBV1110_2016-12-07。
    底层驱动没有做修改。
  • pinmux配置如下:
    static struct pinmux_config mcasp0_pin_mux[] = {
    {"mii1_txclk.mcasp0_aclkx", OMAP_MUX_MODE6 | AM33XX_PIN_INPUT_PULLDOWN},
    {"mii1_rxclk.mcasp0_fsx", OMAP_MUX_MODE6 | AM33XX_PIN_INPUT_PULLDOWN},
    {"mii1_rxd0.mcasp0_axr3", OMAP_MUX_MODE6 | AM33XX_PIN_INPUT_PULLDOWN},
    {"mii1_rxd3.mcasp0_axr0", OMAP_MUX_MODE6 | AM33XX_PIN_INPUT_PULLDOWN},
    {NULL, 0},
    };
  • 之前没结果过音频接口,对MCASP这个接口不太熟悉,这里的串行化设置不知道是否对?

    static u8 am335x_iis_serializer_direction0[] = {
    TX_MODE, INACTIVE_MODE, INACTIVE_MODE, RX_MODE,
    INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
    INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
    INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
    };

    static struct snd_platform_data am335x_evm_snd_data0 = {
    .tx_dma_offset = 0x46000000, /* McASP0 */
    .rx_dma_offset = 0x46000000,
    .op_mode = DAVINCI_MCASP_IIS_MODE,
    .num_serializer = ARRAY_SIZE(am335x_iis_serializer_direction0),
    .tdm_slots = 2,
    .serial_dir = am335x_iis_serializer_direction0,
    .asp_chan_q = EVENTQ_2,
    .version = MCASP_VERSION_3,
    .txnumevt = 32,
    .rxnumevt = 32,
    .get_context_loss_count =
    omap_pm_get_dev_context_loss_count,
    };
  • 这两天把 MCASP接口看了一下,寄存器查询结果:

    [   20.670737] mcasp_get_reg addr=fa0380bc val=0      (XINCTRL=0x00)
    [   20.670744] mcasp_get_reg addr=fa038044 val=1f00  (GBLCTL= 0x1f00)
    [   20.670750] mcasp_get_reg addr=fa0380c0 val=104   (XSTAT=0x104)
    [   20.670757] mcasp_get_reg addr=fa0380cc val=0       ( XEVTCTL=0x00)
    [   20.670764] mcasp_get_reg addr=fa0380b0 val=0       (ACLKXCTL=0x00)

    XINCTRL=0x00,中断未使能,中断信号的产生是 XRBUF与XRSR之间有数据传输时才会产生,现在没有中断说明,XRBUF与XRSR之间无数据传输。

    GBLCTL = 0x1f00,说明跟发送相关的串行器 复位已经释放、时钟也在运行。

    复位与时钟都正常,还会有什么因素造成XRBUF与XRSR之间无数据传输?

    有没有大佬帮忙再看下,卡了好久了,在线等。。。。。

     

  • 补充一下:AM3352与TLV320AIC3101 I2S接口:

    配置:

    16个串行器:AXR0为发送模式,对应I2S_DOUT;AXR1:禁止、AXR2:禁止;AXR3:接收模式,对应I2S_DIN;其余:禁止。

    static u8 am335x_iis_serializer_direction0[] = {
    TX_MODE, INACTIVE_MODE, INACTIVE_MODE, RX_MODE,
    INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
    INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
    INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
    };

  • 是从外面买的AM3352的硬件模块,然后自己下载的TI Linux SDK么?
    TI Linux SDK自带MCASP驱动,但是肯定要根据硬件做移植的,首先要检查系统pinmux配置。
  • 是外购购买的模块。
    pinmux已经根据我的硬件配置了,配置如下:
    static struct pinmux_config mcasp0_pin_mux[] = {
    {"mii1_txclk.mcasp0_aclkx", OMAP_MUX_MODE6 | AM33XX_PIN_INPUT_PULLDOWN},
    {"mii1_rxclk.mcasp0_fsx", OMAP_MUX_MODE6 | AM33XX_PIN_INPUT_PULLDOWN},
    {"mii1_rxd0.mcasp0_axr3", OMAP_MUX_MODE6 | AM33XX_PIN_INPUT_PULLDOWN},
    {"mii1_rxd3.mcasp0_axr0", OMAP_MUX_MODE6 | AM33XX_PIN_INPUT_PULLDOWN},
    {NULL, 0},
    };