【milkv】internal codec -- mic

news2024/11/24 4:02:58

文章目录

  • 一、硬件
  • 二、dts
  • 三、配置引脚board_init
    • pin
  • 四、makefile
  • 五、config
  • 六、添加tinyalsa
  • 七、测试结果
    • 7.1 查看录制device信息
    • 7.2 录制音频
    • 7.3 pc端获取录制好的设备
    • 7.4 使用audacity查看波形

一、硬件

在这里插入图片描述
i2s0 —— adc
i2s1 —— pdm
i2s3 —— dace spk_en存疑

i2s2 —— 外接解码器

pdm可以不用,因为i2s1的di/do用来连接led了。
注意:这里i2s1的信号和内部codec的speaker输出复用了一个引脚,结果给led了。

mic的型号是4015,淘宝上可以直接搜到,插入的时候对准板子上的圆环,对其的话正负就对了。

二、dts

duo_buildroot_sdk\duo-buildroot-sdk\build\boards\default\dts\cv180x\cv180x_base.dtsi


	adc: adc@0300A100 {
		compatible = "cvitek,cv182xaadc";
		reg = <0x0 0x0300A100 0x0 0x100>;
		clocks = <&i2s_mclk 0>;
		clock-names = "i2sclk";
		clk_source = <0x04130000>; /* MCLK source is I2S3 */
	};

	dac: dac@0300A000 {
		compatible = "cvitek,cv182xadac";
		reg = <0x0 0x0300A000 0x0 0x100>;
		clocks = <&i2s_mclk 0>;
		clock-names = "i2sclk";
	};

	pdm: pdm@0x041D0C00 {
		compatible = "cvitek,cv1835pdm";
		reg = <0x0 0x041D0C00 0x0 0x100>;
		clocks = <&i2s_mclk 0>;
		clock-names = "i2sclk";
	};

	sound_adc {
		compatible = "cvitek,cv182xa-adc";
		cvi,model = "CV182XA";
		cvi,card_name = "cv182xa_adc";
	};

	sound_dac {
		compatible = "cvitek,cv182xa-dac";
		cvi,model = "CV182XA";
		cvi,card_name = "cv182xa_dac";
	};

	sound_PDM {
		compatible = "cvitek,cv182x-pdm";
		cvi,model = "CV182X";
		cvi,card_name = "cv182x_internal_PDM";
	};

cvi-pdm用Cv1835_cv1835pdm.c
182x的dai_link还是旧的接口,编译不过

//cv182x_cv182xpdm.c
static struct snd_soc_dai_link cv182x_pdm_dai = {
	.name = "cv182x-i2s-pdm",
	.stream_name = "cv182x-pdm",
	.cpu_dai_name = "4110000.i2s",
	.codec_dai_name = "cv1835pdm",
	.platform_name = "4110000.i2s",
	.codec_name = "41d0c00.pdm",
	.ops = &cv182x_pdm_ops,
	.init = cv182x_pdm_codec_init,
	.dai_fmt = SND_SOC_DAIFMT_I2S
	| SND_SOC_DAIFMT_IB_NF
	| SND_SOC_DAIFMT_CBM_CFM,
};

默认i2s是关闭的,需要在如下文件中打开。

duo_buildroot_sdk\duo-buildroot-sdk\build\boards\default\dts\cv180x\cv180x_asic_qfn.dtsi

	/* 
		/delete-node/ i2s@04100000;
		/delete-node/ i2s@04130000;
		/delete-node/ i2s@04110000;
		/delete-node/ i2s@04120000; 
	*/

三、配置引脚board_init

PINMUX_CONFIG(SPK_EN, SPK_EN);
PINMUX_CONFIG(PAD_AUD_AINL_MIC, PAD_AUD_AINL_MIC);

在这里插入图片描述
在这里插入图片描述

存疑,如果spk_en只是开关,那out应该是哪里?难道是led吗?

pin

duo_buildroot_sdk\duo-buildroot-sdk\u-boot-2021.10\board\cvitek\cv180x
这里有board的寄存器信息,以及board_init中的接口。

