前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux音频系统编程之芯片平台适配功放Codec Driver解读

Linux音频系统编程之芯片平台适配功放Codec Driver解读

作者头像
程序手艺人
发布2022-09-19 08:04:47
2.5K0
发布2022-09-19 08:04:47
举报
文章被收录于专栏:程序手艺人

1、概述

针对音箱日常工作项目开展的前期,需要快速的适配音频子模块,方便项目的声学评估和开展,期间遇到不少的问题,其中有一些细节往往会忽略掉,然而正好是问题的所在。在此背景下,遇到问题一步一步梳理,方便快速的定位出问题所在 。

适用范围 : 通用的Android / Linux 平台皆可适用

2、硬件相关准备

2.1 确保硬件通路正常

  • 确保硬件板子相关连接都已经准备好,例如包括使用到的 I2C_SDA、I2C_SCK 以及 I2S_MCLK、I2S_BCLK、I2S_LRCK、I2S_DIN、I2S_DOUT 等是否都已连接好,硬件上时 钟及数据脚通路是否都以确定 OK;
  • 主控端 I2S 模块及外挂模块供电正常

2.2 硬件原理图

  • 通过项目相应原理图确认使用的哪组 I2S 及其相应的引脚、复用;
  • 通过相应原理图确认为实现外挂 Codec 与主控间的通讯而使用的哪组 I2C;
    • 例如麦克风 PDM接口的接线图,一方面保证引脚配置,另一方避免引脚冲突

2.3 外挂 Codec 相关 datasheet

  • 确认其使用的主/从模式?(master/slave?)
  • 确认其正常工作的模块时钟频率?
  • 确认其使用的数据传输模式及时钟信号翻转情况?(I2S/PCM?)
  • 确认其使用的数据格式配置?(最大位宽?pcm_lrck_period 周期等?)
  • 外挂 I2C 的 I2C 地址?
    • 例如TAS5805 Datasheet 中的从机地址 ,一定要根据项目实际的电路图中ADR引脚的上拉电阻决定的

3. 软件相关准备

3.1 I2S 驱动及外挂驱动

  • 主控端 I2S 接口模块实现驱动确认支持;
  • 外挂 Codec 实现驱动确认支持;

3.2 软件相关配置修改

  • 主控端 I2S 模块 daudio 相关数据格式配置项参数确认及配置;
  • 主控端 I2S 模块 snddaudio 节点用于与外挂 Codec 绑定用的节点配置确认(外挂 Codec 的 codec name 与 codec_dai name 可通过外挂 Codec 驱动源码等方式确认);
  • 外挂 Codec 的相关节点配置添加确认;

3.3 驱动模块使能

  • 主控端 I2S 模块使能,包括 board.dts 配置文件模块使能及内核配置 menuconfig 模块使能;
  • 外挂 Codec 驱动模块使能,包括 board.dts 配置文件模块使能及内核配置 menuconfig模块使能;

3.4 编译通过并打包

  • 板型编译通过 make;
  • 打包固件;

4. 实际验证

4.1 确认模块声卡注册并绑定成功;

  • 通过指令:cat /proc/asound/cards 查看当前上机启动后是否有成功注册并绑定生成相应的外挂 Codec 名称的声卡; 针对Linux 平台也可以通过 arecord / aplay -l 查看声卡列表
代码语言:javascript
复制
root@:/# cat /proc/asound/cards 
 0 [snddmic        ]: snddmic - snddmic
                      snddmic
 1 [audiocodecex   ]: audiocodec-ex - audiocodec-ex
                      audiocodec-ex
 2 [sndacm8625     ]: sndtas5805 - sndtas5805
                      sndtas5805
  • 通过 tinymix / amixer 查看当前注册声卡的音频控件列表是否正常;
    • tinymix 适用于 Android 平台
    • amixer 适用于 Linux 平台
