当前位置: 首页 > news >正文

免费公司网站建站苏州知名网站建设设计公司排名

免费公司网站建站,苏州知名网站建设设计公司排名,知名企业网站规划书,wordpress调图片大小文章目录 前言WM8960简介I2S协议接口说明 SAI音频接口简介驱动框架简介设备树配置内核使能声卡设置与测试 后续参考文献 前言 该专栏主要是讲解嵌入式相关的驱动开发#xff0c;但是由于ALSA驱动框架过于复杂#xff0c;实现音频编解码芯片的驱动不是一个人能完成的#xf… 文章目录 前言WM8960简介I2S协议接口说明 SAI音频接口简介驱动框架简介设备树配置内核使能声卡设置与测试 后续参考文献 前言 该专栏主要是讲解嵌入式相关的驱动开发但是由于ALSA驱动框架过于复杂实现音频编解码芯片的驱动不是一个人能完成的所以没有对应具体的驱动代码相关内容包括后面的CANUSBWIFI4G模块这些都是比较复杂的都只会讲解相关的协议等基础知识 音频是我们最常用到的功能音频也是 linux 和安卓的重点应用场合。由于音频驱动开发任务量巨大不是一个人能全流程实现的因此只是通过修改设备树和已写好的驱动进行修改开发该专栏后面的USB驱动、网络驱动等都是如此对基础感兴趣的可以参考专栏的前部分文章。处理器如果既想“听到”外界的声音又想向外界传达自己的“心声” 那么就需要同时用到 DAC 和 ADC 这两款芯片。为了满足声音能够进行一些处理(需要 DSP 单元)、拥有统一的标准接口方便开发等功能因此音频编解码芯片出现了英文名字就是 Audio CODEC在手机或者电脑的介绍中看到“CODEC”这个词语一般说的都是音频编解码后面我们将会以WM8960进行分析。 WM8960简介 WM8960 是一颗由 wolfson(欧胜)公司出品的音频编解码芯片是一颗低功耗、高质量的立 体声音频 CODEC。集成 D 类喇叭功放每个通道可以驱动一个 1W 喇叭(8Ω)。内部集成 3 个 立体声输入源可以灵活配置拥有一路完整的麦克风接口。WM8960 内部 ADC 和 DAC 都为 24 位WM8960 主要特性如下所示 ①、DAC 的 SNR(信噪比)为 98dB3.3V、48KHz 下 THD(谐波失真)为-84dB。 ②、ADC 的 SNR(信噪比)为 94dB3.3V、48KHz 下 THD(谐波失真)为-82dB。 ③、3D 增强。 ④、立体声 D 类功放可以直接外接喇叭8Ω负载下每通道 1W。 ⑤、集成耳机接口。 ⑥、集成麦克风接口。 ⑦、采样率支持 8K、11.025K、12K、16K、22.05K、24K、32K、44.1K 和 48K。 ①、此部分是 WM8960 提供的输入接口作为立体声音频输入源一共提供了三路分别 为 LINPUT1/RINPUT1、LINPUT2/RINPUT2、LINPUT3/RINPUT3。 ②、此部分是 WM8960 的输出接口比如输出给耳机或喇叭SPK_LP/SPK_LN 用于连接 左声道的喇叭支持 1W 的 8Ω喇叭。SPK_RP/SPK_RN 用于连接右声道的喇叭同样支持 1W 的 8Ω喇叭最后就是 HP_L/HP_R用于连接耳机。 ③、此部分是数字音频接口用于和主控制器连接有 5 根线用于主控制器和 WM8960 之间进行数据“沟通”。此接口支持 I2S 格式。 ④、此部分为控制接口是一个标准的 I2C 接口WM8960 要想工作必须对其进行配置 这个 I2C 接口就是用于配置 WM8960 的。 I2S协议 接口说明 I2S(Inter-IC Sound)总线有时候也写作 IISI2S 是飞利浦公司提出的一种用于数字音频设备 之间进行音频数据传输的总线。和 I2C、SPI 这些常见的通信协议一样I2S 总线用于主控制器 和音频 CODEC 芯片之间传输音频数据。要想使用 I2S 协议主控制器和音频 CODEC 都 得支持 I2S 协议I.MX6ULL 的 SAI 外设就支持 I2S 协议。 I2S 接口需要 5 根信号线如下 WS字段(声道)选择信号也叫做 LRCK也叫做帧时钟用于切换左右声道数据WS 为 “1”表示正在传输左声道的数据WS 为“0”表示正在传输右声道的数据。WS 的频率等于采 样率。 SCK串行时钟信号也叫做位时钟(BCLK)音频数据的每一位数据都对应一个 SCK立 体声都是双声道的因此 SCK2×采样率×采样位数。 SD串行数据信号也就是我们实际的音频数据如果要同时实现放音和录音那么就需 要 2 根数据线比如 WM8960 的ADCDAT 和 DACDAT就是分别用于录音和放音。数据最高位优先传输数据的最高位总是出现在一帧开始后(LRCK 变化)的第2个SCK脉冲处。 MCLK为了使音频 CODEC 芯片与主控制器之间能够更好的同步会引入另外一个 叫做 MCLK 的信号也叫做主时钟或系统时钟一般是采样率的 256 倍或 384 倍。 对应的时序图如下图所示其中SD数据相对于LRCK和SCLK位置的不同存在Left Justified(左对齐)和 Right Justified(右对齐)两种格式 SAI音频接口简介 在 STM32 中就是通过 SAI 接口来连接音频 CODECI.MX6ULL 也提供了一个叫做 SAI 的外设全称为 Synchronous Audio Interface翻译 过来就是同步音频接口。 SAI 是一个全双工、支持帧同步的串行接口支持 I2S、AC97、TDM 和音频 DSPSAI 主要特性如下 ①、帧最大为 32 个字。 ②、字大小可选择 8bit 或 32bit。 ③、每个接收和发送通道拥有 32×32bit 的 FIFO。 ④、FIFO 错误以后支持平滑重启。 根据上面两个原理图可以看出SYNC和BCLK只需要连接L或者R的其中一个即可。 驱动框架简介 前面对声卡WM8960I2S协议以及ASI的I2S接口都做了一定的解释如果需要更深入的了解可以网上查阅与之相关的资料这里不在做过多的分析。 WM8960 与 I.MX6ULL 之间有两个通信接口I2C 和 SAI因此设备树中会涉及到 I2C 和 SAI 两个设备节点。 需要一个WM8960驱动文件I2C框架 用于配置 WM8960需要一个SOC端SAI外设的驱动文件用于音频数据传输需要一个驱动文件将WM8960和SOC联系起来 因为第三点的需要ALSA、ASoC驱动应运而生ASoC是在ALSA基础上针对SOC另外改进的ALSA音频驱动框架目前ARM处理的音频驱动框架都是ASoCASoC包含三个部分SOCplatform、Codec部分、板载硬件Machine SOC具体的SOC音频接口驱动SAI接口是由半导体厂商编写好的Codec具体的音频芯片比如WM8960IIC驱动也不需要我们编写Codec芯片厂商会写好板载硬件Machine将具体的SOC与具体的Codec结合与具体的硬件设备相关也就是我们要处理的部分使用ASOC驱动框架将SOC于Codec结合。 设备树配置 首先配置一下 I2C 接口WM8960 连接到了 I2C1 上因此需要在设备树中的“i2c1”节点下需要添加 wm8960 信息。设备树的绑定手册Documentation/devicetree/bindings/sound/wm8960.txt文档给出历程如下 codec: wm89601a {compatible wlf,wm8960;reg 0x1a;wlf,shared-lrclk; };compatible属性值可以找到Codec厂商写好的对应的驱动文件在sound/soc/codecs/wm8960.c里面。 reg设置 WM8960 的 I2C 地址 wlf,shared-lrclk是一个 bool 类型的属性如果添加了此属性WM8960 的 R24 寄存器 的 LRCM 位(bit2)就会置 1。当 LRCM 为 1 的时候只有当 ADC 和 DAC 全部关闭以后 ADCLRC 和 DACLRC 时钟才会关闭。 其次就是配置sai2的控制器驱动在设备树下面可以找到如下内容 /{soc {aips1: aips-bus02000000 {spba-bus02000000 {sai2: sai0202c000 {compatible fsl,imx6ul-sai,fsl,imx6sx-sai;reg 0x0202c000 0x4000;interrupts GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH;clocks clks IMX6UL_CLK_SAI2_IPG,clks IMX6UL_CLK_DUMMY,clks IMX6UL_CLK_SAI2,clks 0, clks 0;clock-names bus, mclk0, mclk1, mclk2, mclk3;dma-names rx, tx;dmas sdma 37 24 0, sdma 38 24 0;status disabled;}; ……在另外一个文档追加了以下内容 sai2 {pinctrl-names default;pinctrl-0 pinctrl_sai2 pinctrl_sai2_hp_det_b;assigned-clocks clks IMX6UL_CLK_SAI2_SEL,clks IMX6UL_CLK_SAI2;assigned-clock-parents clks IMX6UL_CLK_PLL4_AUDIO_DIV;assigned-clock-rates 0, 12288000;status okay; };compatible属性可以找到对应的驱动文件为sound/soc/fsl/fsl_sai.c。 pinctrl_sai2_hp_det_b描述的是耳机插入检测引脚wm8960 支持耳机插入检测这样当耳机插入以后就会通过耳机播放音乐当耳机拔出来以后就会通过喇叭播放音乐。 最后就是板载硬件Machine,sound节点sound节点主要起到链接Codec和sai的作用具体内容如下 /{sound {compatible fsl,imx6ul-evk-wm8960,fsl,imx-audio-wm8960;model wm8960-audio;cpu-dai sai2;audio-codec codec;asrc-controller asrc;codec-master;gpr gpr 4 0x100000 0x100000;/** hp-det hp-det-pin hp-det-polarity;* hp-det-pin: JD1 JD2 or JD3* hp-det-polarity 0: hp detect high for headphone* hp-det-polarity 1: hp detect high for speaker*/hp-det 3 0; // hp-det-gpios gpio5 4 0; // mic-det-gpios gpio5 4 0;audio-routing Headphone Jack, HP_L,Headphone Jack, HP_R,Ext Spk, SPK_LP,Ext Spk, SPK_LN,Ext Spk, SPK_RP,Ext Spk, SPK_RN,LINPUT2, Mic Jack,LINPUT3, Mic Jack,RINPUT1, Main MIC,RINPUT2, Main MIC,Mic Jack, MICB,Main MIC, MICB,CPU-Playback, ASRC-Playback,Playback, CPU-Playback,ASRC-Capture, CPU-Capture,CPU-Capture, Capture;}; };compatible属性可以找到对应的驱动文件为sound/soc/fsl/imx_wm8960.c理论上这个文件是需要我们自己编写的刚好NXP的板子也是用的WM8960这个音频解码芯片可以直接用。 model最终用户看到的此声卡名字这里设置为“wm8960-audio” cpu-daiCPU DAI(Digital Audio Interface)句柄这里是 sai2 这个节点。 audio-codec音频解码芯片句柄也就是 WM8960 芯片这里为“codec”这个节点。 asrc-controllerasrc 控制器asrc 全称为 Asynchronous Sample Rate Converters翻译过来 就是异步采样频率转化器。 hp-det耳机插入检测引脚设置第一个参数为检测引脚3 表示 JD3 为检测引脚。第二个 参数设置检测电平设置为 0 的时候hp 检测到高电平表示耳机插入设置为 1 的时候hp 检 测到高电平表示是喇叭也就是耳机拔出了。 audio-routing音频器件一系列的连接设置每个条目都是一对字符串第一个字符串是 连接的 sink第二个是连接的 source(源)。 内核使能 利用图形化配置界面取消 ALSA 模拟 OSS使能WM8960 驱动Asynchronous Sample Rate Converter (ASRC) module support 和 SoC Audio support for i.MX boards with wm8960驱动使能以后重新编译 linux 内核编译完成以后使用新的 zImage 和.dtb 文件启动。 驱动挂载成功之后会在/dev/snd 目录生成对应的节点 controlC0用于声卡控制C0 表示声卡 0。 pcmC0D0c 和 pcmC0D1c用于录音的 pcm 设备其中的“COD0”和“C0D1”分别表示 声卡 0 中的设备 0 和设备 1最后面的“c”是 capture 的缩写表示录音。 pcmC0D0p 和 pcmC0D1p用于播放的 pcm 设备其中的“COD0”和“C0D1”分别表示 声卡 0 中的设备 0 和设备 1最后面的“p”是 playback 的缩写表示放音。 timer定时器。 音频驱动使能以后还不能直接播放音乐或录音我们还需要移植 alsa-lib 和 alsa-utils 这两 个东西。 声卡设置与测试 应用上的设置与测试这里就不再赘述都按照别人写好的流程依葫芦画瓢大家可以参考正点原子的教材进行开发。 后续 本人对嵌入式行业兴趣浓厚但是发现驱动开发越学越迷茫个人感觉就是驱动开发就算是去芯片原厂或者模组原厂也是做一些缝缝补补或者移植的工作且需要对某一个领域比如音频、网络、蓝牙等领域研究特别深入才可能有能力做驱动开发工作目前本人处于学习阶段不太可能深耕某一个领域因此当前阶段就仅仅只是了解驱动是如何实现底层工作的后期可能会继续研究MCU的RTOS开发和Linux从bootloader-linux内核裁剪-驱动修改-应用开发并将自己所学的皮毛用于开发一个小项目吧 希望对此方向感兴趣的伙伴能一起评论交流 参考文献 个人专栏系列文章正点原子嵌入式驱动开发指南对代码有兴趣的同学可以查看链接https://github.com/NUAATRY/imx6ull_dev
http://www.hkea.cn/news/14342667/

