I2S (一)杂谈

参考资料,强力推荐,i2s协议接口及相关

pcm
	4根线,与i2s类似
i2s
	4根线
ac97
	5根线
tdm ? // 这个不是一个硬件接口,而是i2s中的一个模式.i2s标准格式,左对齐,右对齐,dsp/pcm,TDM(时分复用)是齐平的.
pdm ? // 频分多路复用 
用来传输 音频数据的
  • 哪里有
手机,电脑,录音设备,放音设备
  • 与 常见外设的关系
收音设备:
	mic
	耳机中的录音孔
放音设备
	speaker
	耳机
在连接中可下载
  • 关键线序
// 标准中是三根
1/ MCLK
2/ LRCLK(LRCK)
3/ SCLK
// master 提供 SCK 和 LRCK(也叫WS) .从外部时钟输入MCLK可以导出其内部时钟信号
4/ SDIN
5/ SDOUT

音频相关概念
采样频率(采样率) 单位 : sample/second // sps
    1秒同时对多个声道完成adc采样的次数
量化点数 单位 : bit/每个声道 (有符号数)
声道数目 单位 :// 一般要不是单声道 要不是就是双声道

所以 声音数据的传输频率 应该为 采样频率 * 量化点数 * 声道数目 ,最终单位为 bps(bit/second)(bit per second)

注意单位的转换:

kbps = 1000 bps
Kb = 1024b 

采样频率一般为多少
正常人听觉的频率范围大约在20Hz~20kHz之间,根据奈奎斯特采样理论,为了保证声音不失真,采样频率应该在40kHz左右。常用的音频采样频率有8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz等,如果采用更高的采样频率,还可以达到DVD的音质。


音频概念在i2s中的应用

1 channel 在i2s 中是怎么表现的?
	如果设置的是两声道,采样点数为16bit,一帧为两声道,且一个声道为16bit.
	那么从开启i2s后
		第1次读取(必须开启后马上读)I2S_READ_DATA的数据为左声道数据, // 或用dma2次读取(必须连续读)I2S_READ_DATA的数据为右声道数据,
		...2n+1次读取(必须连续读)I2S_READ_DATA的数据为左声道数据,2n+2次读取(必须连续读)I2S_READ_DATA的数据为右声道数据,
		
	如果采样是16bit,那么可以说在一个采样点一个声道采样了16bit.
	如果是2()声道,可以说2个声道分别采样了16bit,这两个16bit 是不一样的.
2、录音到底是录立体声还是单声道 ? 
答:电脑录音可以是立体声(双声道),但是如果咪头只有一个,所以也只是对单声道的double而已.???
 
3、如何录出立体声? 
答:使用立体声话筒,或者使用两只话筒通过不同摆位拾音。
4 FS 是什么
	Frame size
	https://blog.csdn.net/lugandong/article/details/72468831
	256FS 代表 在 一个LRCK 周期内,i2s_data 上 传输了 256 bit 的 数据.

5 i2s接口如何传输4(2n,n>=2)声道
	方案1
		可以利用I2S的接口,用TDM模式传多个声道的数据。
		参考es7210 的 TDM格式,建图1
	方案2
		增加data线???
		I?S controller has only to handle audio data. I?S controller only supports I2S-bus format with 16-bit length. In 2 channel
		mode, 4-line serial bus is used consisting of a line for two time-multiplexed data channels (DA_DATA0 and
		AD_DATA), a word select line (SYNC) and a clock line (BIT_CLK). In 5.1 channel mode, two more wires (DA_DATA1
		and DA_DATA2) are needed to transmit four channels data. In 5.1 channel mode, DA_DATA0 carries 1st and 2nd
		channel audio data, DA_DATA1 carries 3rd and 4th audio data, and DA_DATA2 carries 5th and 6th audio data. I?S
		controller can work as master or slave mode.

在这里插入图片描述

i2s 数据格式

	有什么
		LJ,RJ,I2S,DSP,PCM,TDM
		
	https://blog.csdn.net/yuhengyue/article/details/80938596
	https://www.cnblogs.com/lihaiping/p/4795418.html

		
