[alsa-devel] I2S frame configuration
thomas chen
tchen61 at gmail.com
Tue Dec 9 14:51:45 CET 2014
I have set up according to the thread.... but when I attempt to play a
sound file (with aplay)
the program just stop ....
aplay -vvv showed the below....
Plug PCM: Linear conversion PCM (S24_3LE)
Its setup is:
stream : PLAYBACK
access : RW_INTERLEAVED
format : S16_LE
subformat : STD
channels : 2
rate : 48000
exact rate : 48000 (48000/1)
msbits : 16
buffer_size : 21844
period_size : 5461
period_time : 113770
tstamp_mode : NONE
period_step : 1
avail_min : 5461
period_event : 0
start_threshold : 21844
stop_threshold : 21844
silence_threshold: 0
silence_size : 0
boundary : 1431568384
Slave: Hardware PCM card 0 'TI I2S' device 0 subdevice 0
Its setup is:
stream : PLAYBACK
access : MMAP_INTERLEAVED
format : S24_3LE
subformat : STD
channels : 2
rate : 48000
exact rate : 48000 (48000/1)
msbits : 16
buffer_size : 21844
period_size : 5461
period_time : 113770
tstamp_mode : NONE
period_step : 1
avail_min : 5461
period_event : 0
start_threshold : 21844
stop_threshold : 21844
silence_threshold: 0
silence_size : 0
boundary : 1431568384
appl_ptr : 0
hw_ptr : 0
Max peak (10922 samples): 0x0000001a # 0%
Max peak (10922 samples): 0x0000001a # 0%
Max peak (10922 samples): 0x0000001a # 0%
Max peak (10922 samples): 0x00002aed ####### 33%
I have
struct snd_soc_dai_link dai_i2s[] = {
{
.name = "I2S",
.codec_dai_name = "i2s-hifi",
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBM_CFM |
SND_SOC_DAI_FMT_IB_NF,
}
Seems like the something (maybe clock ?) is missing ???
Thx
On 12/8/2014 2:37 PM, Lars-Peter Clausen wrote:
> On 12/08/2014 07:03 PM, thomas chen wrote:
>>
>> Thanks for the info... so it is possible for Asoc to handle such
>> format...
>
> Yes, its not a special format, it is just plain and simple I2S like it
> is supported by the majority of all drivers/devices.
>
>>
>> So where does one specify number of bits in a FRAME/WORD (epsecially
>> if we
>> were to be master instead of slave ?)
>
> That's typically specified in the format that is used, e.g. in your
> case SNDRV_PCM_FORMAT_S24_3LE. This is not necessarily ideal for all
> cases, but has work well enough so far.
>
>>
>> and, how does one specify number of bits to ignore (before the valid
>> data)
>
> There are no bits to ignore the valid data. I2S has a delay of 1 bit
> clock cycle between the first bit of the sample and the frame sync
> signal. So the data bit that is transmitted on the same clock cycle as
> the frame sync is actually the last bit of the previous sample. So in
> your case your sample has 16 valid bits followed by 8 ignored bits.
>
>>
>> and also how many valid bits (ie size of data word) ???
>
> You can set a snd_pcm_hw_constraint_msbits() constraint to tell
> userspace that only a certain amount of bits are actually going to be
> used.
>
> If you are using ASoC you can do this by setting the sig_bits property
> on your snd_soc_dai_driver.
>
> - Lars
>
>>
>> Thanks...
>>
>>
>>
>>
>> On 12/8/2014 12:01 PM, Clemens Ladisch wrote:
>>> thomas chen wrote:
>>>> I am working on a ALSA interface to a particular codec over I2S
>>>>
>>>> the audio stream format is a bit peculiar...
>>>>
>>>> there are 24 BCLK cycle between transition of FSYNC... howver, there
>>>> are only 16 bit that are valid
>>>>
>>>> bit 0: ignore
>>>> bit 1-16: valid pcm data (MSB....LSB)
>>>> bit 17-23: ignore
>>> This is the 'original' I²S format. The format where the sample begins
>>> with the 1st BCLK usually is called left-justified (and uses the
>>> opposite FSYNC polarity).
>>>
>>> Having ignored bits is common. (Typically, there are 32 BCLK cycles
>>> per
>>> sample.)
>>>
>>> In ASoC, this would be SND_SOC_DAIFMT_I2S and SND_SOC_DAIFMT_LEFT_J.
>>>
>>>
>>> Regards,
>>> Clemens
>>
>> _______________________________________________
>> Alsa-devel mailing list
>> Alsa-devel at alsa-project.org
>> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>
More information about the Alsa-devel
mailing list