跳转至

Linux I2S驱动移植*

8008可以作为I2S主设备输出音频。在linux或者Android系统上,需要把8008包装为一个标准的codec声卡设备。8008不需要驱动控制,它只需要上电就可以自动运行,并把I2S数据持续输出。

但是,在linux或者Android系统上,还是需要个codec驱动,把8008包装为一个标准的声卡设备。这样linux或者Android上的arecord,tinycap或者录音机工具,才能正确的录音。

文档后续描述,8008和8008C都是一样的驱动。

1. 驱动移植说明*

1】参考驱动 8008C_I2S_Sample.zip (http://yun.nationalchip.com:10000/l/7F2wSd)

2】驱动代码描述:

  • 驱动代码:vcodec.c
  • 编译后生成:vcodec.ko
  • 编译:修改makefile,匹配自己平台的gcc工具链和linux内核头文件,然后执行make

3】该驱动基于ASOC框架

4】下面以MTK平台为例子

​ 在MTK验证前需要:(这里codec就是8008)

  • MTK做I2S Slave,确认可以录音

  • 找到MTK 自己I2S驱动的snd_soc_dai_link,后面绑定需要把codec的名字挂上

​ vcodec.c 中,把 dai 名字写为了:vcodec_dai

​ 并且 8008C 只作为 capture 设备,不支持 playback

因此,需要在MTK的snd_soc_dai_link上,把codec的dai名字绑定上去

这个和MTK的I2S驱动代码相关,需要自己找到codec_dai_name并修改,例如:

然后需要按照如下,设置 MTK 的驱动(注意:MTK 要作为 I2S Slave)

8008C I2S 格式 :

采样率 48K
位宽 输出32bit 有效位16bit
FS 48K
bclk 64fs
对齐 标准I2S格式

驱动生成后,通过insmod加载,使用:arecord –l 查看

可见,生成了一个新的声卡设备,支持录音功能 (录制左右两声道音频)

arecord -D hw:1,0 -d 10 -c 2 -r 48000 -f S16_LE test.wav

使用tinycap录音如下:(设备号根据自己的平台查看下,看是否要修改)

./tinycap /sdcard/record.pcm -D 0 -d 1 -c 2 -r 48000 -b 16