#define SPK_EN__XGPIOA_15 3

#define PAD_AUD_AINL_MIC__XGPIOC_23 3
#define PAD_AUD_AINL_MIC__IIS1_BCLK 4
#define PAD_AUD_AINL_MIC__IIS2_BCLK 5
#define PAD_AUD_AINR_MIC__XGPIOC_22 3
#define PAD_AUD_AINR_MIC__IIS1_DO 4
#define PAD_AUD_AINR_MIC__IIS2_DI 5
#define PAD_AUD_AINR_MIC__IIS1_DI 6
#define PAD_AUD_AOUTL__XGPIOC_25 3
#define PAD_AUD_AOUTL__IIS1_LRCK 4
#define PAD_AUD_AOUTL__IIS2_LRCK 5
#define PAD_AUD_AOUTR__XGPIOC_24 3
#define PAD_AUD_AOUTR__IIS1_DI 4
#define PAD_AUD_AOUTR__IIS2_DO 5
#define PAD_AUD_AOUTR__IIS1_DO 6

四、makefile

结合上述dts中的compatible,去代码中匹配对应的驱动。

obj-$(CONFIG_SND_SOC_CV182XA_CV182XAADC) += cv181x_cv181xadc.o
obj-$(CONFIG_SND_SOC_CV182XA_CV182XADAC) += cv181x_cv181xdac.o

ifeq ($(CONFIG_SND_SOC_CV182XAADC),m)
obj-$(CONFIG_SND_SOC_CV182XAADC) += cv182xa_ai.o
cv182xa_ai-objs += cv181xadc.o
else
obj-$(CONFIG_SND_SOC_CV182XAADC) += cv181xadc.o
endif

ifeq ($(CONFIG_SND_SOC_CV182XADAC),m)
obj-$(CONFIG_SND_SOC_CV182XADAC) += cv182xa_ao.o
cv182xa_ao-objs += cv181xdac.o
else
obj-$(CONFIG_SND_SOC_CV182XADAC) += cv181xdac.o
endif

五、config

打开config
duo_buildroot_sdk\duo-buildroot-sdk\build\boards\cv180x\cv1800b_milkv_duo_sd\linux\cvitek_cv1800b_milkv_duo_sd_defconfig

#PDM
CONFIG_SND_SOC_CV1835PDM=y
CONFIG_SND_SOC_CV1835_CV1835PDM=y

#ADC
CONFIG_SND_SOC_CV182XAADC=y
CONFIG_SND_SOC_CV182XA_CV182XAADC=y

#DAC
CONFIG_SND_SOC_CV182XADAC=y
CONFIG_SND_SOC_CV182XA_CV182XADAC=y

打开i2s0/1/3

六、添加tinyalsa

这个参考我另一个帖子,这里就不赘述了。

七、测试结果

7.1 查看录制device信息

[root@milkv]~# cat /proc/asound/devices
  0: [ 0]   : control
 16: [ 0- 0]: digital audio playback
 32: [ 1]   : control
 33:        : timer
 56: [ 1- 0]: digital audio capture
 64: [ 2]   : control
 80: [ 2- 0]: digital audio playback

如图,当前支持三个pcm设备,其中card1 device0是录制设备,也就是自带mic。

7.2 录制音频

执行下述命令
tinycap:tinyalsa的工具,用于录制音频
-D:card1,具体见/proc/asound/cards的声卡信息
-d:声卡下属的device,查看/proc/asound/device。
-t:录制时长5秒
-c:录制单声道,默认是双声道

[root@milkv]~# tinycap a.wav -D 1 -d 0 -t 5 -c 1
Capturing sample: 1 ch, 48000 hz, 16 bit
Captured 241664 frames

在这里插入图片描述

在这里插入图片描述

7.3 pc端获取录制好的设备

在windows电脑的cmd窗口,输入命令

/root/a.wav:录制存放的音频路径
./:当前cmd窗口所在的文件夹路径

scp root@192.168.42.1:/root/a.wav ./

在这里插入图片描述

7.4 使用audacity查看波形

如图,其中高幅值的是我敲打桌子的声音。