ASoC currently supports the three main Digital Audio Interfaces (DAI) found on
SoC controllers and portable audio CODECs today, namely AC97, I2S and PCM.


AC97
====

  AC97 is a five wire interface commonly found on many PC sound cards. It is
now also popular in many portable devices. This DAI has a reset line and time
multiplexes its data on its SDATA_OUT (playback) and SDATA_IN (capture) lines.
The bit clock (BCLK) is always driven by the CODEC (usually 12.288MHz) and the
frame (FRAME) (usually 48kHz) is always driven by the controller. Each AC97
frame is 21uS long and is divided into 13 time slots.

The AC97 specification can be found at :-
http://www.intel.com/design/chipsets/audio/ac97_r23.pdf

I2S
===

 I2S is a common 4 wire DAI used in HiFi, STB and portable devices. The Tx and
Rx lines are used for audio transmission, whilst the bit clock (BCLK) and
left/right clock (LRC) synchronise the link. I2S is flexible in that either the
controller or CODEC can drive (master) the BCLK and LRC clock lines. Bit clock
usually varies depending on the sample rate and the master system clock
(SYSCLK). LRCLK is the same as the sample rate. A few devices support separate
ADC and DAC LRCLKs, this allows for simultaneous capture and playback at
different sample rates.

I2S has several different operating modes:-

 o I2S - MSB is transmitted on the falling edge of the first BCLK after LRC
         transition.

 o Left Justified - MSB is transmitted on transition of LRC.

 o Right Justified - MSB is transmitted sample size BCLKs before LRC
                     transition.

PCM
===

PCM is another 4 wire interface, very similar to I2S, which can support a more
flexible protocol. It has bit clock (BCLK) and sync (SYNC) lines that are used
to synchronise the link whilst the Tx and Rx lines are used to transmit and
receive the audio data. Bit clock usually varies depending on sample rate
whilst sync runs at the sample rate. PCM also supports Time Division
Multiplexing (TDM) in that several devices can use the bus simultaneously (this
is sometimes referred to as network mode).

Common PCM operating modes:-

 o Mode A - MSB is transmitted on falling edge of first BCLK after FRAME/SYNC.

 o Mode B - MSB is transmitted on rising edge of FRAME/SYNC.
————————————————
版权声明:本文为CSDN博主「sepnic」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/azloong/article/details/6536855
  • i2s 飞利浦标准
    在这里插入图片描述

  • 左对齐
    在这里插入图片描述

  • 右对齐 (日本i2s格式)
    在这里插入图片描述

  • dsp/pcm modeA
    在这里插入图片描述

  • dsp/pcm modeB
    在这里插入图片描述

实际时序

下面的为 16bit 48K采样 2channel i2s模式 放音 实际采样数据
实际左声道(WS为0)的数据才有意义,右声道(WS为0)的数据为0.
在这里插入图片描述

芯片

  • 收音
苏州顺芯 
	ES7210 4ADC(MIC)音频模数转换IC 	4mic
	ES7243 2路ADC(MIC)音频模数转换IC 	2mic
  • 放音
苏州顺芯
	es7149 // a low cost 12-pin stereo digital to analog converter
	ht6819 // 3.3V带数字音量控制/防筱顶低EMI立体声D类音频功率放大器 

音频

应用:
	语音(voice)和音乐(music)。
	语音主要用于沟通通信,如打电话,现在由于语音识别的发展,人机语音交互也是语音的一个应用,目前正在风口上,好多大厂都推出了智能音箱。音乐主要用于欣赏,如音乐播放。


在音频处理时要先把音频的模拟信号变成数字信号,这叫A/D转换。当要把音频播放出来时则需要把数字信号转换成模拟信号,这叫D/A转换。

要把音频的模拟信号变成数字信号,就需要采样,或者叫抽样。

一秒钟内采样的次数称为采样频率。根据Nyquist采样定理,要想重建原始信号,采样频率必须大于信号中最高频率的两倍。

采样频率越高,越接近原始信号,但是也加大了运算处理的复杂度。


人能感受到的频率范围为20HZ--20kHZ, 一般音乐的采样频率为44.1kHZ(根据Nyquist采样定理,采样频率大于信号中最高频率的两倍), 更高的可以是48kHZ和96kHZ,不过一般人用耳听感觉不出差别了。