相关文章:

  • 做床上用品网站sae wordpress 上传
  • 做网站多钱外链百科
  • 自己制作网站视频教程网站托管价格
  • 找人做网站做的很烂西安网站制作排名
  • 网站编辑软件都有哪些外贸建站选择哪个服务器好
  • 杭州住房建设部官方网站深圳响应式网站找哪里
  • 博客网站首页设计沈阳网站如何制作
  • 如何自己做网站腾讯als冰桶挑战赛的网络营销方式
  • wordpress关闭网站大企业网站建设
  • 微信菜单栏那些网站怎么做wordpress更新以后进不去了
  • 展示型企业网站建设做网站需要几个人分工
  • 沈阳市浑南区城乡建设局网站thinkphp2.1网站挂文件
  • 海纳企业网站建设模板网站可以用什么做
  • 化妆品 营销型网站网站备案有什么用
  • 一个空间怎么放多个网站访问国外网站太慢
  • 网页网站开发平台南京网络科技公司
  • 临淄网站设计衡水seo培训
  • 长沙优化网站技巧电脑版传奇
  • asp网站源码如何做app推广
  • 网站项目开发流程图甘孜热门抖音代运营
  • 做门户网站需要什么条件专业设计网站效果
  • 创新的南昌网站设计wordpress博客访问
  • 株洲公司做网站资阳网站优化
  • 北京网站建设策划建设公司手机版的学习网站
  • 网站如何接广告产品推广网站设计
  • 做网站常用的背景图像长沙网页设计学校
  • 合肥网站建设培训机构青岛室内设计学校
  • 温州网站设计功能型网站建设
  • 做童车外贸上哪个网站3g手机网站
  • php商务网站开发刚做的网站搜全名查不到