在这里插入图片描述
如下图,这是我说话的声音,但是很明显,收音很小,虽然是贴在设备上说的,这个可以通过tinymix改动gain值变大。
底噪非常大,如果想要听清人声,底噪也同步放大,如果需要识别,那需要加上降噪处理。
在这里插入图片描述
至此,duo自带开发板的录制功能ok了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1123628.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git常用的命令有哪些?

一、前言 git 的操作可以通过命令的形式如执行&#xff0c;日常使用就如下图6个命令即可 实际上&#xff0c;如果想要熟练使用&#xff0c;超过60多个命令需要了解&#xff0c;下面则介绍下常见的的git 命令 二、有哪些 配置 Git 自带一个 git config 的工具来帮助设置控制…

【Python爬虫】安装requests库解决报错问题

requests 确保pip的安装命令行下安装出现的问题以及解决办法换镜像源安装验证安装为什么使用requests库呢 废话不多说了&#xff0c;直接进入正题 确保pip的安装 首先要想安装requests库&#xff0c;第一点就是要确保pip已经安装。这个pip在Python高级版本中已经默认安装了。…

html+js实现自定义弹窗

哈哈 转载 这个还不错 但是我暂时用不到 htmljs实现自定义弹窗_html自定义弹框-CSDN博客 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>自定义弹窗</title><style>body,P{margin:0;padding:0;}.popup {disp…

IBM Spectrum LSF 作业调度系统,让用户、IT 和业务充分利用 HPC

IBM Spectrum LSF 作业调度系统&#xff0c;让用户、IT 和业务充分利用 HPC 要点   通过隐藏工作负载密集型计算环境的 复杂性&#xff0c;提高用户生产效率&#xff1b; 简化计算集群管理并划分工作负载优先级&#xff0c; 以快速满足竞争激烈的行业瞬息万变的需求&#xf…

华为面试题

一、实习 1、健康险核心 batch 自动查询和一键重启 2、后端如何实现免密登录 Spring Boot与Spring Security&#xff1a; 如果你使用的是Spring框架&#xff0c;Spring Security可以为你提供大量的安全功能。创建一个基于Spring Boot的新项目&#xff0c;并添加Spring Securi…

高效访问数据的关键:解析MySQL主键自增长的运作机制!

文章目录 &#x1f34a; 主键自增长的概念&#x1f34a; 主键自增长的数据类型&#x1f34a; 主键自增长的步长&#x1f34a; 主键自增长的性能优化&#x1f389; 为什么需要主键自增长的性能优化?&#x1f389; 主键自增长的性能优化方案&#x1f4dd; 1. 调整主键自增长的步…

C++类和对象中(构造函数,析构函数,拷贝构造函数)详解

C类和对象中[构造函数,析构函数,拷贝构造函数]详解 一.前言1.类的6个默认成员函数 二.构造函数1.构造函数的引出2.无参构造函数3.缺省参数在构造函数中的应用4.编译器实现的默认构造函数5.广义的默认构造函数6.默认构造函数的形成规则 三.析构函数1.析构函数的语法2.编译器实现…

DALL·E 3怎么用?DALL·E 3如何申请开通 ?DALL·E 3如何免费使用?AI绘画教程来喽~

一、引言 DALLE 3 是 OpenAI 在上个月&#xff08;2023 年 9 月&#xff09;发布的一个文生图模型。 相对于 Midjourney 以及 Stable Diffusion&#xff0c;DALLE 3 最大的便利之处在于&#xff0c;用户不需要掌握 Prompt 的写法了&#xff0c;直接自然语言描述即可。 甚至还…

Linux截断文件truncate和ftruncate

truncate()和 ftruncate()系统调用将文件大小设置为 length 参数指定的值。 函数原型 若文件当前长度大于参数 length&#xff0c;调用将丢弃超出部分&#xff0c;若小于参数 length&#xff0c;调用将在文件尾部添加一系列空字节或是一个文件空洞。 示例 区别 两个系统调用之…

【数据分享】2023年我国上市公司数据(Excel格式/Shp格式)

企业是经济活动的参与主体&#xff0c;一个城市的企业数量决定了这个城市的经济发展水平&#xff01;之前我们分享过2023年高新技术企业数据&#xff08;可查看之前的文章获悉详情&#xff09;&#xff0c;我国专精特新“小巨人”企业数据&#xff08;可查看之前的文章获悉详情…

阿里云服务器续费流程_一篇文章搞定

阿里云服务器如何续费&#xff1f;续费流程来了&#xff0c;在云服务器ECS管理控制台选择续费实例、续费时长和续费优惠券&#xff0c;然后提交订单&#xff0c;分分钟即可完成阿里云服务器续费流程&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云服务器详细续费方法&am…

设计模式:策略模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

简介&#xff1a; 策略模式&#xff0c;它是一种行为型设计模式&#xff0c;它定义了算法族&#xff0c;分别封装起来&#xff0c;让它们之间可以互相替换。策略模式让算法的变化独立于使用算法的客户&#xff0c;降低了耦合&#xff0c;增加了系统的可维护性和可扩展性。 策…

JSX看着一篇足以入门

JSX 介绍 学习目标&#xff1a; 能够理解什么是 JSX&#xff0c;JSX 的底层是什么 概念&#xff1a; JSX 是 javaScriptXML(HTML) 的缩写&#xff0c;表示在 JS 代码中书写 HTML 结构 作用&#xff1a; 在 React 中创建 HTML 结构&#xff08;页面 UI 结构&#xff09; 优势&a…

mybatis书写

mybatis <select id"selectUserList" resultType"map"> select * from user </select><!--根据主键查询一条--> <select id"selectById" resultType"map" parameterType"java.lang.Integer"> sele…

跨越单线程限制:Thread类的魅力,引领你进入Java并发编程的新纪元

线程的概述 线程是一个程序的多个执行路径&#xff0c;执行调度的单位&#xff0c;依托于进程存在。 线程不仅可以共享进程的内存&#xff0c;而且还拥有一个属于自己的内存空间&#xff0c;这段内存空间也叫做线程栈&#xff0c;是在建立线程时由系统分配的&#xff0c;主要用…

SCSS动态生成类

前言 在项目开发中&#xff0c;为了方便样式的复用和规范化&#xff0c;通常都会统一一些公共的样式类&#xff0c;如果用传统的css来写就会显得很臃肿。 最近看了看接手的项目的公共css文件&#xff0c;发现很多重复的样式声明&#xff0c;还有全局的样式使用不统一问题。 例…

港联证券:哪家证券公司开户好?

在现代社会&#xff0c;出资理财已经成为了一个不可或缺的部分。出资者在进行股票生意时&#xff0c;不可避免地需求选择一家证券公司进行开户。可是&#xff0c;哪家证券公司开户好&#xff1f;这是每个出资者都需求考虑的问题。本文将从多个角度分析&#xff0c;为您供给一些…

不知道怎么选CRM系统?看这篇就够了

CRM客户管理系统近年来已经从简单的客户管理软件发展成为了帮助企业运营发展的工具。它能够帮助企业优化业务流程、提高客户转化率、获得更多业绩。那么企业在选择CRM系统时有什么要点吗&#xff1f; 1、明确是否有自动化功能 自动化功能可以自动处理那些手动且琐碎的销售流程…

AI语音机器人的重点功能配置之话术

AI机器人运营中的重中之重就是对话术的配置&#xff0c;如何将话术运营好将是影响AI机器人效果的关键因素&#xff0c;那接下来我们了解一下AI机器人的话术模块的几个重点功能。 话术配置 有节点库、关键词、话术内容、转接人工、发送短信、知识库标签、客户意向、允许打断、…

VS Code关闭受限模式,关闭信任工作区

打开VS code每次出现这个界面&#xff0c;烦戳死!今天&#xff0c;贷款也要把它关掉&#xff01; 1、打开设置&#xff1a; 2、搜索以下值 security.workspace.trust3、重新启动VS Code即可&#xff01; 4、或者直接在用户的设置文件 settings.json中加入以下&#xff1a; &…