• 正文
    • 硬件原理
    • IOMUX配置
    • 设备节点
    • 添加NAU88C22驱动
    • 编译测试
  • 相关推荐
申请入驻 产业图谱

飞凌嵌入式ElfBoard ELF 1板卡-开发板适配之SAI

02/21 09:00
528
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

SAI(synchronous audio interface)是音频专用接口,i.MX6ULL有3路SAI(synchronous audio interface)接口,支持具有帧同步功能的全双工串行接口,例如I2S、AC97、TDM、codec/DSP接口。i.MX6ULL的SAI音频接口只是传输音频数据的数字接口,而我们要听到播放数字音频文件的声音,就需要将这些数字数据信号转换模拟的连续的声音波形(数模转换DAC),经过放大器放大到扬声器或者到耳机。同样录音的时候,就需要将我们的声音通过mic或者拾音器,将连续的模拟信号转换成离散的数字信号(模数转换ADC),一般需要完成采样、量化和编码三个步骤。我们将DAC和ADC的过程称为音频编解码。

SAI音频接口只是传输音频数据的数字接口,所以这些音频编解码的工作需要一个专有的编解码芯片来完成,ELF 1使用的是NAU88C22芯片,NAU88C22可连接mic和扬声器或耳机用于录音和播放声音。i.MX6ULL使用I2S总线与NAU88C22进行音频数据的传输,I2S(Inter—IC Sound)总线,又称集成电路内置音频总线,是Philips公司为数字音频设备之间的音频数据传输而制定的一种总线标准,该总线专门用于音频设备之间的数据传输,广泛应用于各种多媒体系统。

上图中的SAI2_MCLK、SAI2_BCLK、SAI2_SYNC、SAI2_TXD、SAI2_RXD是本音频方案中I2S总线包括的信号,其中SAI2_MCLK是系统时钟,SAI2_BCLK是数据位时钟,SAI2_SYNC是帧时钟,SAI2_TXD是数据发送,SAI2_RXD是数据接收。I2S使用的信号线可根据具体方案而定,不过一般都会包含BCLK、SYNC、TXD或RXD,三根或四根信号线。具体的I2S总线协议原理不再展开来讲,如果有兴趣的或者遇到问题时需要测量其时序的,可自行研究。

i.MX6ULL与NAU88C22相连接的还有一路I2C总线,主要是用于对NAU88C22寄存器进行配置,如初始化配置,或者动态音量调节等等。

硬件原理

i.MX6ULL有3路SAI接口,本方案使用SAI2。I2C总线使用I2C2。i.MX6ULL与NAU88C22连接的引脚有:SAI2_MCLK(JTAG_TMS)、SAI2_BCLK(JTAG_TDI)、SAI2_SYNC(JTAG_TDO)、SAI2_TXD(JTAG_TRST_B)、SAI2_RXD(JTAG_TCK)、I2C2_SDA(UART5_RX_DATA)、I2C2_SCL(UART5_TX_DATA)。

IOMUX配置

确定完引脚,可以在设备树中arch/arm/boot/dts/imx6ull-elf1-emmc.dts添加IOMUX配置节点,在iomuxc节点下已添加好sai2子节点和i2c2子节点:

pinctrl_sai2: sai2grp {

fsl,pins = <

MX6UL_PAD_JTAG_TDI__SAI2_TX_BCLK          0x17088

MX6UL_PAD_JTAG_TDO__SAI2_TX_SYNC         0x17088

MX6UL_PAD_JTAG_TRST_B__SAI2_TX_DATA      0x11088

MX6UL_PAD_JTAG_TCK__SAI2_RX_DATA          0x11088

MX6UL_PAD_JTAG_TMS__SAI2_MCLK             0x17088

>;

};

效果如下:

pinctrl_i2c2: i2c2grp {

fsl,pins = <

MX6UL_PAD_UART5_TX_DATA__I2C2_SCL  0x4001b8b0

MX6UL_PAD_UART5_RX_DATA__I2C2_SDA  0x4001b8b0

>;

};

效果如下:

设备节点

已添加好的sai2节点:

其中pinctrl-0属性中引用了&pinctrl_sai2_hp_det_b节点,此节点是关于耳机和mic插拔检测引脚配置,我们的方案没有使用插拔检测,所以注释掉此配置。iomuxc_snvs节点中的IOMUX配置也注释掉:

sai2节点下的属性主要是进行了时钟设置。

在i2c2节点下添加的NAU88C22子节点:

&i2c2 {

clock_frequency = <100000>;

pinctrl-names = “default”;

pinctrl-0 = <&pinctrl_i2c2>;

status = “okay”;

nau8822: nau8822@1a {

compatible = "nuvoton,nau8822";

reg = <0x1a>;

clocks = <&clks IMX6UL_CLK_SAI2>;

clock-names = "mclk";

#sound-dai-cells = <0>;

status = "okay";

};

};

效果如下:

其子节点codec设备就是NAU88C22芯片,reg属性是此芯片i2c地址0x1a。clocks和clock-name配置了Mclk时钟及时钟名;

