背景

整个嵌入式项目由Buildroot构建,现有项目增加音频TAS5754驱动,详细步骤如下

Buildroot 配置

  • 内核文件配置
Kernel -> Defconfig name -> 内核配置文件名称
  • 内核DTS配置
Kernel -> Device Tree Source file name -> dts名称

内核配置

内核中主要涉及DTS的配置,路径arch/arm64/boot/dts/厂商/xxx.dts

#include "mesonaxg.dtsi"
/ {model = "Amlogic";amlogic-dt-id = "xxxx";  // 这个配置很重要,要和buildroot中Device Tree Source file name名称一致sugr-case-id = "xxx";sugr-hw-id = "11";compatible = "xxx, xxx";interrupt-parent = <&gic>;#size-cells = <2>;
  • DTS中芯片IIC配置
/* for spk board */
&i2c2 {status = "okay";pinctrl-names="default";pinctrl-0=<&c_i2c_master>;npcp215x_e6: npcp215x_e6@e6 {compatible = "nuvoton,npcp215x";#sound-dai-cells = <0>;reg = <0x73>;status = "disable";   // 禁止reset_pin = <&gpio_ao GPIOAO_4 0>;mute_pin  = <&gpio_ao GPIOAO_3 0>;amp_power = <&gpio_ao GPIOAO_7 0>;};tas575x_37: tas575x_37@37 {compatible = "ti,tas575x"; //匹配名称#sound-dai-cells = <0>;reg = <0x4e>;     //IIC从机设备地址status = "okay";  //使能mute_pin  = <&gpio_ao GPIOAO_3 0>;  //引脚配置amp_power = <&gpio_ao GPIOAO_7 0>;};
};

kernel/sound/soc/codecs/厂商/tas575x.c

//DTS 设备匹配
static const struct of_device_id tas575x_of_match[] = {{ .compatible = "ti, tas5754", 0 },{ .compatible = "ti, tas5756", 0 },{ .compatible = "ti, tas575x", 0 },{ }
};
//i2c id 匹配
static const struct i2c_device_id tas575x_i2c_id[] = {{ "tas5754", (kernel_ulong_t) 0 },{ "tas5756", (kernel_ulong_t) 0 },{ "tas575x", (kernel_ulong_t) 0 },{ }
};

//DTS中配置的引脚通过该接口来操作
amp_power = of_get_named_gpio(node,"amp_power",0);
if (amp_power < 0){pr_err("%s fail to get mute pin from dts!\n", __func__);
}
gpio_direction_output(amp_power,GPIOF_OUT_INIT_HIGH);
  • DTS中IIS配置
    aml-audio-card,dai-link@2 {format = "i2s";mclk-fs = <256>;continuous-clock;/* tdmb clk using tdmc so no bclk-inv *///bitclock-inversion;//frame-inversion;bitclock-master = <&aml_tdmc>;frame-master = <&aml_tdmc>;cpu {sound-dai = <&aml_tdmc>;dai-tdm-slot-tx-mask = <1 1>;dai-tdm-slot-rx-mask = <1 1>;dai-tdm-slot-num = <2>;dai-tdm-slot-width = <32>;system-clock-frequency = <12288000>;};codec {//sound-dai = <&npcp215x_e6>;sound-dai = <&tas575x_37>;  //ALSA dai配置};};

IIS这里的配置并没有深入研究,后续需要会跟进

验证音频驱动

1. IIC通信是否成功

static int tas575x_i2c_probe(struct i2c_client *client,const struct i2c_device_id *id)
{//const struct of_device_id *of_id;priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);if (!priv)return -ENOMEM;i2c_set_clientdata(client, priv);priv->regmap = devm_regmap_init_i2c(client, &tas575x_regmap);...return snd_soc_register_codec(dev, &soc_codec_dev_tas575x,&tas575x_dai, 1);
}

需要注意一点:软件中tas575x_i2c_probe匹配成功,IIC不一定通讯成功,需要实际验证

2 . 相关功放引脚

查看功放TAS5754数据手册,MUTE需要拉高功放才能出声,否则会处于静音状态

3. 音频设备节点是否挂载成功
  • 成功创建设备节点,包括播放,录音设备

  • 通过aplay 列出所有声卡和数字音频设备,荧光笔标注的地方代表已经识别到tas575x声卡

  • 音频EQ配置

后续跟进

  • 播放音频
    音频驱动正常启动之后,可以通过alsa-utils-1.1.3.tar.bz2中的提供的工具aplay播放音频,看功放是否正常出声音
aplay -Dhw:0,2 xxx.wav
-D : select PCM by name
0 : 代表 card0   2: 代表 deveice 2

IIC调试

调试IIC过程中需要用到逻辑分析仪,这里用Saleae logic,软件下载地址,软件全平台覆盖,非常方便,相关软件资料见

链接: https://pan.baidu.com/s/1KbFhnSIsWD4bFwJoIk1yzw 提取码: xav9

  • 支持多种协议解析

  • 使用逻辑分析仪实际看一下波形

看波形主要看是否有ACK回应,低电平代表有ACK,高电平代表NACK。

问题总结

1. 测试音频驱动,用应用程序aplay播放wav文件: aplay -Dhw:0,2 xxx.wav

aplay: main:788: audio open error: Device or resource busy

主要由于其他进程占用card 0 设备

2. TAS5754 IIC一直通讯不成功

首先排查硬件,确认线路没有问题。 这个时候发现Pin40 电压为1.2v,显然处于异常情况
硬件排查有线路错误,问题解决

[Linux驱动炼成记] 04-功放TAS5754相关推荐

  1. [Linux驱动炼成记] 11-快速修改芯片驱动中寄存器的值

    实际项目的调试中,往往需要快速修改驱动芯片(只针对IIC通讯)中对应寄存器的值,传统的方式一般是编译驱动 -> 烧录固件 -> 测试,而这样的方式往往很繁琐.这里介绍使用i2c-tools ...

  2. [Linux驱动炼成记] 10 -光感ISL29035调试/IIO子系统

    简介 项目中需要加入光感检测功能,需求一到,就打算自己写驱动,意外的发现最新内核中已经支持该驱动ISL29035.配置好DTS应该初步可以使用.看代码过程中发现isl29035的实现主要是采用IIO子 ...

  3. [ Linux驱动炼成记 ] 15 - 存储器EMMC中Ext4文件系统 中 磁盘空间占用率100%

    产品现象 : 设备(Linux 系统) 运行一段时间后,其中某一个分区 /et/config 突然占用率为100%,而实际空间可能1%都不到. 这种问题百思不得其解.谷歌/百度 所遇到的解决方案都是嵌 ...

  4. 【转】雄鹰计划-卓越工程师炼成记

    原文网址:http://bbs.elecfans.com/jishu_400775_1_1.html 注意: 雄鹰计划所有信息都将有朱兆祺ForARM进行实时更新,注意不良人士的骗局.这个计划全程免费 ...

  5. PPT炼成记 高效能PPT达人的10堂必修课pdf

    下载地址:网盘下载 内容简介 <PPT炼成记>一书主要讲解的内容包括:了解真正的PPT是怎样的,懂得PPT的基本理念和操作规则,文字设计和编排,如何利用图片来突出自己的PPT,巧用颜色才能 ...

  6. 证券一哥炼成记——郭树清

    证券一哥炼成记--郭树清 富凯摘要:改革力度超过所有前任的郭树清,在亿万股民中有着种种争议.不过只有读懂自"整体改革理论"以来的郭树清,才能读懂中国资本市场改革真实的行进路线. 从 ...

  7. 前沿|PaddlePaddle开源项目DeepNav“无人船”炼成记(二)

    前言:本篇继续讲述DeepNav自动驾驶船项目,本次讲解无人船的设计思路和硬件搭建过程.文章素材来源于百度美国研究院王益老师的知乎专栏,欢迎小伙伴们持续关注. 同时,对项目理论基础感兴趣的小伙伴,可以 ...

  8. 全球首颗量子卫星炼成记:“墨子号”打造保密通信新产业

    "墨子号"炼成记 对于我们普通卫星而言,只要顺利升空就意味着至少成功了一半.麻麻不用太操心. 但对于我们量子卫星来说,发射升空后,卫星还要在太空中与地面机构光学实验站进行" ...

  9. 巴川数据科学炼成记_【脑王直通车】小小记忆高手炼成记

    " 记住150个随机数字,你需要多久? [脑王直通车]第8站到来, 杨老师将他在<最强大脑>比赛中运用的 记忆方法倾囊相授, 孩子们变身小小记忆高手! "记忆探秘 你们 ...

  10. gt 630 linux驱动下载,Ubuntu 13.04 双显卡安装NVIDIA GT 630M驱动

    Linux系统:Ubuntu 13.04 安装 bumblebee 以管理双显卡,下面命令会自动安装NVIDIA显卡驱动 sudo add-apt-repository ppa:bumblebee/s ...

最新文章

  1. PowerShell通过安全组创建计算机账号
  2. WinRar 代替之选:7-Zip+7zSfxTool
  3. zookeeper的设计猜想-Follower角色
  4. 装修仿720VR全景平台网站源码
  5. c语言strchr的用法,C 库函数 - strchr()
  6. 事务管理基础:排它锁和共享锁相关知识笔记
  7. 关于源文件用不同的编码方式编写,会导致执行结果不一样的现象及解决方法
  8. childNodes在IE与Firefox中的区别
  9. Extjs layout 总结
  10. 设计图案之间关系的代码实现
  11. 操作系统数据结构知识点总结2
  12. 联想预装office2019_【联想电脑专属福利】超详细图文教程,手把手教你免费激活正版Office...
  13. 易升更新完其他用户登录到这台计算机,windows10系统中总是弹出安全登录窗口的解决方法...
  14. 从0开始的appium+Android+python自动抢红包世界生活
  15. 小程序京东首页底部导航栏代码
  16. Unity正在将云渲染市场拱手相让!
  17. 如何移除Chrome浏览器让人不爽的GoogleUpdate.exe后台更新进程
  18. hexo的安装配置以及主题更换保姆级教程
  19. 【Windows】用批处理指令在浏览器中打开指定文件中的URL地址
  20. 物体围绕某个点旋转一定角度

热门文章

  1. java 填数独_java – 数独求解方法
  2. quartus利用锁相环产生时钟_一种快速位同步时钟提取方案及实现
  3. 第六章第三十题(游戏:双骰子赌博)(Game: craps)
  4. BIGO前端一面面经
  5. NAND Flash一般地址线和数据线共用,对读写速度有一定影响;而NOR Flash闪存数据线和地址线分开,所以相对而言读写速度快一些。
  6. 2021上海交大网络安全保研夏令营经验
  7. 关于运行微信小程序报错 [微信小程序开发者工具] Error: read EBADF
  8. 【C语言】【MPI】MPI编程入门详解
  9. 微软商店打不开怎么办,求助
  10. 解决: 0x803f7001 在运行Microsoft Windows 非核心版本的计算机上,运行“ slui.exe 0x2a 0x803f7001 “以显示错误文本,激活win10步骤流程。