rk3568 es8388声卡调试

目录

目录

1. 准备

2. 声卡驱动

2.1 驱动源码

2.2 修改配置文件

3. 设备数配置

3.1 声卡设备工作原理

3.1.1 原理图

3.1.2 引脚功能

3.1.3 芯片处理音频流程

3.2 音频传输协议I2S

3.3 设备数配置

3.3.1 设备数声卡节点配置

3.3.2 es8388 codec配置

3.4 声卡检测

4. 声卡测试

4.1 播放测试

 4.2 录音测试

4.3 工具说明 


1. 准备

kernel 4.19版本的sdk。

2. 声卡驱动

2.1 驱动源码

es8388的芯片可以用内核里面8323的驱动源码,因此没有往内核里面加入声卡的驱动。

es8323在sound/soc/codecs/es8323.c、sound/soc/rockchip/rockchip_multicodecs.c中

可以通过更改寄存器的值,来增大或者减小声音 

2.2 修改配置文件

修改rockchip_linux_defconfig配置文件,目录为(arch/arm64/configs/),将驱动加载到内核中

3. 设备数配置

3.1 声卡设备工作原理

3.1.1 原理图

3.1.2 引脚功能
  • MCLK:主时钟(也叫过采样率)一般是采样频率的128、或256、或384或512倍
  • SCLK:主时钟串行数据位时钟(例:2(左右声道)x16(位宽)x8k(采样率))
  • LOUT/ROUT:扬声器输出
  • LRCK:串行数据左右通道帧时钟(采样率)
  • MIC_IN(LIN1/LIN2):麦克风的输入
  • I2C的芯片地址(0x10,7位地址)
3.1.3 芯片处理音频流程
  • 音频播放时:将音频文件通过I2S数据传输给es8388芯片对文件数据进行解码并将数字音频转换成模拟音频,最后通过耳麦或扬声器传出。
  • 音频采集时:由麦克风输入模拟信号,在由es8388芯片进行编码和转换成数字信号,最后存入指定的内存当中。

3.2 音频传输协议I2S

I2S(Inter-IC Sound)是一种用于数字音频传输的串行通信协议。它主要用于将音频数据传输到数字音频处理器(例如解码器、编码器等)或其他数字音频设备。

I2S协议使用三根线进行数据传输:时钟线(SCLK)、帧同步线(LRCLK)和数据线(DS)。时钟线用于同步数据传输,帧同步线用于标识数据帧的开始和结束,数据线则传输实际的音频数据。

在此次移植中soc与es8388芯片之间使用I2S数据传输模式。

soc为主设备,es8388芯片为从设备。

3.3 设备数配置

3.3.1 设备数声卡节点配置
	es8388_sound: es8388-sound {
		status = "okay";
		compatible = "rockchip,multicodecs-card";    
		rockchip,card-name = "rockchip,es8388-codec";    //card name
                rockchip,format = "i2s";                 //set data type
                rockchip,mclk-fs = <256>;                //void signal
                rockchip,cpu = <&i2s3_2ch>;
                rockchip,codec = <&es8388>;                //set codec
                rockchip,audio-routing =
			"Speaker", "LOUT1",
			"Speaker", "ROUT1",
			"LINPUT1", "Main Mic",
			"RINPUT1", "Main Mic";
	};

用的是rk指导文档中Multi Codecs Machine Driver模式,即用于 1个 DAI 对应多个 CODEC,或者 Combo DAI 对应 多个 CODEC 的场景。
 

节点主要配置如下:

compatible:用于匹配相应的驱动文件,不用改,自带的平台驱动

rockchip,format:设置数据传输格式

rockchip,mclk-fs:mclk为采样率的256倍

rockchip,cpu:声卡和 cpu 之间的连接关系以及使用的音频接口

rockchip,codec:实现声卡和es8388编解码器(codec)之间的数据传输

rockchip,audio-routing:用于指定音频的输入和输出之间的链接,以及音频信号的路径和流向。

3.3.2 es8388 codec配置
&i2c2 {
	status = "okay";
	pinctrl-names = "default";
	clock-frequency = <100000>;
	pinctrl-0 = <&i2c2m1_xfer>;

        es8388: es8388@10 {
		status = "okay";
		#sound-dai-cells = <0>;
        #clock-cells = <0>;
		compatible = "everest,es8388", "everest,es8323";
		reg = <0x10>;
        clocks = <&cru I2S3_MCLKOUT>;
		clock-names = "mclk";
		assigned-clocks = <&cru I2S3_MCLKOUT>, <&cru I2S3_MCLK_IOE>;
		assigned-clock-rates = <12288000>;
		assigned-clock-parents = <&cru I2S3_MCLKOUT_TX>, <&cru I2S3_MCLKOUT>;
		pinctrl-names = "default";
		pinctrl-0 = <&i2s3m0_mclk>;
	};
};

这是音频编解码器(codec)节点

compatible:用于配置E8323的驱动

assigned-clock-rate:时钟的频率

pinctrl-0:i2c的控制引脚,i2c2有M0和M1,注意看原理图具体用的是哪一个

reg:I2C的7位地址

3.4 声卡检测

 # 检查音频设备
arecord -l

#获取声卡硬件参数
arecord -D hw:1,0 --dump-hw-params

4. 声卡测试

4.1 播放测试

从上面检测中可以看出es8388是声卡1

aplay -D "plughw:1,0"  -f S16_LE -c 2 -r 8000 music.wav

 4.2 录音测试

arecord -D "plughw:1,0" -f S16_LE -c 2 -r 8000 -d 30 -t wav output.wav

4.3 工具参数说明 

-d 10表示录制10秒声音,output.wav是保存的文件名称

-D hw:x  表示指定第几个声卡

-r 指定采样率,-f 指定每个采样点的位数--样本大小

-c <通道数>:指定通道数,通常是1(单声道)或2(立体声)。

-f:设置采样格式

-t:文件类型voc,wav,raw或au)

参考链接: linux rk3568 es8326声卡移植-CSDN博客

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值