
打印Log如下:
root@am335x-adv:~# aplay -N /unit_tests/Advantech.wavPlaying 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.wavPlaying 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是断开的。

补充一下: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,
};
这两天把 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之间无数据传输?
有没有大佬帮忙再看下,卡了好久了,在线等。。。。。


Jian Zhou:
请问你用的是哪个版本的SDK?有修改过驱动么?
yongqing wang:
有在TLV320AIC3101的评估板上试过吗
Shine:
请问mcasp pinmux有没有设置?
user5161852:
回复 yongqing wang:
没有评估板。
user5161852:
回复 Jian Zhou:
不好意思,前几天还在折腾这个问题,不过目前还是无进展,现象一样。
我们是用了一块AM3352的模块,SDK版本: AM335XLBV1110_2016-12-07。
底层驱动没有做修改。
user5161852:
回复 Shine:
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},
};
user5161852:
回复 Jian Zhou:
之前没结果过音频接口,对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,
};
user5161852:
回复 user5161852:
这两天把 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之间无数据传输?
有没有大佬帮忙再看下,卡了好久了,在线等。。。。。
user5161852:
回复 user5161852:
补充一下: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,};
Jian Zhou:
回复 user5161852:
是从外面买的AM3352的硬件模块,然后自己下载的TI Linux SDK么?
TI Linux SDK自带MCASP驱动,但是肯定要根据硬件做移植的,首先要检查系统pinmux配置。
TI中文支持网