树莓派打造一个适合音乐制作的系统(声卡部分)

之前有讲过如何做一个非USB的具有输入输出的声卡,目前现成的方案有WM8731或者hifiberry DAC+ADC pro,他们都是在启动时加载驱动的,但如果我们想要使用其他的codec,怎么办呢?经过一番研究,发现可以用simple card来创建一个声卡设备,并且让树莓派作为从机,那么本文通过几个部分来讲述,一个是硬件部分,一个是软件部分。

首先说明一下,我的目的是想通过树莓派作为一个实时音频处理器,将输入的音频信号做处理并输出。

好的,朝着这个方向来解决问题,第一个,硬件部分就是DIY一个声卡,采用的是CS4272这一片codec,它的模数,数模具有114db的动态范围,高达192k的采样率,按照官方pdf说明,我搭建了如下电路

声卡电路

外部时钟部分,由一颗12.288M有源晶振提供,用74HC4040作分频器,那么74HC4040的4脚为4分频输出,13脚为256分频输出,分别得到BCK和LRCK;那么对于玩解码器的朋友自然很清楚这三根时钟线的作用。那么CS4272和树莓派将作为从机接受外部时钟信号,树莓派不需要MCK时钟,只需要LRCK和BCK。

 外部I2S时钟与树莓派连接:

=======================================================================

接下来要做的事情就是在树莓派上创建一个声卡,并设置为从机模式。

软件部分:我们现在要在树莓派上创建一个声卡设备,并设置成从机模式,原文地址如下,嫌麻烦的可以不看,直接往下。

Old Kernel Install Method | Adafruit I2S MEMS Microphone Breakout | Adafruit Learning System

那么开始,我用的是RPI3做演示:

1、安装编译依赖

sudo apt-get install git bc libncurses5-dev bison flex libssl-dev

2、下载内核源代码并编译

sudo wget https://raw.githubusercontent.com/notro/rpi-source/master/rpi-source -O /usr/bin/rpi-source
sudo chmod +x /usr/bin/rpi-source
/usr/bin/rpi-source -q --tag-update
rpi-source --skip-gcc

 解释一下:rpi-source这个文件将会被下载到/usr/bin目录中,同时,内核源码会下载到/homg/pi下,执行完成上述命令可能需要十几分钟时间,pi zero时间会更长。

3、下载I2S模块

git clone https://github.com/PaulCreaser/rpi-i2s-audio
cd rpi-i2s-audio

 rpi-i2s-audio文件夹下, 打开文件my_loader.c

如果使用的是pi zero,,改下面两行

.platform = "3f203000.i2s",和.name = "3f203000.i2s",

改成

.platform = "20203000.i2s",和.name = "20203000.i2s",

如果使用外部时钟

.daifmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS,

改成

.daifmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM,

4、编译模块并加入内核

make -C /lib/modules/$(uname -r )/build M=$(pwd) modules
sudo insmod my_loader.ko
lsmod | grep my_loader

5、检查模块是否载入

dmesg | tail

树莓派打造一个适合音乐制作的系统(声卡部分)_第1张图片

6、在启动时载入模块

sudo cp my_loader.ko /lib/modules/$(uname -r) 
echo 'my_loader' | sudo tee --append /etc/modules > /dev/null 
sudo depmod -a 
sudo modprobe my_loader

7、查看设备,设备列表里应该会出现我们刚刚创建的声卡设备了

arecord -l

树莓派打造一个适合音乐制作的系统(声卡部分)_第2张图片

/boot/config.txt文件里的dtparam=i2s=on取消注释

 8、检查是否从机模式

重启树莓派,然后终端运行

dmesg

树莓派打造一个适合音乐制作的系统(声卡部分)_第3张图片

 如果树莓派没有接受到I2S时钟,就会出现以上两行I2S SYNC error!

=========================================================================

经过以上操作,我们使用jack音频服务来测试一下

树莓派打造一个适合音乐制作的系统(声卡部分)_第4张图片

说明一下,请确保I2S外部时钟电路正常工作,那么jack服务才能启动成功。

哈哈哈哈,一个2进2出声卡设备创建好了!!!

=========================================================================

如果我们已经做过上述步骤,想要更改配置,比如树莓派作为I2S主时钟,或者将SD卡运行在RPI4上使用,只需要重新编译I2S模块再加入内核即可,开机启动在上述步骤已经做过了。

1、删除/home/pi下诸如linux-3a33f11c48572b9dd0fecac164b3990fc9234da8这样类型的文件夹,因为它是本文第2步下载源代码的时候解压的,注意是文件夹不是压缩包。(更换RPI4才做这一步)

2、再重新执行以下命令(更换RPI4才做这一步)

/usr/bin/rpi-source -q --tag-update
rpi-source --skip-gcc

3、编译模块(必须)

cd rpi-i2s-audio
make -C /lib/modules/$(uname -r )/build M=$(pwd) modules
sudo insmod my_loader.ko

4、加入内核(必须)

sudo cp my_loader.ko /lib/modules/$(uname -r)
sudo depmod -a
sudo modprobe my_loader

========================================================================

目前,理论上我们可以使用市面上各种高端解码IC来搭建我们的树莓派HIFI系统。

随便记录CS4272在I2C模式下的电源时序:

reset引脚低电平跳变到高电平后的10ms之内发送I2C

(寄存器,数据)

0x07,0x03        进入power down模式  进入control port模式

0x06,x010        设置ADC为I2S格式

0x01,0x01        设置DAC为I2S格式

0x07,0x02        上电

你可能感兴趣的:(树莓派,i2s,树莓派,从机,声卡)