另外,由于音频部分采用了和NXP官方不同的方案,我们需要对sound节点进行修改:

        sound {

compatible = "fsl,imx6ul-evk-nau8822",

"fsl,imx-audio-nau8822";

model = "nau8822-audio";

cpu-dai = <&sai2>;

audio-codec = <&nau8822>;

asrc-controller = <&asrc>;

gpr = <&gpr 4 0x100000 0x100000>;

audio-routing =

"Headphone Jack", "AUXOUT1",

"Headphone Jack", "AUXOUT2",

"Headphone Jack", "LHP",

"Headphone Jack", "RHP",

"Ext Spk", "LSPK",

"Ext Spk", "RSPK",

"LMICP", "Main MIC",

"LMICN", "Main MIC",

"RMICP", "Main MIC",

"RMICN", "Main MIC",

"Main MIC", "Mic Bias",

"CPU-Playback", "ASRC-Playback",

"Playback", "CPU-Playback",

"ASRC-Capture", "CPU-Capture",

"CPU-Capture", "Capture";

status = "okay";

};

修改后效果如下:

其中cpu-dai指向使用的具体的sai接口;

audio-codec属性指向使用的音频编解码芯片NAU88C22;

asrc-controller属性指使用的异步采样率转换器

gpr属性用于配置sai相关的gpr通用寄存器

audio-routing是音频组件连接源和连接点对应关系的列表。

至此,设备树已配置完成。

添加NAU88C22驱动

一、将ELF 1开发板资料包2-Linux 源代码2-1 驱动源码6_nau88c22nau8822.cELF 1开发板资料包2-Linux 源代码2-1 驱动源码6_nau88c22nau8822.h拷贝到内核源码的sound/soc/codecs/路径下;

二、将ELF 1开发板资料包2-Linux 源代码2-1 驱动源码6_nau88c22imx-nau8822.c拷贝到内核源码的sound/soc/fsl/路径下:

三、修改sound/soc/codecs/路径下的Kconfig和Makefile:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vi sound/soc/codecs/Kconfig

添加以下内容:

select SND_SOC_nau8822 if I2C

config SND_SOC_nau8822

tristate

添加后效果如下:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vi sound/soc/codecs/Makefile

添加以下内容:

snd-soc-nau8822-objs := nau8822.o

obj-$(CONFIG_SND_SOC_nau8822)    += snd-soc-nau8822.o

添加后效果如下:

四、修改sound/soc/fsl/路径下的Kconfig和Makefile:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vi sound/soc/fsl/Kconfig

添加以下内容:

config SND_SOC_IMX_nau8822

tristate "SoC Audio support for i.MX boards with nau8822"

depends on OF && I2C

select SND_SOC_nau8822

select SND_SOC_IMX_PCM_DMA

select SND_SOC_FSL_SAI

select SND_SOC_FSL_UTILS

select SND_KCTL_JACK

help

SoC Audio support for i.MX boards with nau8822

Say Y if you want to add support for SoC audio on an i.MX board with

a nau8822 codec.

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vi sound/soc/fsl/Makefile

添加以下内容:

snd-soc-imx-nau8822-objs := imx-nau8822.o

obj-$(CONFIG_SND_SOC_IMX_nau8822) += snd-soc-imx-nau8822.o

添加后效果如下:

使用make menuconfig打开图形化配置界面:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ make menuconfig

在路径下增加此两项的配置:

-> Device Drivers

-> Sound card support (SOUND [=y])

-> Advanced Linux Sound Architecture (SND [=y])

-> ALSA for SoC audio support (SND_SOC [=y])

-> SoC Audio for Freescale CPUs

五、替换配置文件

通过make menuconfig修改的内容写入到了.config文件,当使用make imx6ull_elf1_defconfig配置内核源码时,.config文件会被覆盖,因此,需要替换原有的imx6ull_elf1_defconfig。

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ cp .config arch/arm/configs/imx6ull_elf1_defconfig

编译测试

编译内核和设备树并拷贝到开发板:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ make zImage

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ make dtbs

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ scp arch/arm/boot/zImage   root@172.16.0.175:/run/media/mmcblk1p1/

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ scp arch/arm/boot/dts/imx6ull-elf1-emmc.dtb root@172.16.0.175:/run/media/mmcblk1p1/

进行sync操作后重启开发板:

一、设置参数,调整播录音音量大小,输入下图中的命令:

root@ELF1:~# amixer sset "PCM" 255

root@ELF1:~# amixer sset "Headphone" on

root@ELF1:~# amixer sset "Headphone" 25

二、放音测试

root@ELF1:~# aplay elf1_audio.wav
nau8822 1-001a: master clock prescaler 0 for fs 48000

Playing WAVE 'elf1_audio.wav' : Signed 16 bit Little Endian, Rate 22050 Hz, Stereo

三、录音测试

root@ELF1:~# arecord -r 44100 -f S16_LE -c 2 -d 10 record.wav

Playing WAVE 'record.wav' : Signed 16 bit Little Endian,Rate 44100 Hz,Stereo

四、播放录音

root@ELF1:~# aplay record.wav

Playing WAVE 'record.wav' : Signed 16 bit Little Endian,Rate 44100 Hz,Stereo

点赞
收藏
评论
分享
加入交流群
举报

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录