代码语言:javascript
复制
root@:/# amixer  
Simple mixer control 'Master',0
  Capabilities: pvolume pvolume-joined
  Playback channels: Mono
  Limits: Playback 0 - 578
  Mono: Playback 0 [0%]

4.2 确认 I2C 通讯正常;

  • 可通过指令:dmesg | grep I2C 来查看当前是否有 I2C 相关的错误打印,如timeout / error 等;
    • 一般I2C timeout 的原因主要有 : device端本身就没有回ACK,表现为I2C_ACKERR,大多是slave(从设备)问题,从设备上电是否符合SPEC等; 另外一种就是问题出在在master端(我们的CPU),表现为I2C_TIMEOUT。 在I2C bus没有上电的情况下去操作I2C
  • 可通过外挂 Codec 提供的模块寄存器调试节点,实时操作节点来读写外挂 Codec 寄存器来确认 I2C 通讯是否正常;
  • 如果I2C 不通,可通过i2c-tool 工具扫描发现的设备,单独操作设备,通过逻辑分析仪KingstVIS抓波形进行分析

4.3 外挂 Codec 模块音频通路配置

  • 若有需要,通过 tinymix / amixer 指令工具配置相应外挂 Codec 的播放输出通路;
  • 若有需要,通过 tinymix / amixer 指令工具配置相应外挂 Codec 的播放输出通路;

4.4 功放参数与硬件接法一致

硬件电路中功放接法是BTL模式,功放软件参数必须配置的也是BTL模式,否则会出现无声音的问题。 比如在某项目中,硬件电路接法是PBTL模式,但是功放参数中是BTL模式,所以排查一波之后才确定问题

  • I2C读写正常
  • 通过逻辑分析仪查看 I2S波形正常
  • 然后最后才分析到模式这个疑问点

4.5 播放/录音功能验证

  • 通过 tinyplay / aplay 指令工具播放指定 WAV 音频文件进行播放验证;
    • Linux 平台上也可以通过 speaker-test 进行立体声测试
  • 通过 tinycap / arecord 指令工具进行录制指定路径及名称的 WAV 音频文件,并在录音结束后通过 adb 工具(adb pull)将录音文件拉出并通过音频解析软件进行播放、查看确认等;

5. FAQ

  • 按要求进行 menuconfig 配置,并且在 board.dts 将 I2S 打开,但无声卡生成。
    • 查看 I2S 所使用的引脚是否被其它模块占用。
  • 按照Codec Datasheet 配置 I2C 从机地址,但I2C 一直Timeout
    • 查看硬件电路 I2C SCK / SDA 是否接反以及从机设备供电是否正常
  • 按照Codec Datasheet 配置 I2C 从机地址,当频繁的操作I2C 的时候,出现少部分写入Timeout
    • 查看从机设备的上拉电阻是否按照Datasheet 标准来的
  • 按照流程配置好Codec的音频通路以及I2C Addr,并可以发现音频节点,但是播放没声音
    • 通过逻辑分析仪查看I2S / TDM / PCM 的波形的BCLK设置是否正常
      • 芯片平台 通过dts 中的pcm_lrck_period 字段调整 可配置 16/32/64/128/256 个 bclk
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、概述
  • 2、硬件相关准备
    • 2.1 确保硬件通路正常
      • 2.2 硬件原理图
        • 2.3 外挂 Codec 相关 datasheet
        • 3. 软件相关准备
          • 3.1 I2S 驱动及外挂驱动
            • 3.2 软件相关配置修改
              • 3.3 驱动模块使能
                • 3.4 编译通过并打包
                • 4. 实际验证
                  • 4.1 确认模块声卡注册并绑定成功;
                    • 4.2 确认 I2C 通讯正常;
                      • 4.3 外挂 Codec 模块音频通路配置
                        • 4.4 功放参数与硬件接法一致
                          • 4.5 播放/录音功能验证
                            • 5. FAQ
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档