语音主要是以沟通为主,不需要像音乐那样清晰,分窄带和宽带。窄带频率范围为300Hz--3400Hz,相应的采样频率为8000Hz; 宽带频率范围为50Hz--7000Hz,相应的采样频率为16000Hz,用16k采样的语音就称为高清语音了。现在主流的语音采样频率为16kHz。

信号的频率 是怎么算出来的?

咪头

咪头输出电压信号,这个没错,但是信号很小,只有几mv到十几mv,必须经过一级放大电路放大。

电容式的咪头还需要给一个偏置电压,这个网上有很多资料,你可以再找找。

普通单片机是数字电路,无法直接读取这个电压的,必须先ad(模拟数字)转换,转成数字量信号,才能读取输出电压。

所以咪头输出不能直接连接单片机,除非单片机自带a/d功能。

WM8978放音录音芯片管脚

录音部分:
	WM8978结构图的左边部分是输入部分,可用于模拟声音输入,即用于录音输入。有三个输入接口,一个是由LIN和LIP、RIN和RIP组合而成的伪差分立体声麦克风输入,一个是由L2和R2组合的立体声麦克风输入,还有一个是由AUXL和AUXR组合的线输入或用来传输告警声的输入。

放音部分:
	WM8978结构图的右边部分是声音放大输出部分,LOUT1和ROUT1用于耳机驱动,LOUT2和ROUT2用于扬声器驱动,OUT3和OUT4也可以配置成立体声线输出,OUT4也可以用于提供一个左右声道的单声道混合。

数据输入输出:
	ADCDAT
	DACDAT
	WM8978结构图的中边部分是芯片核心内容,处理声音的AD和DA转换。ADC部分对声音输入进行处理,包括ADC滤波处理、音量控制、输入限幅器/电平自动控制等等。DAC部分控制声音输出效果,包括DAC5路均衡器、DAC 3D放大、DAC输出限幅以及音量控制等等处理。

时钟部分
	MCLK
	LRC
	BCLK
	SCLK
控制部分 // 一般都是用i2c 做芯片控制,i2s 做芯片数据,及时钟同步

	MODE
数据部分
	SDIN

这个错误提示意味着es8388驱动没有正确设置主时钟(MCLK)。一般情况下,主时钟是由系统时钟(Sysclk)经过分频得到的。因此,需要在驱动程序中调用set_sysclk()函数来设置系统时钟,然后根据需要计算出主时钟的频率并设置主时钟。以下是一个示例代码片段,以供参考: ``` static int es8388_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct es8388_priv *es8388; int ret; es8388 = devm_kzalloc(&client->dev, sizeof(struct es8388_priv), GFP_KERNEL); if (!es8388) return -ENOMEM; es8388->regmap = devm_regmap_init_i2c(client, &es8388_regmap_config); if (IS_ERR(es8388->regmap)) { dev_err(&client->dev, "Failed to allocate register map\n"); return PTR_ERR(es8388->regmap); } ret = es8388_reset(es8388); if (ret) return ret; ret = es8388_set_fmt(es8388, SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS); if (ret) return ret; ret = es8388_set_sysclk(es8388, ES8388_SYSCLK_MCLK, 256 * 1024 * 1024, 256 * 1024 * 1024); if (ret) return ret; ret = devm_snd_soc_register_component(&client->dev, &es8388_component_driver, es8388_dai, 1); if (ret) { dev_err(&client->dev, "Failed to register component: %d\n", ret); return ret; } return 0; } ``` 在这个代码片段中,我们调用了es8388_set_sysclk()函数来设置主时钟的频率。在这个函数中,第一个参数指定了主时钟的源,第二个参数是主时钟的频率,第三个参数是系统时钟的频率。在这个例子中,我们将主时钟的频率设置为256MHz,系统时钟的频率也为256MHz。 如果您仍然无法解决问题,请查看您的驱动程序代码,确保正确设置了主时钟。如果问题仍然存在,请提供更详细的信息,以便我们更好地帮助您解决问题。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值