音频调试———FM

news/2025/1/12 10:47:52/

一、确认硬件接口

根据硬件原理图设计情况获取对应信息:

项目vaule
接在哪个I2CI2C4
接在哪个I2SI2S2
I2S2_DOUT, I2S2_DINPH11, PE9
I2S2-BCLK,I2S2-LRCK,I2S2-DIN0PE6,PE7,PE9

 

二、设备树

 1、设备节点

&i2s2_plat {tdm-num         = <2>;tx-pin          = <0>;rx-pin          = <0>;pinctrl-used;pinctrl-names= "default","sleep";pinctrl-0       = <&i2s2_pins_a &i2s2_pins_c >;pinctrl-1       = <&i2s2_pins_b>;tx-hub-en;rx-sync-en;status          = "okay";
};&i2s2_mach {soundcard-mach,name             = "sndi2s2";soundcard-mach,format           = "i2s";soundcard-mach,frame-master     = <&i2s2_codec>;soundcard-mach,bitclock-master  = <&i2s2_codec>;/* soundcard-mach,frame-inversion; *//* soundcard-mach,bitclock-inversion; */soundcard-mach,slot-num         = <2>;soundcard-mach,slot-width       = <32>;soundcard-mach,capture-only;status          = "okay";i2s2_cpu: soundcard-mach,cpu {sound-dai = <&i2s2_plat>;soundcard-mach,pll-fs   = <1>;/* edp mclk: 512fs */^Msoundcard-mach,mclk-fs  = <0>;};i2s2_codec: soundcard-mach,codec {sound-dai               = <&tef668x>;};
};&twi4 {clock-frequency = <400000>;pinctrl-0 = <&twi4_pins_default>;pinctrl-1 = <&twi4_pins_sleep>;pinctrl-names = "default", "sleep";/* For stability and backwards compatibility, we recommend setting ‘twi_drv_used’ to 1 */twi_drv_used = <1>;twi-supply = <&reg_dcdc4>;status = "okay";tef668x: tef668x@64 {#sound-dai-cells        = <0>;compatible = "tef668x_codec_0";device_type = "tef668x_codec_0";reg = <0x64>;      status = "okay";};
};

2、pinctr信息

三、驱动移植

1、Kconfig

2、Makefile

3、驱动

bsp/drivers/sound/codecs/tef668x

声卡注册 snd_soc_register_codec

混杂设备注册 tef668x_probe(i2c, i2c_id);

static int tef668x_codec_i2c_probe(struct i2c_client *i2c,const struct i2c_device_id *i2c_id)
{struct tef668x_codec_priv *tef668x_codec;int ret = 0;printk("tef668x_codec_i2c_probe 20241218 17:41\n");tef668x_probe(i2c, i2c_id);tef668x_codec = devm_kzalloc(&i2c->dev, sizeof(struct tef668x_codec_priv), GFP_KERNEL);if (tef668x_codec == NULL) {dev_err(&i2c->dev, "Unable to allocate tef668x_codec private data\n");return -ENOMEM;}gTef668xCodec = tef668x_codec;tef668x_codec->i2c = i2c;dev_set_drvdata(&i2c->dev, tef668x_codec);tef668x_codec->fm_switch_on = false;if (i2c_id->driver_data < TEF668X_CODEC_CHIP_NUMS) {i2c_ctrl[i2c_id->driver_data] = i2c;ret = snd_soc_register_codec(&i2c->dev, &tef668x_codec_soc_codec_driver,tef668x_codec_dai[i2c_id->driver_data], 1);if (ret < 0) {dev_err(&i2c->dev,"Failed to register tef668x_codec codec: %d\n", ret);}} else {pr_err("The wrong i2c_id number :%d\n",(int)(i2c_id->driver_data));}if (ret < 0) {dev_err(&i2c->dev,"Failed to register tef668x_codec codec: %d\n", ret);}return ret;
}

混杂设备, 用于 fm 控制调频,搜台

bsp/drivers/sound/codecs/tef668x/misc_drv/tef668x.c

四、FM测试

移植对应APP测试程序后。执行APP,IIC报错

排查后定位,IIC未接上拉电阻,上拉4.7K,到VDD_3V3

上拉后,正常

音频设备:

五、录音播放测试

1、FM 录音

arecord -r 44100 -f S16_LE -D hw:1,0 -c2 /mnt/UDISK/fmrecord.wav

#查看录制状态

cat /proc/asound/sndi2s2/pcm0c/sub0/status

state: RUNNING
owner_pid   : 1565
trigger_time: 1434.845529224
tstamp      : 0.000000000
delay       : 1287
avail       : 1287
avail_max   : 5513
hw_ptr      : 2189948
appl_ptr    : 2188661

2、FM 录制回放

tinymix -D 0 29 1aplay  /mnt/UDISK/fmrecord.wav

3、问题合集

问题1: 录制数据全0

引脚复用异常

原因: PE9 复用成了 IO Disable

root@Longan:~$ devmem 0x20000C4 320xF0033FFFroot@Longan:~$ devmem 0x20000C0 320x44F00002

#设置PE9 I2S

devmem 0x20000C4 32 0xF0033F44

解决办法:function 是 i2s2 i2s2_din

	i2s2_pins_c: i2s2@2 {pins = "PE9";//I2S2-DIN0function = "i2s2"; //"i2s2_din";drive-strength = <20>;bias-disable;};

调试完成!!!!


http://www.ppmy.cn/news/1562476.html

相关文章

【Apache Paimon】-- 13 -- 利用 paimon-flink-action 同步 mysql 表数据

利用 Paimon Schema Evolution 核心特性同步变更的 mysql 表结构和数据 1、背景信息 在Paimon 诞生以前,若 mysql/pg 等数据源的表结构发生变化时,我们有几种处理方式 (1)人工通知(比如常规的使用邮件),然后运维人员手动同步到数据仓库中 (2)使用 flink 消费 DDL bi…

c#版本、.net版本、visual studio版本之间的对应关系

最近这几年一直没用过c#开发&#xff0c;都是从事Qt c开发工作&#xff0c;回想一下之前c#还要追溯到2019年&#xff0c;算算时间大概都已过去4&#xff0c;5年了&#xff0c;时间飞快。 2019真是个神奇的数字&#xff0c;vs2019是我用的时间最长的一个IDE&#xff0c;新冠起始…

Go语言之路————go基本语法、数据类型、变量、常量、输出

Go语言之路————go基本语法、数据类型、变量、常量 一、基本语法知识二、数据类型三、常量四、变量五、作用域六、输入输出 一、基本语法知识 其实编程语言的语法在大框架上都是大差不差的&#xff0c;这就是为啥一个人熟练掌握了一门语言&#xff0c;他能迅速上手另一个语…

Hadoop 实战笔记(一) -- Windows 安装 Hadoop 3.x

环境准备 安装 JAVA 1.8 Java环境搭建之JDK下载及安装下载 Hadoop 3.3.5 安装包 Hadoop 下载&#xff1a;https://archive.apache.org/dist/hadoop/common/ 一、JAVA JDK 环境检查 二、Hadoop(HDFS)环境搭建 1. 解压安装文件 hadoop-3.3.5.tar 2. 配置环境变量 HADOOP_HO…

react ts 定义基本类型,组件通过ref调用时类型提示

记录&#xff0c;以防忘记 子组件 import React, { forwardRef, Ref, useImperativeHandle, useState } from react;// 类型定义方式1 interface IProps {/**参数1 */params1: number | string | undefined/**参数2 */params2: number | string | undefined/**方法 */openDia…

01 Oracle自学环境搭建(Windows系统)

1 Oracle12C安装 1.1 下载 官网地址&#xff1a;https://www.oracle.com/ 进入官网→Resource→Customer Downloads 如果没有登录&#xff0c;会提示登录后后才能下载 选择适合自己的版本&#xff08;我电脑是Windows系统 64位&#xff09; 选择需要的安装包进行下载 双击下载…

继承(7)

大家好&#xff0c;今天我们继续来学习一下继承的知识&#xff0c;这方面需要大家勤动脑才能理解&#xff0c;那么我们来看。 1.9 protected关键字 在类和对象章节中&#xff0c;为了实现封装特性,java中引入访向限定符,主要限定:类或者类中成员能否在类外和其他包中被访问. …

网络安全设备主要有什么

网络安全设备指的肯定是硬件设备了&#xff0c;国内卖安全硬件的没几家&#xff0c;天融信&#xff0c;启明星辰&#xff0c;绿盟&#xff0c;深信服&#xff0c;就这四家卖的比较齐全吧&#xff0c;上它们官网看一下&#xff0c;就知道市面上主要的网络安全设备有哪些了。分类…